summaryrefslogtreecommitdiffstats
path: root/drivers/staging
diff options
context:
space:
mode:
authorwang di <di.wang@intel.com>2015-02-01 21:52:14 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2015-02-07 17:32:33 +0800
commitb7fb222b8acb13672fe37ba1da79f75263781edf (patch)
treeeb820063f9fa0a61ba61be1ac151ca5fae3e52fd /drivers/staging
parent4c309612ddb9107c3fdbd5233198d59708114bc4 (diff)
downloadlinux-b7fb222b8acb13672fe37ba1da79f75263781edf.tar.bz2
staging/lustre/fld: refer to MDT0 for fld lookup in some cases
It is possible that when fld client is trying to lookup seq on one of MDT, but the connection between the client and the MDT is not being initialized yet, especially during striped dir creation, because client will only send create req to the master MDT, then master MDT will distribute the operation to all of other MDT, instead of client distributing these requests, which will usually trigger the connection. In this case, we will send the fld request to MDT0, since it has all of location information. Signed-off-by: wang di <di.wang@intel.com> Reviewed-on: http://review.whamcloud.com/11780 Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4855 Reviewed-by: Fan Yong <fan.yong@intel.com> Reviewed-by: Mike Pershin <mike.pershin@intel.com> Signed-off-by: Oleg Drokin <oleg.drokin@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging')
-rw-r--r--drivers/staging/lustre/lustre/fld/fld_request.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/staging/lustre/lustre/fld/fld_request.c b/drivers/staging/lustre/lustre/fld/fld_request.c
index 7801db0e79ce..b8d17e109a96 100644
--- a/drivers/staging/lustre/lustre/fld/fld_request.c
+++ b/drivers/staging/lustre/lustre/fld/fld_request.c
@@ -131,11 +131,20 @@ fld_rrb_scan(struct lu_client_fld *fld, u64 seq)
else
hash = 0;
+again:
list_for_each_entry(target, &fld->lcf_targets, ft_chain) {
if (target->ft_idx == hash)
return target;
}
+ if (hash != 0) {
+ /* It is possible the remote target(MDT) are not connected to
+ * with client yet, so we will refer this to MDT0, which should
+ * be connected during mount */
+ hash = 0;
+ goto again;
+ }
+
CERROR("%s: Can't find target by hash %d (seq %#llx). Targets (%d):\n",
fld->lcf_name, hash, seq, fld->lcf_count);