diff options
| author | N Balachandran <nbalacha@redhat.com> | 2018-07-18 22:09:19 +0530 | 
|---|---|---|
| committer | N Balachandran <nbalacha@redhat.com> | 2018-07-18 22:23:07 +0530 | 
| commit | 730542a5d8c3d9be2202d3c26e9ff5c9404e3fe2 (patch) | |
| tree | ffc15af934d9752005c864a5f080f44c83552dca | |
| parent | ec0d7d77de3e4bd485a4fa2e53c9137e25c71ce7 (diff) | |
cluster/dht: Set loc->gfid before healing attr
AFR takes inodelks when setting attrs. The loc->gfid
and loc->inode->gfid were both null when dht_dir_attr_heal
was called during a fresh lookup of an existing directory.
As the gfid is null, client_pre_inodelk asserts in the gfid
check.
We now set the loc->gfid before calling dht_dir_attr_heal.
Change-Id: I457f5a73fd301d97a03ca032587e73d4803298ac
fixes: bz#1602866
Signed-off-by: N Balachandran <nbalacha@redhat.com>
| -rw-r--r-- | xlators/cluster/dht/src/dht-common.c | 3 | 
1 files changed, 2 insertions, 1 deletions
diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c index d4530829625..45218d23482 100644 --- a/xlators/cluster/dht/src/dht-common.c +++ b/xlators/cluster/dht/src/dht-common.c @@ -1529,7 +1529,6 @@ unlock:                  if (local->need_attrheal) {                          local->need_attrheal = 0;                          if (!__is_root_gfid (inode->gfid)) { -                                gf_uuid_copy (local->gfid, local->mds_stbuf.ia_gfid);                                  local->stbuf.ia_gid = local->mds_stbuf.ia_gid;                                  local->stbuf.ia_uid = local->mds_stbuf.ia_uid;                                  local->stbuf.ia_prot = local->mds_stbuf.ia_prot; @@ -1543,6 +1542,8 @@ unlock:                                          goto skip_attr_heal;                                  }                                  copy_local->stbuf = local->stbuf; +                                gf_uuid_copy (copy_local->loc.gfid, +                                              local->stbuf.ia_gfid);                                  copy_local->mds_stbuf = local->mds_stbuf;                                  copy_local->mds_subvol = local->mds_subvol;                                  copy->local = copy_local;  | 
