striping can apply in a concurrent process, so the check for striping
should be serialized against any concurrent process.
Signed-off-by: Alex Zhuravlev <bzzz@whamcloud.com>
Change-Id: Iffac2f1f9b53abc26705d70a30c2201b48156ac8
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/53639
Reviewed-by: Patrick Farrell <pfarrell@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
RETURN(0);
down_read(&lli->lli_lsm_sem);
+ if (!ll_dir_striped_locked(inode)) {
+ up_read(&lli->lli_lsm_sem);
+ RETURN(0);
+ }
LASSERT(lli->lli_lsm_obj != NULL);
lsm_obj = lmv_stripe_object_get(lli->lli_lsm_obj);
return fid;
}
-static inline bool ll_dir_striped(struct inode *inode)
+static inline bool ll_dir_striped_locked(struct inode *inode)
{
bool rc;
LASSERT(inode);
if (!S_ISDIR(inode->i_mode))
return false;
- down_read(&ll_i2info(inode)->lli_lsm_sem);
rc = !!(ll_i2info(inode)->lli_lsm_obj &&
lmv_dir_striped(ll_i2info(inode)->lli_lsm_obj));
+
+ return rc;
+}
+
+static inline bool ll_dir_striped(struct inode *inode)
+{
+ bool rc;
+
+ if (!S_ISDIR(inode->i_mode))
+ return false;
+
+ down_read(&ll_i2info(inode)->lli_lsm_sem);
+ rc = ll_dir_striped_locked(inode);
up_read(&ll_i2info(inode)->lli_lsm_sem);
return rc;