* Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
* Use is subject to license terms.
*
- * Copyright (c) 2011, 2013, Intel Corporation.
+ * Copyright (c) 2011, 2014, Intel Corporation.
*/
/*
* This file is part of Lustre, http://www.lustre.org/
const char *name);
int mdd_la_get(const struct lu_env *env, struct mdd_object *obj,
- struct lu_attr *la, struct lustre_capa *capa)
+ struct lu_attr *la)
{
if (mdd_object_exists(obj) == 0) {
CERROR("%s: object "DFID" not found: rc = -2\n",
return -ENOENT;
}
- return mdo_attr_get(env, obj, la, capa);
+ return mdo_attr_get(env, obj, la);
}
struct mdd_thread_info *mdd_env_info(const struct lu_env *env)
struct mdd_object *mdd_obj = lu2mdd_obj(o);
struct lu_attr *attr = MDD_ENV_VAR(env, la_for_start);
- rc = mdd_la_get(env, mdd_obj, attr, BYPASS_CAPA);
+ rc = mdd_la_get(env, mdd_obj, attr);
}
return rc;
ENTRY;
- rc = mdd_la_get(env, mdd_obj, &ma->ma_attr,
- mdd_object_capa(env, md2mdd_obj(obj)));
+ rc = mdd_la_get(env, mdd_obj, &ma->ma_attr);
if ((ma->ma_need & MA_INODE) != 0 && mdd_is_dead_obj(mdd_obj))
ma->ma_attr.la_nlink = 0;
RETURN(-ENOENT);
mdd_read_lock(env, mdd_obj, MOR_TGT_CHILD);
- rc = mdo_xattr_get(env, mdd_obj, buf, name,
- mdd_object_capa(env, mdd_obj));
+ rc = mdo_xattr_get(env, mdd_obj, buf, name);
mdd_read_unlock(env, mdd_obj);
RETURN(rc);
LASSERT(next->do_body_ops != NULL);
LASSERT(next->do_body_ops->dbo_read != NULL);
mdd_read_lock(env, mdd_obj, MOR_TGT_CHILD);
- rc = next->do_body_ops->dbo_read(env, next, buf, &pos,
- mdd_object_capa(env, mdd_obj));
+ rc = dt_read(env, next, buf, &pos);
mdd_read_unlock(env, mdd_obj);
RETURN(rc);
}
ENTRY;
mdd_read_lock(env, mdd_obj, MOR_TGT_CHILD);
- rc = mdo_xattr_list(env, mdd_obj, buf, mdd_object_capa(env, mdd_obj));
+ rc = mdo_xattr_list(env, mdd_obj, buf);
mdd_read_unlock(env, mdd_obj);
if (rc < 0)
rc = mdo_create_obj(env, c, attr, hint, dof, handle);
- LASSERT(ergo(rc == 0, mdd_object_exists(c)));
-
RETURN(rc);
}
int rc;
ENTRY;
- rc = mdo_attr_set(env, obj, attr, handle, mdd_object_capa(env, obj));
+ rc = mdo_attr_set(env, obj, attr, handle);
#ifdef CONFIG_FS_POSIX_ACL
if (!rc && (attr->la_valid & LA_MODE) && needacl)
rc = mdd_acl_chmod(env, obj, attr->la_mode, handle);
LASSERT(oattr != NULL);
- /* export destroy does not have ->le_ses, but we may want
- * to drop LUSTRE_SOM_FL. */
uc = lu_ucred_check(env);
if (uc == NULL)
RETURN(0);
}
}
- /* For both Size-on-MDS case and truncate case,
- * "la->la_valid & (LA_SIZE | LA_BLOCKS)" are ture.
- * We distinguish them by "flags & MDS_SOM".
- * For SOM case, it is true, the MAY_WRITE perm has been checked
- * when open, no need check again. For truncate case, it is false,
- * the MAY_WRITE perm should be checked here. */
- if (flags & MDS_SOM) {
- /* For the "Size-on-MDS" setattr update, merge coming
- * attributes with the set in the inode. BUG 10641 */
- if ((la->la_valid & LA_ATIME) &&
- (la->la_atime <= oattr->la_atime))
- la->la_valid &= ~LA_ATIME;
-
- /* OST attributes do not have a priority over MDS attributes,
- * so drop times if ctime is equal. */
- if ((la->la_valid & LA_CTIME) &&
- (la->la_ctime <= oattr->la_ctime))
- la->la_valid &= ~(LA_MTIME | LA_CTIME);
- } else {
- if (la->la_valid & (LA_SIZE | LA_BLOCKS)) {
- if (!((flags & MDS_OWNEROVERRIDE) &&
- (uc->uc_fsuid == oattr->la_uid)) &&
- !(flags & MDS_PERM_BYPASS)) {
- rc = mdd_permission_internal(env, obj,
- oattr, MAY_WRITE);
- if (rc != 0)
- RETURN(rc);
- }
- }
- if (la->la_valid & LA_CTIME) {
- /* The pure setattr, it has the priority over what is
- * already set, do not drop it if ctime is equal. */
- if (la->la_ctime < oattr->la_ctime)
- la->la_valid &= ~(LA_ATIME | LA_MTIME |
- LA_CTIME);
+ if (la->la_valid & (LA_SIZE | LA_BLOCKS)) {
+ if (!((flags & MDS_OWNEROVERRIDE) &&
+ (uc->uc_fsuid == oattr->la_uid)) &&
+ !(flags & MDS_PERM_BYPASS)) {
+ rc = mdd_permission_internal(env, obj, oattr,
+ MAY_WRITE);
+ if (rc != 0)
+ RETURN(rc);
}
}
+ if (la->la_valid & LA_CTIME) {
+ /* The pure setattr, it has the priority over what is
+ * already set, do not drop it if ctime is equal. */
+ if (la->la_ctime < oattr->la_ctime)
+ la->la_valid &= ~(LA_ATIME | LA_MTIME | LA_CTIME);
+ }
+
RETURN(0);
}
* If this fails, we must fail the whole transaction; we don't
* want the change to commit without the log entry.
* \param mdd_obj - mdd_object of change
- * \param handle - transacion handle
+ * \param handle - transaction handle
*/
int mdd_changelog_data_store(const struct lu_env *env, struct mdd_device *mdd,
enum changelog_rec_type type, int flags,
}
flags = (flags & CLF_FLAGMASK) | CLF_VERSION;
- if (uc->uc_jobid[0] != '\0')
+ if (uc != NULL && uc->uc_jobid[0] != '\0')
flags |= CLF_JOBID;
reclen = llog_data_len(changelog_rec_offset(flags & CLF_SUPPORTED));
if (attr->la_valid & LA_MODE) {
mdd_read_lock(env, obj, MOR_TGT_CHILD);
rc = mdo_xattr_get(env, obj, &LU_BUF_NULL,
- XATTR_NAME_ACL_ACCESS, BYPASS_CAPA);
+ XATTR_NAME_ACL_ACCESS);
mdd_read_unlock(env, obj);
if (rc == -EOPNOTSUPP || rc == -ENODATA)
rc = 0;
int rc;
ENTRY;
- /* we do not use ->attr_set() for LOV/SOM/HSM EA any more */
+ /* we do not use ->attr_set() for LOV/HSM EA any more */
LASSERT((ma->ma_valid & MA_LOV) == 0);
LASSERT((ma->ma_valid & MA_HSM) == 0);
- LASSERT((ma->ma_valid & MA_SOM) == 0);
- rc = mdd_la_get(env, mdd_obj, attr, BYPASS_CAPA);
+ rc = mdd_la_get(env, mdd_obj, attr);
if (rc)
RETURN(rc);
CLASSERT(sizeof(struct hsm_attrs) <= sizeof(info->mti_xattr_buf));
current_buf = mdd_buf_get(env, info->mti_xattr_buf,
sizeof(info->mti_xattr_buf));
- rc = mdo_xattr_get(env, mdd_obj, current_buf, XATTR_NAME_HSM,
- mdd_object_capa(env, mdd_obj));
+ rc = mdo_xattr_get(env, mdd_obj, current_buf, XATTR_NAME_HSM);
rc = lustre_buf2hsm(current_buf->lb_buf, rc, current_mh);
if (rc < 0 && rc != -ENODATA)
GOTO(free, rc);
int rc;
ENTRY;
- rc = mdd_la_get(env, mdd_obj, attr, BYPASS_CAPA);
+ rc = mdd_la_get(env, mdd_obj, attr);
if (rc)
RETURN(rc);
}
}
- rc = mdo_xattr_set(env, mdd_obj, buf, name, fl, handle,
- mdd_object_capa(env, mdd_obj));
+ rc = mdo_xattr_set(env, mdd_obj, buf, name, fl, handle);
mdd_write_unlock(env, mdd_obj);
if (rc)
GOTO(stop, rc);
int rc;
ENTRY;
- rc = mdd_la_get(env, mdd_obj, attr, BYPASS_CAPA);
+ rc = mdd_la_get(env, mdd_obj, attr);
if (rc)
RETURN(rc);
GOTO(stop, rc);
mdd_write_lock(env, mdd_obj, MOR_TGT_CHILD);
- rc = mdo_xattr_del(env, mdd_obj, name, handle,
- mdd_object_capa(env, mdd_obj));
+ rc = mdo_xattr_del(env, mdd_obj, name, handle);
mdd_write_unlock(env, mdd_obj);
if (rc)
GOTO(stop, rc);
ENTRY;
repeat:
- rc = mdo_xattr_get(env, obj, buf, XATTR_NAME_LOV,
- mdd_object_capa(env, obj));
+ rc = mdo_xattr_get(env, obj, buf, XATTR_NAME_LOV);
if (rc == -ERANGE) {
/* mti_big_buf is allocated but is too small
ENTRY;
rc = mdo_xattr_set(env, o, buf, XATTR_NAME_HSM, LU_XATTR_REPLACE,
- handle, mdd_object_capa(env, o));
+ handle);
if (rc != 0)
RETURN(rc);
if (rc < 0)
swap(fst_o, snd_o);
- rc = mdd_la_get(env, fst_o, fst_la, BYPASS_CAPA);
+ rc = mdd_la_get(env, fst_o, fst_la);
if (rc != 0)
RETURN(rc);
- rc = mdd_la_get(env, snd_o, snd_la, BYPASS_CAPA);
+ rc = mdd_la_get(env, snd_o, snd_la);
if (rc != 0)
RETURN(rc);
GOTO(stop, rc = -ENOMEM);
/* Read HSM attribute */
- rc = mdo_xattr_get(env, fst_o, fst_hsm_buf, XATTR_NAME_HSM,
- BYPASS_CAPA);
+ rc = mdo_xattr_get(env, fst_o, fst_hsm_buf, XATTR_NAME_HSM);
if (rc < 0)
GOTO(stop, rc);
- rc = mdo_xattr_get(env, snd_o, snd_hsm_buf, XATTR_NAME_HSM,
- BYPASS_CAPA);
+ rc = mdo_xattr_get(env, snd_o, snd_hsm_buf, XATTR_NAME_HSM);
if (rc < 0)
GOTO(stop, rc);
}
}
- rc = mdo_xattr_set(env, fst_o, snd_buf, XATTR_NAME_LOV, fst_fl, handle,
- mdd_object_capa(env, fst_o));
+ rc = mdo_xattr_set(env, fst_o, snd_buf, XATTR_NAME_LOV, fst_fl, handle);
if (rc != 0)
GOTO(stop, rc);
} else {
if (fst_buf->lb_buf != NULL)
rc = mdo_xattr_set(env, snd_o, fst_buf, XATTR_NAME_LOV,
- LU_XATTR_REPLACE, handle,
- mdd_object_capa(env, snd_o));
+ LU_XATTR_REPLACE, handle);
else
- rc = mdo_xattr_del(env, snd_o, XATTR_NAME_LOV, handle,
- mdd_object_capa(env, snd_o));
+ rc = mdo_xattr_del(env, snd_o, XATTR_NAME_LOV, handle);
}
if (rc != 0) {
fst_lmm->lmm_oi = *saved_oi;
fst_lmm->lmm_layout_gen = cpu_to_le16(fst_gen - 1);
rc2 = mdo_xattr_set(env, fst_o, fst_buf, XATTR_NAME_LOV,
- LU_XATTR_REPLACE, handle,
- mdd_object_capa(env, fst_o));
+ LU_XATTR_REPLACE, handle);
} else {
- rc2 = mdo_xattr_del(env, fst_o, XATTR_NAME_LOV, handle,
- mdd_object_capa(env, fst_o));
+ rc2 = mdo_xattr_del(env, fst_o, XATTR_NAME_LOV, handle);
}
if (rc2 < 0)
goto do_lbug;
mdd_write_lock(env, mdd_obj, MOR_TGT_CHILD);
- rc = mdd_la_get(env, mdd_obj, attr, BYPASS_CAPA);
+ rc = mdd_la_get(env, mdd_obj, attr);
if (rc != 0)
GOTO(out, rc);
}
mdd_write_lock(env, mdd_obj, MOR_TGT_CHILD);
- rc = mdd_la_get(env, mdd_obj, &ma->ma_attr,
- mdd_object_capa(env, mdd_obj));
+ rc = mdd_la_get(env, mdd_obj, &ma->ma_attr);
if (rc != 0) {
CERROR("Failed to get lu_attr of "DFID": %d\n",
PFID(mdd_object_fid(mdd_obj)), rc);
.moo_readpage = mdd_readpage,
.moo_readlink = mdd_readlink,
.moo_changelog = mdd_changelog,
- .moo_capa_get = mdd_capa_get,
.moo_object_sync = mdd_object_sync,
.moo_object_lock = mdd_object_lock,
.moo_object_unlock = mdd_object_unlock,