From 5e960a990b062988ce2fb1dc883baff2292c618e Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 7 Sep 2011 15:45:56 +0200 Subject: Implemented data synchronization. --- rtems/rtems_yaffs.c | 20 ++++++++++++++++++-- 1 file 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 -#include +#include #include #include #include @@ -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) -- cgit v1.2.3