diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2011-09-07 15:45:56 +0200 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2011-09-07 15:45:56 +0200 |
commit | 5e960a990b062988ce2fb1dc883baff2292c618e (patch) | |
tree | b56bcfe35c154672ec1aa473c8808ce98e21f759 | |
parent | 05a982c0f544a0ff32092307253240fa73126f8a (diff) |
Implemented data synchronization.
-rw-r--r-- | rtems/rtems_yaffs.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/rtems/rtems_yaffs.c b/rtems/rtems_yaffs.c index 4fc4115..d987685 100644 --- a/rtems/rtems_yaffs.c +++ b/rtems/rtems_yaffs.c @@ -20,7 +20,7 @@ */ #include <rtems.h> -#include <rtems/libio.h> +#include <rtems/libio_.h> #include <rtems/seterr.h> #include <rtems/userenv.h> #include <errno.h> @@ -633,7 +633,23 @@ static int ycb_fchmod(rtems_filesystem_location_info_t *loc, mode_t mode) static int ycb_fdatasync(rtems_libio_t *iop) { - return 0; + const rtems_filesystem_location_info_t *pathinfo = &iop->pathinfo; + struct yaffs_obj *obj = pathinfo->node_access; + struct yaffs_dev *dev = obj->my_dev; + int yc = YAFFS_OK; + + ylock(dev); + yc = yaffs_flush_file(obj, 0, 1); + if (rtems_filesystem_is_root_location(pathinfo)) { + yaffs_flush_whole_cache(dev); + } + yunlock(dev); + + if (yc == YAFFS_OK) { + return 0; + } else { + rtems_set_errno_and_return_minus_one(EIO); + } } static int ycb_dir_rmnod(rtems_filesystem_location_info_t *parent_loc, rtems_filesystem_location_info_t *pathloc) |