Whamcloud - gitweb
LU-2679 grant: OFD grant as client requested upon reconnect
[fs/lustre-release.git] / lustre / fld / fld_request.c
index 1b43b3d..995581a 100644 (file)
@@ -130,7 +130,15 @@ fld_rrb_scan(struct lu_client_fld *fld, seqno_t seq)
         int hash;
         ENTRY;
 
-        hash = fld_rrb_hash(fld, seq);
+       /* Because almost all of special sequence located in MDT0,
+        * it should go to index 0 directly, instead of calculating
+        * hash again, and also if other MDTs is not being connected,
+        * the fld lookup requests(for seq on MDT0) should not be
+        * blocked because of other MDTs */
+       if (fid_seq_is_norm(seq))
+               hash = fld_rrb_hash(fld, seq);
+       else
+               hash = 0;
 
         cfs_list_for_each_entry(target, &fld->lcf_targets, ft_chain) {
                 if (target->ft_idx == hash)
@@ -468,12 +476,12 @@ out_req:
 }
 
 int fld_client_lookup(struct lu_client_fld *fld, seqno_t seq, mdsno_t *mds,
-                      __u32 flags, const struct lu_env *env)
+                     __u32 flags, const struct lu_env *env)
 {
-        struct lu_seq_range res;
-        struct lu_fld_target *target;
-        int rc;
-        ENTRY;
+       struct lu_seq_range res = { 0 };
+       struct lu_fld_target *target;
+       int rc;
+       ENTRY;
 
         fld->lcf_flags |= LUSTRE_FLD_RUN;
 
@@ -491,26 +499,25 @@ int fld_client_lookup(struct lu_client_fld *fld, seqno_t seq, mdsno_t *mds,
                "target %s (idx "LPU64")\n", fld->lcf_name, seq,
                fld_target_name(target), target->ft_idx);
 
-        res.lsr_start = seq;
-        res.lsr_flags = flags;
+       res.lsr_start = seq;
+       fld_range_set_type(&res, flags);
 #ifdef __KERNEL__
-        if (target->ft_srv != NULL) {
+       if (target->ft_srv != NULL) {
                LASSERT(env != NULL);
                rc = fld_server_lookup(env, target->ft_srv, seq, &res);
-        } else {
+       } else {
 #endif
-                rc = fld_client_rpc(target->ft_exp,
-                                    &res, FLD_LOOKUP);
+               rc = fld_client_rpc(target->ft_exp, &res, FLD_LOOKUP);
 #ifdef __KERNEL__
-        }
+       }
 #endif
 
-        if (rc == 0) {
-                *mds = res.lsr_index;
+       if (rc == 0) {
+               *mds = res.lsr_index;
 
                fld_cache_insert(fld->lcf_cache, &res);
-        }
-        RETURN(rc);
+       }
+       RETURN(rc);
 }
 EXPORT_SYMBOL(fld_client_lookup);