Whamcloud - gitweb
LU-16527 llite: dir layout inheritance fixes
[fs/lustre-release.git] / lustre / llite / namei.c
index 23feb46..2f0aebd 100644 (file)
@@ -1478,8 +1478,10 @@ static void ll_qos_mkdir_prep(struct md_op_data *op_data, struct inode *dir)
        struct ll_inode_info *rlli = ll_i2info(root);
        struct ll_inode_info *lli = ll_i2info(dir);
        struct lmv_stripe_md *lsm;
+       unsigned short depth;
 
        op_data->op_dir_depth = lli->lli_inherit_depth ?: lli->lli_dir_depth;
+       depth = lli->lli_dir_depth;
 
        /* parent directory is striped */
        if (unlikely(lli->lli_lsm_md))
@@ -1506,13 +1508,17 @@ static void ll_qos_mkdir_prep(struct md_op_data *op_data, struct inode *dir)
        if (lsm->lsm_md_master_mdt_index != LMV_OFFSET_DEFAULT)
                goto unlock;
 
+       /**
+        * Check if the fs default is to be applied.
+        * depth == 0 means 'not inited' for not root dir.
+        */
        if (lsm->lsm_md_max_inherit != LMV_INHERIT_NONE &&
            (lsm->lsm_md_max_inherit == LMV_INHERIT_UNLIMITED ||
-            lsm->lsm_md_max_inherit >= lli->lli_dir_depth)) {
+            (depth && lsm->lsm_md_max_inherit > depth))) {
                op_data->op_flags |= MF_QOS_MKDIR;
                if (lsm->lsm_md_max_inherit_rr != LMV_INHERIT_RR_NONE &&
                    (lsm->lsm_md_max_inherit_rr == LMV_INHERIT_RR_UNLIMITED ||
-                    lsm->lsm_md_max_inherit_rr >= lli->lli_dir_depth))
+                    (depth && lsm->lsm_md_max_inherit_rr > depth)))
                        op_data->op_flags |= MF_RR_MKDIR;
                CDEBUG(D_INODE, DFID" requests qos mkdir %#x\n",
                       PFID(&lli->lli_fid), op_data->op_flags);