int mdd_acl_init(const struct lu_env *env, struct mdd_object *pobj,
struct mdd_object *cobj, __u32 *mode, struct thandle *handle);
int __mdd_permission_internal(const struct lu_env *env, struct mdd_object *obj,
- int mask, int getattr);
+ int mask, struct lu_attr *la);
int mdd_permission_internal(const struct lu_env *env, struct mdd_object *obj,
int mask);
int mdd_permission_internal_locked(const struct lu_env *env,
/* Check for setting the obj time. */
if ((la->la_valid & (LA_MTIME | LA_ATIME | LA_CTIME)) &&
!(la->la_valid & ~(LA_MTIME | LA_ATIME | LA_CTIME))) {
- rc = __mdd_permission_internal(env, obj, MAY_WRITE, 0);
+ rc = __mdd_permission_internal(env, obj, MAY_WRITE, tmp_la);
if (rc)
RETURN(rc);
}
/* For tuncate (or setsize), we should have MAY_WRITE perm */
if (la->la_valid & (LA_SIZE | LA_BLOCKS)) {
- rc = __mdd_permission_internal(env, obj, MAY_WRITE, 0);
+ rc = __mdd_permission_internal(env, obj, MAY_WRITE, tmp_la);
if (rc)
RETURN(rc);
RETURN(-EISDIR);
if (!(flag & MDS_OPEN_CREATED)) {
- rc = __mdd_permission_internal(env, obj, mode, 0);
+ rc = __mdd_permission_internal(env, obj, mode, tmp_la);
if (rc)
RETURN(rc);
}
int __mdd_permission_internal(const struct lu_env *env,
struct mdd_object *obj,
- int mask, int getattr)
+ int mask, struct lu_attr *la)
{
- struct lu_attr *la = &mdd_env_info(env)->mti_la;
struct md_ucred *uc = md_ucred(env);
__u32 mode;
int rc;
if ((mask & MAY_WRITE) && mdd_is_immutable(obj))
RETURN(-EACCES);
- if (getattr) {
+ if (la == NULL) {
+ la = &mdd_env_info(env)->mti_la;
rc = mdd_la_get(env, obj, la, BYPASS_CAPA);
if (rc)
RETURN(rc);
int mdd_permission_internal(const struct lu_env *env, struct mdd_object *obj,
int mask)
{
- return __mdd_permission_internal(env, obj, mask, 1);
+ return __mdd_permission_internal(env, obj, mask, NULL);
}
inline int mdd_permission_internal_locked(const struct lu_env *env,