X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=blobdiff_plain;f=rtems%2Frtems_yaffs.c;h=bb6edf1467871feed61567b09a14c24d2118816c;hp=6e018aa7746606211c110c57438fbca46a26dfc6;hb=HEAD;hpb=a09dd844ec578bb45ea78201d70f3353aaa4815e diff --git a/rtems/rtems_yaffs.c b/rtems/rtems_yaffs.c index 6e018aa..bb6edf1 100644 --- a/rtems/rtems_yaffs.c +++ b/rtems/rtems_yaffs.c @@ -281,9 +281,9 @@ static int ryfs_utime( obj = yaffs_get_equivalent_obj(obj); if (obj != NULL) { obj->dirty = 1; - obj->yst_atime = (u32) actime; - obj->yst_mtime = (u32) modtime; - obj->yst_ctime = (u32) time(NULL); + obj->yst_atime = actime; + obj->yst_mtime = modtime; + obj->yst_ctime = time(NULL); } else { errno = EIO; rv = -1; @@ -641,6 +641,7 @@ static void ryfs_fsunmount(rtems_filesystem_mount_table_entry_t *mt_entry) ylock(dev); yaffs_flush_whole_cache(dev, 1); + yaffs_checkpoint_save(dev); yaffs_deinitialise(dev); yunlock(dev); rtems_yaffs_os_unmount(dev); @@ -679,18 +680,10 @@ static int ryfs_symlink(const rtems_filesystem_location_info_t *parent_loc, mode = S_IFLNK | ((S_IRWXU | S_IRWXG | S_IRWXO) & ~rtems_filesystem_umask); - created_link = yaffs_create_symlink(parent_dir, name, mode, + created_link = yaffs_create_symlink(parent_dir, name, mode, geteuid(), getegid(), target); if (created_link != NULL) { - // In RTEMS VFS, there is no filesytem-wide sync(), only per-file - // flushes. Filesystem-wide sync is implemented by looping over all of - // the open files and individually fsync()ing them. That's part of why - // every close() in RTEMS-yaffs is accompanied by an implicit fsync(). - // There is no such close() call associated with the symlink's creation, - // since it wasn't created via open(). Therefore, flush it immediately - // instead. - yaffs_flush_file(created_link, 0, 0, 0); ret = 0; } else { errno = EINVAL;