diff options
author | Poornima G <pgurusid@redhat.com> | 2016-11-11 12:08:57 +0530 |
---|---|---|
committer | Rajesh Joseph <rjoseph@redhat.com> | 2016-11-17 02:53:15 -0800 |
commit | 46e5466850311ee69e6ae9a11c2bba2aabadd5de (patch) | |
tree | 8ded03b14f5988aeab9339f878f478e34005e8b1 | |
parent | 35b085ba345cafb2b0ee978a4c4475ab0dcba5a6 (diff) |
marker: Fix inode value in loc, in setxattr fop
On recieving a rename fop, marker_rename() stores the,
oldloc and newloc in its 'local' struct, once the rename
is done, the xtime marker(last updated time) is set on
the file, but sending a setxattr fop. When upcall
receives the setxattr fop, the loc->inode is NULL and
it crashes. The loc->inode can be NULL only in one valid
case, i.e. in rename case where the inode of new loc
can be NULL. Hence, marker should have filled the inode
of the new_loc before issuing a setxattr.
Change-Id: Id638f678c3daaf4a5c29b970b58929d377ae8977
BUG: 1394131
Signed-off-by: Poornima G <pgurusid@redhat.com>
Reviewed-on: http://review.gluster.org/15826
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Reviewed-by: Kotresh HR <khiremat@redhat.com>
Smoke: Gluster Build System <jenkins@build.gluster.org>
Reviewed-by: Rajesh Joseph <rjoseph@redhat.com>
-rwxr-xr-x | tests/bugs/upcall/bug-1394131.t | 29 | ||||
-rw-r--r-- | xlators/features/marker/src/marker.c | 2 |
2 files changed, 31 insertions, 0 deletions
diff --git a/tests/bugs/upcall/bug-1394131.t b/tests/bugs/upcall/bug-1394131.t new file mode 100755 index 00000000000..b371ce4e682 --- /dev/null +++ b/tests/bugs/upcall/bug-1394131.t @@ -0,0 +1,29 @@ +#!/bin/bash + +. $(dirname $0)/../../include.rc +. $(dirname $0)/../../volume.rc + +cleanup; + +## 1. Start glusterd +TEST glusterd; + +## 2. Lets create volume +TEST $CLI volume create $V0 $H0:$B0/${V0}{1,2,3}; + +## 3. Enable the upcall xlator, and increase the md-cache timeout to max +TEST $CLI volume set $V0 features.cache-invalidation on +TEST $CLI volume set $V0 features.cache-invalidation-timeout 600 +TEST $CLI volume set $V0 indexing on + +## 6. Start the volume +TEST $CLI volume start $V0 + +## 7. Create two gluster mounts +TEST glusterfs --volfile-id=/$V0 --volfile-server=$H0 $M0 + +## 8. Create directory and files from the M0 +TEST touch $M0/file1 +TEST mv $M0/file1 $M0/file2 + +cleanup; diff --git a/xlators/features/marker/src/marker.c b/xlators/features/marker/src/marker.c index e0e7c9857e6..f578f6c3f44 100644 --- a/xlators/features/marker/src/marker.c +++ b/xlators/features/marker/src/marker.c @@ -1492,6 +1492,8 @@ marker_rename_cbk (call_frame_t *frame, void *cookie, xlator_t *this, if (priv->feature_enabled & GF_XTIME) { //update marks on oldpath + if (!local->loc.inode) + local->loc.inode = inode_ref (oplocal->loc.inode); gf_uuid_copy (local->loc.gfid, oplocal->loc.inode->gfid); marker_xtime_update_marks (this, oplocal); marker_xtime_update_marks (this, local); |