diff options
author | shishir gowda <shishirng@gluster.com> | 2011-11-08 20:54:17 +0530 |
---|---|---|
committer | Vijay Bellur <vijay@gluster.com> | 2011-11-09 09:27:58 -0800 |
commit | 78a7a092d7a43a7242f863c201a1390b6fbf05b9 (patch) | |
tree | 4f67e643ad1b221b0e6ee98e4514cc6c2b722e15 /xlators | |
parent | d4c61c4fff1c9e8d32d84eb1a552c9070bdc2c6f (diff) |
cluster/distribute lookup: send revalidate calls to all subvols for directories
If mkdir fails on a subvolume, layout is set taking into account
only the subvols where it was successful. stat does not trigger
selfheal, as its layout based.
Revalidate on directories needs to be sent to all subvols, to fix
the error, and not just on the layout.
Change-Id: Ia3ce2e5a042b2d55cddd7bd8cf31a94de6023234
BUG: 3793
Reviewed-on: http://review.gluster.com/688
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Amar Tumballi <amar@gluster.com>
Diffstat (limited to 'xlators')
-rw-r--r-- | xlators/cluster/dht/src/dht-common.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c index 062371db6ae..f2d7252f90b 100644 --- a/xlators/cluster/dht/src/dht-common.c +++ b/xlators/cluster/dht/src/dht-common.c @@ -1236,6 +1236,17 @@ dht_lookup (call_frame_t *frame, xlator_t *this, local->inode = inode_ref (loc->inode); + if (IA_ISDIR (local->inode->ia_type)) { + local->call_cnt = call_cnt = conf->subvolume_cnt; + for (i = 0; i < call_cnt; i++) { + STACK_WIND (frame, dht_revalidate_cbk, + conf->subvolumes[i], + conf->subvolumes[i]->fops->lookup, + loc, local->xattr_req); + } + return 0; + } + local->call_cnt = layout->cnt; call_cnt = local->call_cnt; |