diff options
| author | Anand Avati <avati@gluster.com> | 2011-06-09 02:32:01 +0000 | 
|---|---|---|
| committer | Anand Avati <avati@gluster.com> | 2011-06-09 01:35:21 -0700 | 
| commit | 42c85439fe470a8cb4eb82944cb5ed094b740f8e (patch) | |
| tree | 86fef74377679ed16f16eed12e39755470be8f2a /xlators/cluster/dht/src | |
| parent | 29397bda249d8d3f93dd6ee5c449b3590dbaf15e (diff) | |
cluster/dht: use GFID returned from hashed subvolume
.. to perform lookups on remaining subvolumes. This way, if there is a
race between two clients to 'fix' GFIDs with gfid-req, then the hashed
subvolume will arbitrate and return the winner in stbuf->ia_gfid. This
patch uses the returned gfid as the new gfid-req thereby preventing
mismatching GFIDs on other servers due to further races.
Signed-off-by: Anand Avati <avati@gluster.com>
BUG: 2522 ([glusterfs-3.1.3qa8]: rm -rf shows invalid argument)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=2522
Diffstat (limited to 'xlators/cluster/dht/src')
| -rw-r--r-- | xlators/cluster/dht/src/dht-common.c | 5 | 
1 files changed, 5 insertions, 0 deletions
diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c index cd2985002b2..8ca986d7873 100644 --- a/xlators/cluster/dht/src/dht-common.c +++ b/xlators/cluster/dht/src/dht-common.c @@ -821,6 +821,7 @@ dht_lookup_directory (call_frame_t *frame, xlator_t *this, loc_t *loc)          int           i = 0;          dht_conf_t   *conf = NULL;          dht_local_t  *local = NULL; +        int           ret = 0;          GF_VALIDATE_OR_GOTO ("dht", frame, out);          GF_VALIDATE_OR_GOTO ("dht", this, unwind); @@ -844,6 +845,10 @@ dht_lookup_directory (call_frame_t *frame, xlator_t *this, loc_t *loc)                  local->xattr = NULL;          } +        if (!uuid_is_null (local->gfid)) +                ret = dict_set_static_bin (local->xattr_req, "gfid-req", +                                           local->gfid, 16); +          for (i = 0; i < call_cnt; i++) {                  STACK_WIND (frame, dht_lookup_dir_cbk,                              conf->subvolumes[i],  | 
