summaryrefslogtreecommitdiffstats
path: root/xlators/nfs
diff options
context:
space:
mode:
authorMohammed Junaid <junaid@redhat.com>2012-03-07 14:16:07 +0530
committerVijay Bellur <vijay@gluster.com>2012-03-07 09:19:33 -0800
commit1e22ab9d218405f5081a30e90c4541e43243a216 (patch)
tree2baaf670887c5a4613dd8631d3dfddb14095c750 /xlators/nfs
parent0d99aa113d42d96b35e5bc477349b28ef161c4af (diff)
nfs: fcntl lock self healing.
Change-Id: Ic3e00e8ea3b873acbc3abb5155aecdaac848a3e5 BUG: 795386 Signed-off-by: Mohammed Junaid <junaid@redhat.com> Reviewed-on: http://review.gluster.com/2884 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Krishna Srinivas <krishna@gluster.com>
Diffstat (limited to 'xlators/nfs')
-rw-r--r--xlators/nfs/server/src/nfs-fops.c9
-rw-r--r--xlators/nfs/server/src/nfs-fops.h4
2 files changed, 13 insertions, 0 deletions
diff --git a/xlators/nfs/server/src/nfs-fops.c b/xlators/nfs/server/src/nfs-fops.c
index 2624c50e3..1dc07f39a 100644
--- a/xlators/nfs/server/src/nfs-fops.c
+++ b/xlators/nfs/server/src/nfs-fops.c
@@ -1370,6 +1370,11 @@ nfs_fop_lk_cbk (call_frame_t *frame, void *cookie, xlator_t *this,
nfl_to_prog_data (nfl, progcbk, frame);
+ if (!op_ret)
+ fd_lk_insert_and_merge (nfl->fd, nfl->cmd, &nfl->flock);
+
+ fd_unref (nfl->fd);
+
if (progcbk)
progcbk (frame, cookie, this, op_ret, op_errno, flock);
@@ -1392,6 +1397,10 @@ nfs_fop_lk (xlator_t *nfsx, xlator_t *xl, nfs_user_t *nfu, fd_t *fd,
nfs_fop_handle_frame_create (frame, nfsx, nfu, ret, err);
nfs_fop_handle_local_init (frame, nfsx, nfl, cbk, local, ret, err);
+ nfl->cmd = cmd;
+ nfl->fd = fd_ref (fd);
+ nfl->flock = *flock;
+
STACK_WIND_COOKIE (frame, nfs_fop_lk_cbk, xl, xl, xl->fops->lk,
fd, cmd, flock);
ret = 0;
diff --git a/xlators/nfs/server/src/nfs-fops.h b/xlators/nfs/server/src/nfs-fops.h
index 2801da2c3..f86a66b2d 100644
--- a/xlators/nfs/server/src/nfs-fops.h
+++ b/xlators/nfs/server/src/nfs-fops.h
@@ -100,6 +100,10 @@ struct nfs_fop_local {
char newpath[NFS_NAME_MAX + 1];
xlator_t *nfsx;
dict_t *dictgfid;
+
+ fd_t *fd;
+ int cmd;
+ struct gf_flock flock;
};
extern struct nfs_fop_local *