cfs_waitq_t cl_destroy_waitq;
struct mdc_rpc_lock *cl_rpc_lock;
- struct mdc_rpc_lock *cl_setattr_lock;
struct mdc_rpc_lock *cl_close_lock;
struct osc_creator cl_oscc;
0, cancels, count);
}
-/* If mdc_setattr is called with an 'iattr', then it is a normal RPC that
- * should take the normal semaphore and go to the normal portal.
- *
- * If it is called with iattr->ia_valid & ATTR_FROM_OPEN, then it is a
- * magic open-path setattr that should take the setattr semaphore and
- * go to the setattr portal. */
int mdc_setattr(struct obd_export *exp, struct md_op_data *op_data,
void *ea, int ealen, void *ea2, int ea2len,
struct ptlrpc_request **request, struct md_open_data **mod)
RETURN(rc);
}
- if (op_data->op_attr.ia_valid & ATTR_FROM_OPEN) {
- req->rq_request_portal = MDS_SETATTR_PORTAL;
- ptlrpc_at_set_req_timeout(req);
- rpc_lock = obd->u.cli.cl_setattr_lock;
- } else {
- rpc_lock = obd->u.cli.cl_rpc_lock;
- }
+ rpc_lock = obd->u.cli.cl_rpc_lock;
if (op_data->op_attr.ia_valid & (ATTR_MTIME | ATTR_CTIME))
CDEBUG(D_INODE, "setting mtime "CFS_TIME_T
ptlrpcd_addref();
- OBD_ALLOC(cli->cl_setattr_lock, sizeof (*cli->cl_setattr_lock));
- if (!cli->cl_setattr_lock)
- GOTO(err_rpc_lock, rc = -ENOMEM);
- mdc_init_rpc_lock(cli->cl_setattr_lock);
-
OBD_ALLOC(cli->cl_close_lock, sizeof (*cli->cl_close_lock));
if (!cli->cl_close_lock)
- GOTO(err_setattr_lock, rc = -ENOMEM);
+ GOTO(err_rpc_lock, rc = -ENOMEM);
mdc_init_rpc_lock(cli->cl_close_lock);
rc = client_obd_setup(obd, cfg);
err_close_lock:
OBD_FREE(cli->cl_close_lock, sizeof (*cli->cl_close_lock));
-err_setattr_lock:
- OBD_FREE(cli->cl_setattr_lock, sizeof (*cli->cl_setattr_lock));
err_rpc_lock:
OBD_FREE(cli->cl_rpc_lock, sizeof (*cli->cl_rpc_lock));
ptlrpcd_decref();
struct client_obd *cli = &obd->u.cli;
OBD_FREE(cli->cl_rpc_lock, sizeof (*cli->cl_rpc_lock));
- OBD_FREE(cli->cl_setattr_lock, sizeof (*cli->cl_setattr_lock));
OBD_FREE(cli->cl_close_lock, sizeof (*cli->cl_close_lock));
ptlrpcd_decref();
/*
* setattr service configuration.
+ *
+ * XXX To keep the compatibility with old client(< 2.2), we need to
+ * preserve this portal for a certain time, it should be removed
+ * eventually. LU-617.
*/
conf = (typeof(conf)) {
.psc_nbufs = MDS_NBUFS,
};
enum mdt_reint_flag {
- MRF_SETATTR_LOCKED = 1 << 0,
+ MRF_OPEN_TRUNC = 1 << 0,
};
/*
out |= LA_BLOCKS;
if (in & ATTR_FROM_OPEN)
- rr->rr_flags |= MRF_SETATTR_LOCKED;
+ rr->rr_flags |= MRF_OPEN_TRUNC;
if (in & ATTR_ATIME_SET)
out |= LA_ATIME;
RETURN(rc);
}
-/* In the raw-setattr case, we lock the child inode.
- * In the write-back case or if being called from open,
- * the client holds a lock already.
- * We use the ATTR_FROM_OPEN (translated into MRF_SETATTR_LOCKED by
- * mdt_setattr_unpack()) flag to tell these cases apart. */
int mdt_attr_set(struct mdt_thread_info *info, struct mdt_object *mo,
struct md_attr *ma, int flags)
{
struct mdt_lock_handle *lh;
int do_vbr = ma->ma_attr.la_valid & (LA_MODE|LA_UID|LA_GID|LA_FLAGS);
+ __u64 lockpart = MDS_INODELOCK_UPDATE;
int rc;
ENTRY;
lh = &info->mti_lh[MDT_LH_PARENT];
mdt_lock_reg_init(lh, LCK_PW);
- if (!(flags & MRF_SETATTR_LOCKED)) {
- __u64 lockpart = MDS_INODELOCK_UPDATE;
- if (ma->ma_attr.la_valid & (LA_MODE|LA_UID|LA_GID))
- lockpart |= MDS_INODELOCK_LOOKUP;
+ if (ma->ma_attr.la_valid & (LA_MODE|LA_UID|LA_GID))
+ lockpart |= MDS_INODELOCK_LOOKUP;
- rc = mdt_object_lock(info, mo, lh, lockpart, MDT_LOCAL_LOCK);
- if (rc != 0)
- RETURN(rc);
- }
+ rc = mdt_object_lock(info, mo, lh, lockpart, MDT_LOCAL_LOCK);
+ if (rc != 0)
+ RETURN(rc);
if (mdt_object_exists(mo) == 0)
GOTO(out_unlock, rc = -ENOENT);
/* start a log jounal handle if needed */
if (!(mdt_conn_flags(info) & OBD_CONNECT_SOM)) {
if ((ma->ma_attr.la_valid & LA_SIZE) ||
- (rr->rr_flags & MRF_SETATTR_LOCKED)) {
+ (rr->rr_flags & MRF_OPEN_TRUNC)) {
/* Check write access for the O_TRUNC case */
if (mdt_write_read(mo) < 0)
GOTO(out_put, rc = -ETXTBSY);