diff options
| author | Susant Palai <spalai@redhat.com> | 2018-04-27 16:40:02 +0530 | 
|---|---|---|
| committer | Jeff Darcy <jeff@pl.atyp.us> | 2018-04-30 19:36:03 +0000 | 
| commit | e2fda098112803bf651c4795952376cb8c1ad204 (patch) | |
| tree | a40d542942310c591566ddded2614301b41fc28f | |
| parent | 1bf8a8addb61d30177f0d10cec64a9dfcd0add92 (diff) | |
dht: gf_defrag_settle_hash should ignore ENOENT and ESTALE error
Problem: A directory deletion can happen just before gf_defrag_settle_hash
which internally does a setxattr operation on a directory.
Solution: Ignore ENOENT and ESTALE errors
Fixes: bz#1572581
Change-Id: I2f91809f3b5e02976c4c3a5a596406a8b2f8f6f2
Signed-off-by: Susant Palai <spalai@redhat.com>
| -rw-r--r-- | xlators/cluster/dht/src/dht-rebalance.c | 9 | 
1 files changed, 8 insertions, 1 deletions
diff --git a/xlators/cluster/dht/src/dht-rebalance.c b/xlators/cluster/dht/src/dht-rebalance.c index c5237585185..91fb94d529c 100644 --- a/xlators/cluster/dht/src/dht-rebalance.c +++ b/xlators/cluster/dht/src/dht-rebalance.c @@ -3616,8 +3616,15 @@ gf_defrag_settle_hash (xlator_t *this, gf_defrag_info_t *defrag,          ret = syncop_setxattr (this, loc, fix_layout, 0, NULL, NULL);          if (ret) { -                gf_log (this->name, GF_LOG_ERROR, +                gf_msg (this->name, GF_LOG_ERROR, -ret, +                        DHT_MSG_LAYOUT_FIX_FAILED,                          "fix layout on %s failed", loc->path); + +                if (-ret == ENOENT || -ret == ESTALE) { +                        /* Dir most likely is deleted */ +                        return 0; +                } +                  return -1;          }  | 
