From d6fc353afce03095c98d67d377eb7ddf334fd42e Mon Sep 17 00:00:00 2001 From: Raghavendra G Date: Wed, 27 May 2015 12:08:54 +0530 Subject: meta: implement fsync(dir) Change-Id: I707c608a9803fe6ef86860ca5578d4d3f63fd2aa BUG: 1225323 Signed-off-by: Raghavendra G Reviewed-on: http://review.gluster.org/10929 Tested-by: NetBSD Build System Tested-by: Gluster Build System Reviewed-by: Pranith Kumar Karampuri --- xlators/meta/src/meta.c | 46 ++++++++++++++++++++++++++---------- xlators/mount/fuse/src/fuse-bridge.c | 10 +++++--- 2 files changed, 40 insertions(+), 16 deletions(-) (limited to 'xlators') diff --git a/xlators/meta/src/meta.c b/xlators/meta/src/meta.c index 20c643f2f75..09ee71b2e9e 100644 --- a/xlators/meta/src/meta.c +++ b/xlators/meta/src/meta.c @@ -169,6 +169,24 @@ meta_ftruncate (call_frame_t *frame, xlator_t *this, fd_t *fd, off_t offset, return 0; } +int32_t +meta_fsync (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags, + dict_t *xdata) +{ + META_FOP (fd->inode, fsync, frame, this, fd, flags, xdata); + + return 0; +} + +int32_t +meta_fsyncdir (call_frame_t *frame, xlator_t *this, fd_t *fd, int32_t flags, + dict_t *xdata) +{ + META_FOP (fd->inode, fsyncdir, frame, this, fd, flags, xdata); + + return 0; +} + int meta_forget (xlator_t *this, inode_t *inode) { @@ -235,19 +253,21 @@ fini (xlator_t *this) struct xlator_fops fops = { - .lookup = meta_lookup, - .opendir = meta_opendir, - .open = meta_open, - .readv = meta_readv, - .flush = meta_flush, - .stat = meta_stat, - .fstat = meta_fstat, - .readdir = meta_readdir, - .readdirp = meta_readdirp, - .readlink = meta_readlink, - .writev = meta_writev, - .truncate = meta_truncate, - .ftruncate = meta_ftruncate + .lookup = meta_lookup, + .opendir = meta_opendir, + .open = meta_open, + .readv = meta_readv, + .flush = meta_flush, + .stat = meta_stat, + .fstat = meta_fstat, + .readdir = meta_readdir, + .readdirp = meta_readdirp, + .readlink = meta_readlink, + .writev = meta_writev, + .truncate = meta_truncate, + .ftruncate = meta_ftruncate, + .fsync = meta_fsync, + .fsyncdir = meta_fsyncdir }; diff --git a/xlators/mount/fuse/src/fuse-bridge.c b/xlators/mount/fuse/src/fuse-bridge.c index 871059d5697..605a24c9091 100644 --- a/xlators/mount/fuse/src/fuse-bridge.c +++ b/xlators/mount/fuse/src/fuse-bridge.c @@ -4420,17 +4420,21 @@ fuse_migrate_fd (xlator_t *this, fd_t *basefd, xlator_t *old_subvol, } if (oldfd->inode->table->xl == old_subvol) { - ret = syncop_fsync (old_subvol, oldfd, 0, NULL, NULL); + if (IA_ISDIR (oldfd->inode->ia_type)) + ret = syncop_fsyncdir (old_subvol, oldfd, 0, NULL, + NULL); + else + ret = syncop_fsync (old_subvol, oldfd, 0, NULL, NULL); + if (ret < 0) { gf_log ("glusterfs-fuse", GF_LOG_WARNING, - "syncop_fsync failed (%s) on fd (%p)" + "syncop_fsync(dir) failed (%s) on fd (%p)" "(basefd:%p basefd-inode.gfid:%s) " "(old-subvolume:%s-%d new-subvolume:%s-%d)", strerror (-ret), oldfd, basefd, uuid_utoa (basefd->inode->gfid), old_subvol->name, old_subvol->graph->id, new_subvol->name, new_subvol->graph->id); - ret = -1; } } else { gf_log ("glusterfs-fuse", GF_LOG_WARNING, -- cgit