summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmar Tumballi <amarts@redhat.com>2012-08-17 14:21:07 +0530
committerAnand Avati <avati@redhat.com>2012-08-20 00:16:01 -0700
commit2f2e3bfb5ef89b5ba266a3df7496f95b11fb93e1 (patch)
treecf4b12316f6fd241858614690dcdc35b284ea7f9
parent99f0daf2f46d56b78adfe1a3df1195e1388feaab (diff)
syncop: handle 'dataonly' flag in syncop_fsync()
* and also in syncop_readv(), don't look at _cbk args if op_ret is < 0. Change-Id: I3ab2982bc6d186e75b6adb74c8981e4ff7058bbe Signed-off-by: Amar Tumballi <amarts@redhat.com> BUG: 839950 Reviewed-on: http://review.gluster.org/3828 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Anand Avati <avati@redhat.com>
-rw-r--r--api/src/glfs-fops.c6
-rw-r--r--api/src/glfs.c2
-rw-r--r--libglusterfs/src/syncop.c11
-rw-r--r--libglusterfs/src/syncop.h2
-rw-r--r--xlators/cluster/dht/src/dht-rebalance.c2
-rw-r--r--xlators/mount/fuse/src/fuse-bridge.c2
6 files changed, 13 insertions, 12 deletions
diff --git a/api/src/glfs-fops.c b/api/src/glfs-fops.c
index f3fba84e4e7..6ae0426ac8f 100644
--- a/api/src/glfs-fops.c
+++ b/api/src/glfs-fops.c
@@ -699,8 +699,7 @@ glfs_fsync (struct glfs_fd *glfd)
goto out;
}
- ret = syncop_fsync (subvol, glfd->fd);
-// ret = syncop_fsync (subvol, glfd->fd, 0);
+ ret = syncop_fsync (subvol, glfd->fd, 0);
out:
return ret;
}
@@ -761,8 +760,7 @@ glfs_fdatasync (struct glfs_fd *glfd)
goto out;
}
- ret = syncop_fsync (subvol, glfd->fd);
-// ret = syncop_fsync (subvol, glfd->fd, 1);
+ ret = syncop_fsync (subvol, glfd->fd, 1);
out:
return ret;
}
diff --git a/api/src/glfs.c b/api/src/glfs.c
index 6b3c2113d53..f0bdc86f0c6 100644
--- a/api/src/glfs.c
+++ b/api/src/glfs.c
@@ -16,14 +16,12 @@
reach it via THIS.
- fd migration on graph switch.
- update syncop functions to accept/return xdata. ???
- - syncop_readv to not touch params if args.op_ret < 0.
- protocol/client to reconnect immediately after portmap disconnect.
- handle SEEK_END failure in _lseek()
- handle umask (per filesystem?)
- implement glfs_set_xlator_option(), like --xlator-option
- make itables LRU based
- implement glfs_fini()
- - modify syncop_fsync() to accept 'dataonly' flag
- 0-copy for readv/writev
- reconcile the open/creat mess
*/
diff --git a/libglusterfs/src/syncop.c b/libglusterfs/src/syncop.c
index cbd20251500..2f80f5d8009 100644
--- a/libglusterfs/src/syncop.c
+++ b/libglusterfs/src/syncop.c
@@ -989,9 +989,13 @@ syncop_readv (xlator_t *subvol, fd_t *fd, size_t size, off_t off,
SYNCOP (subvol, (&args), syncop_readv_cbk, subvol->fops->readv,
fd, size, off, flags, NULL);
+ if (args.op_ret < 0)
+ goto out;
+
if (vector)
*vector = args.vector;
- else GF_FREE (args.vector);
+ else
+ GF_FREE (args.vector);
if (count)
*count = args.count;
@@ -1002,6 +1006,7 @@ syncop_readv (xlator_t *subvol, fd_t *fd, size_t size, off_t off,
else if (args.iobref)
iobref_unref (args.iobref);
+out:
errno = args.op_errno;
return args.op_ret;
@@ -1220,12 +1225,12 @@ syncop_fsync_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
}
int
-syncop_fsync (xlator_t *subvol, fd_t *fd)
+syncop_fsync (xlator_t *subvol, fd_t *fd, int dataonly)
{
struct syncargs args = {0, };
SYNCOP (subvol, (&args), syncop_fsync_cbk, subvol->fops->fsync,
- fd, 0, NULL);
+ fd, dataonly, NULL);
errno = args.op_errno;
return args.op_ret;
diff --git a/libglusterfs/src/syncop.h b/libglusterfs/src/syncop.h
index 9f87673d427..619fe7119b9 100644
--- a/libglusterfs/src/syncop.h
+++ b/libglusterfs/src/syncop.h
@@ -246,7 +246,7 @@ int syncop_truncate (xlator_t *subvol, loc_t *loc, off_t offset);
int syncop_unlink (xlator_t *subvol, loc_t *loc);
-int syncop_fsync (xlator_t *subvol, fd_t *fd);
+int syncop_fsync (xlator_t *subvol, fd_t *fd, int dataonly);
int syncop_flush (xlator_t *subvol, fd_t *fd);
int syncop_fstat (xlator_t *subvol, fd_t *fd, struct iatt *stbuf);
int syncop_stat (xlator_t *subvol, loc_t *loc, struct iatt *stbuf);
diff --git a/xlators/cluster/dht/src/dht-rebalance.c b/xlators/cluster/dht/src/dht-rebalance.c
index 8f2f0adb2fb..dace9cd851d 100644
--- a/xlators/cluster/dht/src/dht-rebalance.c
+++ b/xlators/cluster/dht/src/dht-rebalance.c
@@ -736,7 +736,7 @@ dht_migrate_file (xlator_t *this, loc_t *loc, xlator_t *from, xlator_t *to,
/* TODO: Sync the locks */
- ret = syncop_fsync (to, dst_fd);
+ ret = syncop_fsync (to, dst_fd, 0);
if (ret)
gf_log (this->name, GF_LOG_WARNING,
"%s: failed to fsync on %s (%s)",
diff --git a/xlators/mount/fuse/src/fuse-bridge.c b/xlators/mount/fuse/src/fuse-bridge.c
index 837980efcec..af6de8cd07c 100644
--- a/xlators/mount/fuse/src/fuse-bridge.c
+++ b/xlators/mount/fuse/src/fuse-bridge.c
@@ -3717,7 +3717,7 @@ fuse_migrate_fd (xlator_t *this, fd_t *fd, xlator_t *old_subvol,
} while (create_in_progress);
if (fd->inode->table->xl == old_subvol) {
- ret = syncop_fsync (old_subvol, fd);
+ ret = syncop_fsync (old_subvol, fd, 0);
if (ret < 0) {
gf_log ("glusterfs-fuse", GF_LOG_WARNING,
"syncop_fsync failed (%s)", strerror (errno));