summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2011-09-07 15:45:56 +0200
committerSebastian Huber <sebastian.huber@embedded-brains.de>2011-09-07 15:45:56 +0200
commit5e960a990b062988ce2fb1dc883baff2292c618e (patch)
treeb56bcfe35c154672ec1aa473c8808ce98e21f759
parent05a982c0f544a0ff32092307253240fa73126f8a (diff)
Implemented data synchronization.
-rw-r--r--rtems/rtems_yaffs.c20
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)