/* Always remove the page for striped dir, because the page is
* built from temporarily in LMV layer */
- if (inode && S_ISDIR(inode->i_mode) &&
- lmv_dir_striped(ll_i2info(inode)->lli_lsm_md)) {
+ if (inode && ll_dir_striped(inode)) {
__free_page(page);
return;
}
struct cl_attr attr = { 0 };
int rc;
- if (!lli->lli_lsm_md)
+ LASSERT(lli->lli_lsm_md != NULL);
+
+ if (!lmv_dir_striped(lli->lli_lsm_md))
RETURN(0);
down_read(&lli->lli_lsm_sem);
- if (!lmv_dir_striped(lli->lli_lsm_md)) {
- up_read(&lli->lli_lsm_sem);
- RETURN(0);
- }
rc = md_merge_attr(ll_i2mdexp(inode), ll_i2info(inode)->lli_lsm_md,
&attr, ll_md_blocking_ast);
up_read(&lli->lli_lsm_sem);
static inline bool ll_dir_striped(struct inode *inode)
{
- struct ll_inode_info *lli;
- bool rc;
-
LASSERT(inode);
- if (!S_ISDIR(inode->i_mode))
- return false;
-
- lli = ll_i2info(inode);
- if (!lli->lli_lsm_md)
- return false;
-
- down_read(&lli->lli_lsm_sem);
- rc = lmv_dir_striped(lli->lli_lsm_md);
- up_read(&lli->lli_lsm_sem);
-
- return rc;
+ return S_ISDIR(inode->i_mode) &&
+ lmv_dir_striped(ll_i2info(inode)->lli_lsm_md);
}
static inline loff_t ll_file_maxbytes(struct inode *inode)
}
rc = ll_init_lsm_md(inode, md);
- if (rc) {
- up_write(&lli->lli_lsm_sem);
- RETURN(rc);
- }
+ up_write(&lli->lli_lsm_sem);
- /* md_merge_attr() may take long, since lsm is already set, switch to
- * read lock.
- */
- downgrade_write(&lli->lli_lsm_sem);
+ if (rc)
+ RETURN(rc);
/* set md->lmv to NULL, so the following free lustre_md will not free
* this lsm.
*/
md->lmv = NULL;
+ /* md_merge_attr() may take long, since lsm is already set, switch to
+ * read lock.
+ */
+ down_read(&lli->lli_lsm_sem);
+
if (!lmv_dir_striped(lli->lli_lsm_md))
GOTO(unlock, rc = 0);
struct lookup_intent parent_it = {
.it_op = IT_GETATTR,
.it_lock_handle = 0 };
- struct ll_inode_info *lli = ll_i2info(parent);
- struct lu_fid fid = lli->lli_fid;
+ struct lu_fid fid = ll_i2info(parent)->lli_fid;
/* If it is striped directory, get the real stripe parent */
if (unlikely(ll_dir_striped(parent))) {
- down_read(&lli->lli_lsm_sem);
rc = md_get_fid_from_lsm(ll_i2mdexp(parent),
- lli->lli_lsm_md,
+ ll_i2info(parent)->lli_lsm_md,
(*de)->d_name.name,
(*de)->d_name.len, &fid);
- up_read(&lli->lli_lsm_sem);
if (rc != 0)
GOTO(out, rc);
}
}
pos = le64_to_cpu(dp->ldp_hash_end);
- down_read(&lli->lli_lsm_sem);
ll_release_page(dir, page,
le32_to_cpu(dp->ldp_flags) & LDF_COLLIDE);
- up_read(&lli->lli_lsm_sem);
if (sa_low_hit(sai)) {
rc = -EFAULT;
{
const struct lmv_oinfo *oinfo;
- if (!lmv_dir_striped(lsm))
- RETURN(-ESTALE);
+ LASSERT(lmv_dir_striped(lsm));
oinfo = lsm_name_to_stripe_info(lsm, name, namelen, false);
if (IS_ERR(oinfo))