diff options
author | vmallika <vmallika@redhat.com> | 2015-07-29 16:42:20 +0530 |
---|---|---|
committer | Raghavendra Bhat <raghavendra@redhat.com> | 2015-09-20 23:49:16 -0700 |
commit | 6cbb306c24400b0a6df5cb71f540f1f0190fcc25 (patch) | |
tree | 63b36f9782f1298dd41c8919d2aca1d5ad671f1f /libglusterfs | |
parent | 3044ea596c51b183d3449fcca70c3c903d6b502f (diff) |
quota/marker: set lk_owner when taking lock on parent in rename
This is a backport of http://review.gluster.org/#/c/11561/
Before doing a rename operation marker takes inode lock on the file
parent,
here lk_owner is NULL and this can cause accounting problem with
multiple rename on the same directory
This patch fix the problem by setting lk_owner
> Change-Id: Ibb789e39b2833e425d0a5fca85282ff1465206cb
> BUG: 1240598
> Signed-off-by: vmallika <vmallika@redhat.com>
> Reviewed-on: http://review.gluster.org/11561
> Tested-by: Gluster Build System <jenkins@build.gluster.com>
> Tested-by: NetBSD Build System <jenkins@build.gluster.org>
> Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
Change-Id: I54db6c27791862e84eaa958fc9fdc363a22eb2e8
BUG: 1247972
Signed-off-by: vmallika <vmallika@redhat.com>
Reviewed-on: http://review.gluster.org/11795
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
Reviewed-by: Raghavendra Bhat <raghavendra@redhat.com>
Diffstat (limited to 'libglusterfs')
-rw-r--r-- | libglusterfs/src/lkowner.h | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/libglusterfs/src/lkowner.h b/libglusterfs/src/lkowner.h index 969d13e5044..cf1e471e820 100644 --- a/libglusterfs/src/lkowner.h +++ b/libglusterfs/src/lkowner.h @@ -80,4 +80,23 @@ is_same_lkowner (gf_lkowner_t *l1, gf_lkowner_t *l2) return ((l1->len == l2->len) && !memcmp(l1->data, l2->data, l1->len)); } +static inline int +is_lk_owner_null (gf_lkowner_t *lkowner) +{ + int is_null = 1; + int i = 0; + + if (lkowner == NULL || lkowner->len == 0) + goto out; + + for (i = 0; i < lkowner->len; i++) { + if (lkowner->data[i] != 0) { + is_null = 0; + break; + } + } +out: + return is_null; +} + #endif /* _LK_OWNER_H */ |