diff options
author | Poornima G <pgurusid@redhat.com> | 2017-02-15 11:18:31 +0530 |
---|---|---|
committer | Pranith Kumar Karampuri <pkarampu@redhat.com> | 2017-02-19 22:26:09 -0500 |
commit | 4badd7334d345b1c27f528140e4c28afaf1f32f6 (patch) | |
tree | 9f61edec8e0b915972743e94c52537b7d4b0fa8c /libglusterfs/src/xlator.h | |
parent | e30af139739e3a6e587d77a9af999035fe20dc37 (diff) |
libglusterfs: Fix a crash due to race between inode_ctx_set and inode_ref
Issue:
Currently inode ref count is gaurded by inode_table->lock, and
inode_ctx is gauarded by inode->lock. With the new patch [1]
inode_ref was modified to change the inode_ctx to track the ref
count per xlator. Thus inode_ref performed under inode_table->lock
is modifying inode_ctx which has to be modified only under inode->lock
Solution:
When a inode is created, inode_ctx holder is allocated for all the xlators.
Hence in case of inode_ctx_set instead of using the first free index in
inode ctx holder, we can have predecided index for every xlator in the graph.
Credits Pranith K <pkarampu@redhat.com>
[1] http://review.gluster.org/13736
Change-Id: I1bfe111c211fcc4fcd761bba01dc87c4c69b5170
BUG: 1423373
Signed-off-by: Poornima G <pgurusid@redhat.com>
Reviewed-on: https://review.gluster.org/16622
Smoke: Gluster Build System <jenkins@build.gluster.org>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
Reviewed-by: Niels de Vos <ndevos@redhat.com>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
Diffstat (limited to 'libglusterfs/src/xlator.h')
-rw-r--r-- | libglusterfs/src/xlator.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/libglusterfs/src/xlator.h b/libglusterfs/src/xlator.h index 1e2698bb61f..c2959efbd95 100644 --- a/libglusterfs/src/xlator.h +++ b/libglusterfs/src/xlator.h @@ -953,6 +953,9 @@ struct _xlator { /* Saved volfile ID (used for multiplexing) */ char *volfile_id; + + /* Its used as an index to inode_ctx*/ + uint32_t xl_id; }; typedef struct { |