From: Artem Blagodarenko <artem_blagodare...@xyratex.com>

After DNE phase 2 has been added to client it sends
create request to slave MDT.  DNT1-only server doesn't
expect request to slave MDT from client. It expects
only cross-mdt request from master MDT. Thus if DNE2
client tries to "mkdir -i 1" on DNE1 server, then
LBUG happened.

This patch adds OBD_CONNECT_DIR_STRIPE connection
flag check on client side. If striped directories are not
supported by server, then create requrest is sent to
master MDT.

Signed-off-by: Artem Blagodarenko <artem_blagodare...@xyratex.com>
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-6071
Xyratex-bug-id: MRP-2319
Reviewed-on: http://review.whamcloud.com/13189
Reviewed-by: Andreas Dilger <andreas.dil...@intel.com>
Reviewed-by: wang di <di.w...@intel.com>
Reviewed-by: Oleg Drokin <oleg.dro...@intel.com>
Signed-off-by: James Simmons <jsimm...@infradead.org>
---
 drivers/staging/lustre/lustre/lmv/lmv_obd.c |   20 ++++++++++++--------
 1 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/drivers/staging/lustre/lustre/lmv/lmv_obd.c 
b/drivers/staging/lustre/lustre/lmv/lmv_obd.c
index 185169c..5928605 100644
--- a/drivers/staging/lustre/lustre/lmv/lmv_obd.c
+++ b/drivers/staging/lustre/lustre/lmv/lmv_obd.c
@@ -1690,15 +1690,19 @@ static int lmv_create(struct obd_export *exp, struct 
md_op_data *op_data,
        if (rc)
                return rc;
 
-       /*
-        * Send the create request to the MDT where the object
-        * will be located
-        */
-       tgt = lmv_find_target(lmv, &op_data->op_fid2);
-       if (IS_ERR(tgt))
-               return PTR_ERR(tgt);
+       if (exp_connect_flags(exp) & OBD_CONNECT_DIR_STRIPE) {
+               /*
+                * Send the create request to the MDT where the object
+                * will be located
+                */
+               tgt = lmv_find_target(lmv, &op_data->op_fid2);
+               if (IS_ERR(tgt))
+                       return PTR_ERR(tgt);
 
-       op_data->op_mds = tgt->ltd_idx;
+               op_data->op_mds = tgt->ltd_idx;
+       } else {
+               CDEBUG(D_CONFIG, "Server doesn't support striped dirs\n");
+       }
 
        CDEBUG(D_INODE, "CREATE obj "DFID" -> mds #%x\n",
               PFID(&op_data->op_fid1), op_data->op_mds);
-- 
1.7.1

Reply via email to