struct lustre_handle **rlockh)
{
struct mds_obd *mds = &obd->u.mds;
- struct mdc_op_data op_data;
+ struct mdc_op_data *op_data;
struct lookup_intent it;
struct mea *mea = NULL;
int mea_size, rc;
GOTO(cleanup, rc = -ENOMEM);
memset(*rlockh, 0, handle_size);
- memset(&op_data, 0, sizeof(op_data));
+ OBD_ALLOC(op_data, sizeof(*op_data));
+ if (op_data == NULL) {
+ OBD_FREE(*rlockh, handle_size);
+ RETURN(-ENOMEM);
+ }
+ memset(op_data, 0, sizeof(*op_data));
- op_data.mea1 = mea;
+ op_data->mea1 = mea;
it.it_op = IT_UNLINK;
rc = md_enqueue(mds->mds_lmv_exp, LDLM_IBITS, &it, LCK_EX,
- &op_data, *rlockh, NULL, 0, ldlm_completion_ast,
+ op_data, *rlockh, NULL, 0, ldlm_completion_ast,
mds_blocking_ast, NULL);
+ OBD_FREE(op_data, sizeof(*op_data));
+ EXIT;
cleanup:
OBD_FREE(mea, mea_size);
- RETURN(rc);
+ return rc;
}
void mds_unlock_slave_objs(struct obd_device *obd, struct dentry *dentry,
- struct lustre_handle *lockh)
+ struct lustre_handle *lockh)
{
struct mds_obd *mds = &obd->u.mds;
struct mea *mea = NULL;
int mea_size, rc, i;
+ ENTRY;
- if (lockh == NULL)
+ if (lockh == NULL) {
+ EXIT;
return;
+ }
LASSERT(mds->mds_lmv_obd != NULL);
LASSERT(S_ISDIR(dentry->d_inode->i_mode));
rc = mds_get_lmv_attr(obd, dentry->d_inode, &mea, &mea_size);
if (rc) {
CERROR("locks are leaked\n");
+ EXIT;
return;
}
LASSERT(mea_size != 0);
OBD_FREE(lockh, sizeof(struct lustre_handle) * mea->mea_count);
OBD_FREE(mea, mea_size);
+ EXIT;
}
int mds_unlink_slave_objs(struct obd_device *obd, struct dentry *dentry)
{
struct mds_obd *mds = &obd->u.mds;
struct ptlrpc_request *req = NULL;
- struct mdc_op_data op_data;
+ struct mdc_op_data *op_data;
struct mea *mea = NULL;
int mea_size, rc;
ENTRY;
GOTO(cleanup, rc = 0);
CDEBUG(D_OTHER, "%s: unlink slaves for %lu/%lu\n", obd->obd_name,
- (unsigned long) dentry->d_inode->i_ino,
- (unsigned long) dentry->d_inode->i_generation);
+ (unsigned long)dentry->d_inode->i_ino,
+ (unsigned long)dentry->d_inode->i_generation);
- memset(&op_data, 0, sizeof(op_data));
- op_data.mea1 = mea;
- rc = md_unlink(mds->mds_lmv_exp, &op_data, &req);
+ OBD_ALLOC(op_data, sizeof(*op_data));
+ if (op_data == NULL)
+ RETURN(-ENOMEM);
+
+ memset(op_data, 0, sizeof(*op_data));
+ op_data->mea1 = mea;
+ rc = md_unlink(mds->mds_lmv_exp, op_data, &req);
+ OBD_FREE(op_data, sizeof(*op_data));
LASSERT(req == NULL);
EXIT;
cleanup:
struct mds_obd *mds = mds_req2mds(req);
struct ptlrpc_request *request = NULL;
int rc = 0, cleanup_phase = 0;
- struct mdc_op_data op_data;
+ struct mdc_op_data *op_data;
void *handle;
ENTRY;
LASSERT(offset == 1 || offset == 3);
/* time to drop i_nlink on remote MDS */
- memset(&op_data, 0, sizeof(op_data));
- mds_pack_dentry2id(obd, &op_data.id1, dchild, 1);
- op_data.create_mode = rec->ur_mode;
+ OBD_ALLOC(op_data, sizeof(*op_data));
+ if (op_data == NULL)
+ RETURN(-ENOMEM);
+
+ memset(op_data, 0, sizeof(*op_data));
+ mds_pack_dentry2id(obd, &op_data->id1, dchild, 1);
+ op_data->create_mode = rec->ur_mode;
DEBUG_REQ(D_INODE, req, "unlink %*s (remote inode "DLID4")",
- rec->ur_namelen - 1, rec->ur_name, OLID4(&op_data.id1));
+ rec->ur_namelen - 1, rec->ur_name, OLID4(&op_data->id1));
if (lustre_msg_get_flags(req->rq_reqmsg) & MSG_REPLAY) {
DEBUG_REQ(D_HA, req, "unlink %*s (remote inode "DLID4")",
- rec->ur_namelen - 1, rec->ur_name, OLID4(&op_data.id1));
+ rec->ur_namelen - 1, rec->ur_name, OLID4(&op_data->id1));
}
if (lustre_msg_get_flags(req->rq_reqmsg) & MSG_REPLAY)
- op_data.create_mode |= MDS_MODE_REPLAY;
+ op_data->create_mode |= MDS_MODE_REPLAY;
- rc = md_unlink(mds->mds_lmv_exp, &op_data, &request);
+ rc = md_unlink(mds->mds_lmv_exp, op_data, &request);
+ OBD_FREE(op_data, sizeof(*op_data));
cleanup_phase = 2;
if (request) {
struct dentry *de_tgt_dir = NULL;
struct mds_obd *mds = mds_req2mds(req);
int rc = 0, cleanup_phase = 0;
- struct mdc_op_data op_data;
+ struct mdc_op_data *op_data;
struct ptlrpc_request *request = NULL;
int update_mode;
ENTRY;
GOTO(cleanup, rc = PTR_ERR(de_tgt_dir));
cleanup_phase = 1;
- op_data.id1 = *(rec->ur_id1);
- op_data.namelen = 0;
- op_data.name = NULL;
- rc = md_link(mds->mds_lmv_exp, &op_data, &request);
+ OBD_ALLOC(op_data, sizeof(*op_data));
+ if (op_data == NULL)
+ GOTO(cleanup, rc = -ENOMEM);
+
+ op_data->id1 = *(rec->ur_id1);
+ op_data->namelen = 0;
+ op_data->name = NULL;
+ rc = md_link(mds->mds_lmv_exp, op_data, &request);
+ OBD_FREE(op_data, sizeof(*op_data));
if (rc)
GOTO(cleanup, rc);
struct mds_obd *mds = &obd->u.mds;
struct lustre_handle *rlockh;
struct ptlrpc_request *req;
- struct mdc_op_data op_data;
+ struct mdc_op_data *op_data;
struct lookup_intent it;
int handle_size, rc = 0;
ENTRY;
RETURN(-ENOMEM);
memset(rlockh, 0, handle_size);
- memset(&op_data, 0, sizeof(op_data));
- mds_pack_dentry2id(obd, &op_data.id1, dentry, 1);
+ OBD_ALLOC(op_data, sizeof(*op_data));
+ if (op_data == NULL) {
+ OBD_FREE(rlockh, handle_size);
+ RETURN(-ENOMEM);
+ }
+ memset(op_data, 0, sizeof(*op_data));
+ mds_pack_dentry2id(obd, &op_data->id1, dentry, 1);
it.it_op = IT_UNLINK;
rc = md_enqueue(mds->mds_lmv_exp, LDLM_IBITS, &it, LCK_EX,
- &op_data, rlockh, NULL, 0, ldlm_completion_ast,
+ op_data, rlockh, NULL, 0, ldlm_completion_ast,
mds_blocking_ast, NULL);
+ OBD_FREE(op_data, sizeof(*op_data));
if (rc)
RETURN(rc);
struct mds_obd *mds = mds_req2mds(req);
struct lustre_handle parent_lockh[2] = {{0}, {0}};
struct lustre_handle child_lockh = {0};
- struct mdc_op_data opdata;
+ struct mdc_op_data *op_data;
int update_mode, rc = 0;
ENTRY;
CDEBUG(D_OTHER, "%s: move name %s onto another mds #%lu\n",
obd->obd_name, rec->ur_name, (unsigned long)id_group(rec->ur_id2));
- memset(&opdata, 0, sizeof(opdata));
+
+ OBD_ALLOC(op_data, sizeof(*op_data));
+ if (op_data == NULL)
+ RETURN(-ENOMEM);
+ memset(op_data, 0, sizeof(*op_data));
child_lockh.cookie = 0;
rc = mds_get_parent_child_locked(obd, mds, rec->ur_id1, parent_lockh,
if (de_old->d_flags & DCACHE_CROSS_REF) {
LASSERT(de_old->d_inode == NULL);
CDEBUG(D_OTHER, "request to move remote name\n");
- mds_pack_dentry2id(obd, &opdata.id1, de_old, 1);
+ mds_pack_dentry2id(obd, &op_data->id1, de_old, 1);
} else if (de_old->d_inode == NULL) {
/* oh, source doesn't exist */
+ OBD_FREE(op_data, sizeof(*op_data));
GOTO(cleanup, rc = -ENOENT);
} else {
struct lustre_id sid;
LASSERT(inode != NULL);
CDEBUG(D_OTHER, "request to move local name\n");
- id_ino(&opdata.id1) = inode->i_ino;
- id_group(&opdata.id1) = mds->mds_num;
- id_gen(&opdata.id1) = inode->i_generation;
+ id_ino(&op_data->id1) = inode->i_ino;
+ id_group(&op_data->id1) = mds->mds_num;
+ id_gen(&op_data->id1) = inode->i_generation;
down(&inode->i_sem);
rc = mds_read_inode_sid(obd, inode, &sid);
GOTO(cleanup, rc);
}
- id_fid(&opdata.id1) = id_fid(&sid);
+ id_fid(&op_data->id1) = id_fid(&sid);
}
- opdata.id2 = *rec->ur_id2;
- rc = md_rename(mds->mds_lmv_exp, &opdata, NULL, 0,
+ op_data->id2 = *rec->ur_id2;
+ rc = md_rename(mds->mds_lmv_exp, op_data, NULL, 0,
rec->ur_tgt, rec->ur_tgtlen - 1, &req2);
+ OBD_FREE(op_data, sizeof(*op_data));
if (rc)
GOTO(cleanup, rc);