diff options
author | N Balachandran <nbalacha@redhat.com> | 2019-01-21 15:15:51 +0530 |
---|---|---|
committer | Amar Tumballi <amarts@redhat.com> | 2019-01-22 05:22:20 +0000 |
commit | 4f58d35f064e5fba3a02b7be8b2525ebe2114254 (patch) | |
tree | bb75b7034711a1e2d5cca71a0bb2f9956aa67bce /xlators/cluster/dht/src/dht-common.c | |
parent | 4deeab02e3d15bd266f24d0f7b28f0e5401fa950 (diff) |
cluster/dht: Delete invalid linkto files in rmdir
rm -rf <dir> fails on dirs which contain linkto files
that point to themselves because dht incorrectly thought
that they were cached files after looking them up.
The fix now treats them as invalid linkto files
and deletes them.
Change-Id: I376c72a5309714ee339c74485e02cfb4e29be643
fixes: bz#1667804
Signed-off-by: N Balachandran <nbalacha@redhat.com>
Diffstat (limited to 'xlators/cluster/dht/src/dht-common.c')
-rw-r--r-- | xlators/cluster/dht/src/dht-common.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c index 4bbecc708ad..912e3c6e104 100644 --- a/xlators/cluster/dht/src/dht-common.c +++ b/xlators/cluster/dht/src/dht-common.c @@ -10029,7 +10029,10 @@ dht_rmdir_is_subvol_empty(call_frame_t *frame, xlator_t *this, lookup_local->loc.path, src->name, gfid); subvol = dht_linkfile_subvol(this, NULL, &trav->d_stat, trav->dict); - if (!subvol) { + if (!subvol || (subvol == src)) { + /* we need to delete the linkto file if it does not have a + * valid subvol or it points to itself. + */ gf_msg(this->name, GF_LOG_INFO, 0, DHT_MSG_INVALID_LINKFILE, "Linkfile does not have link subvolume. " "path = %s, gfid = %s", |