if (!rc) {
struct lookup_intent it = { .it_op = IT_READDIR };
struct ptlrpc_request *request;
- struct mdc_op_data data;
+ struct mdc_op_data *op_data;
- ll_prepare_mdc_data(&data, dir, NULL, NULL, 0, 0);
+ OBD_ALLOC(op_data, sizeof(*op_data));
+ if (op_data == NULL)
+ RETURN(ERR_PTR(-ENOMEM));
+
+ ll_prepare_mdc_data(op_data, dir, NULL, NULL, 0, 0);
rc = md_enqueue(ll_i2sbi(dir)->ll_lmv_exp, LDLM_IBITS, &it,
- LCK_PR, &data, &lockh, NULL, 0,
+ LCK_PR, op_data, &lockh, NULL, 0,
ldlm_completion_ast, ll_mdc_blocking_ast, dir);
+ OBD_FREE(op_data, sizeof(*op_data));
request = (struct ptlrpc_request *)it.d.lustre.it_data;
if (request)
static int ll_mkdir_stripe(struct inode *inode, unsigned long arg)
{
- char *name;
- struct ll_user_mkdir_stripe lums;
struct ptlrpc_request *request = NULL;
struct ll_sb_info *sbi = ll_i2sbi(inode);
- struct mdc_op_data op_data;
+ struct ll_user_mkdir_stripe lums;
+ struct mdc_op_data *op_data;
u16 nstripes;
mode_t mode;
+ char *name;
int err = 0;
ENTRY;
mode = lums.lums_mode;
mode = (mode & (S_IRWXUGO|S_ISVTX) & ~current->fs->umask) | S_IFDIR;
- ll_prepare_mdc_data(&op_data, inode, NULL, name,lums.lums_namelen,0);
- err = md_create(sbi->ll_lmv_exp, &op_data, &nstripes, sizeof(nstripes),
+
+ OBD_ALLOC(op_data, sizeof(*op_data));
+ if (op_data == NULL)
+ GOTO(out, err = -ENOMEM);
+ ll_prepare_mdc_data(op_data, inode, NULL, name,lums.lums_namelen,0);
+ err = md_create(sbi->ll_lmv_exp, op_data, &nstripes, sizeof(nstripes),
mode, current->fsuid, current->fsgid, 0, &request);
+ OBD_FREE(op_data, sizeof(*op_data));
ptlrpc_req_finished(request);
EXIT;
out:
RETURN(ll_finish_gns(sbi));
case LL_IOC_LOV_SETSTRIPE: {
struct ptlrpc_request *request = NULL;
- struct mdc_op_data op_data;
+ struct mdc_op_data *op_data;
struct iattr attr = { 0 };
struct lov_user_md lum, *lump = (struct lov_user_md *)arg;
int rc = 0;
- ll_prepare_mdc_data(&op_data, inode, NULL, NULL, 0, 0);
-
LASSERT(sizeof(lum) == sizeof(*lump));
LASSERT(sizeof(lum.lmm_objects[0]) ==
sizeof(lump->lmm_objects[0]));
rc = copy_from_user(&lum, lump, sizeof(lum));
if (rc)
- return(-EFAULT);
+ RETURN(-EFAULT);
if (lum.lmm_magic != LOV_USER_MAGIC)
RETURN(-EINVAL);
- rc = md_setattr(sbi->ll_lmv_exp, &op_data,
- &attr, &lum, sizeof(lum), NULL, 0, &request);
+ OBD_ALLOC(op_data, sizeof(*op_data));
+ if (op_data == NULL)
+ RETURN(-ENOMEM);
+
+ ll_prepare_mdc_data(op_data, inode, NULL, NULL, 0, 0);
+
+ rc = md_setattr(sbi->ll_lmv_exp, op_data, &attr, &lum,
+ sizeof(lum), NULL, 0, &request);
+ OBD_FREE(op_data, sizeof(*op_data));
+ ptlrpc_req_finished(request);
+
if (rc) {
- ptlrpc_req_finished(request);
if (rc != -EPERM && rc != -EACCES)
CERROR("md_setattr fails: rc = %d\n", rc);
- return rc;
}
- ptlrpc_req_finished(request);
-
- return rc;
+ RETURN(rc);
}
case LL_IOC_LOV_GETSTRIPE: {
struct ptlrpc_request *request = NULL;
struct lov_stripe_md *lsm = ll_i2info(inode)->lli_smd;
struct ll_sb_info *sbi = ll_i2sbi(inode);
struct ptlrpc_request *request = NULL;
- struct mdc_op_data op_data;
+ struct mdc_op_data *op_data;
int ia_valid = attr->ia_valid;
int rc = 0;
ENTRY;
* inode ourselves so we can call obdo_from_inode() always. */
if (ia_valid & (lsm ? ~(ATTR_SIZE | ATTR_FROM_OPEN | ATTR_RAW) : ~0)) {
struct lustre_md md;
- ll_prepare_mdc_data(&op_data, inode, NULL, NULL, 0, 0);
- rc = md_setattr(sbi->ll_lmv_exp, &op_data,
+ OBD_ALLOC(op_data, sizeof(*op_data));
+ if (op_data == NULL)
+ RETURN(-ENOMEM);
+ ll_prepare_mdc_data(op_data, inode, NULL, NULL, 0, 0);
+
+ rc = md_setattr(sbi->ll_lmv_exp, op_data,
attr, NULL, 0, NULL, 0, &request);
+ OBD_FREE(op_data, sizeof(*op_data));
if (rc) {
ptlrpc_req_finished(request);
if (rc != -EPERM && rc != -EACCES)
RETURN(put_user(flags, (int *)arg));
}
case EXT3_IOC_SETFLAGS: {
- struct mdc_op_data op_data;
+ struct mdc_op_data *op_data;
struct iattr attr;
struct obdo *oa;
struct lov_stripe_md *lsm = ll_i2info(inode)->lli_smd;
if (!oa)
RETURN(-ENOMEM);
- ll_prepare_mdc_data(&op_data, inode, NULL, NULL, 0, 0);
+ OBD_ALLOC(op_data, sizeof(*op_data));
+ if (op_data == NULL) {
+ obdo_free(oa);
+ RETURN(-ENOMEM);
+ }
+ ll_prepare_mdc_data(op_data, inode, NULL, NULL, 0, 0);
memset(&attr, 0x0, sizeof(attr));
attr.ia_attr_flags = flags;
attr.ia_valid |= ATTR_ATTR_FLAG;
- rc = md_setattr(sbi->ll_lmv_exp, &op_data,
+ rc = md_setattr(sbi->ll_lmv_exp, op_data,
&attr, NULL, 0, NULL, 0, &req);
+ OBD_FREE(op_data, sizeof(*op_data));
if (rc) {
ptlrpc_req_finished(req);
if (rc != -EPERM && rc != -EACCES)
const char *name = nd->last.name;
int len = nd->last.len;
struct ll_sb_info *sbi = ll_i2sbi(dir);
- struct mdc_op_data op_data;
+ struct mdc_op_data *op_data;
int err = -EMLINK;
ENTRY;
case S_IFBLK:
case S_IFIFO:
case S_IFSOCK:
- ll_prepare_mdc_data(&op_data, dir, NULL, name, len, 0);
- err = md_create(sbi->ll_lmv_exp, &op_data, NULL, 0, mode,
- current->fsuid, current->fsgid, rdev, &request);
+ OBD_ALLOC(op_data, sizeof(*op_data));
+ if (op_data == NULL)
+ RETURN(-ENOMEM);
+ ll_prepare_mdc_data(op_data, dir, NULL, name, len, 0);
+ err = md_create(sbi->ll_lmv_exp, op_data, NULL, 0, mode,
+ current->fsuid, current->fsgid, rdev,
+ &request);
+ OBD_FREE(op_data, sizeof(*op_data));
if (err == 0)
ll_update_times(request, 0, dir);
ptlrpc_req_finished(request);
const char *name = child->d_name.name;
int len = child->d_name.len;
struct ll_sb_info *sbi = ll_i2sbi(dir);
- struct mdc_op_data op_data;
+ struct mdc_op_data *op_data;
int err = -EMLINK;
ENTRY;
case S_IFBLK:
case S_IFIFO:
case S_IFSOCK:
- ll_prepare_mdc_data(&op_data, dir, NULL, name, len, 0);
- err = md_create(sbi->ll_lmv_exp, &op_data, NULL, 0, mode,
- current->fsuid, current->fsgid, rdev, &request);
+ OBD_ALLOC(op_data, sizeof(*op_data));
+ if (op_data == NULL)
+ RETURN(-ENOMEM);
+ ll_prepare_mdc_data(op_data, dir, NULL, name, len, 0);
+ err = md_create(sbi->ll_lmv_exp, op_data, NULL, 0, mode,
+ current->fsuid, current->fsgid, rdev,
+ &request);
+ OBD_FREE(op_data, sizeof(*op_data));
if (err)
GOTO(out_err, err);
int len = nd->last.len;
struct ptlrpc_request *request = NULL;
struct ll_sb_info *sbi = ll_i2sbi(dir);
- struct mdc_op_data op_data;
+ struct mdc_op_data *op_data;
int err = -EMLINK;
ENTRY;
if (dir->i_nlink >= EXT3_LINK_MAX)
RETURN(err);
- ll_prepare_mdc_data(&op_data, dir, NULL, name, len, 0);
- err = md_create(sbi->ll_lmv_exp, &op_data,
+ OBD_ALLOC(op_data, sizeof(*op_data));
+ if (op_data == NULL)
+ RETURN(-ENOMEM);
+ ll_prepare_mdc_data(op_data, dir, NULL, name, len, 0);
+ err = md_create(sbi->ll_lmv_exp, op_data,
tgt, strlen(tgt) + 1, S_IFLNK | S_IRWXUGO,
current->fsuid, current->fsgid, 0, &request);
+ OBD_FREE(op_data, sizeof(*op_data));
if (err == 0)
ll_update_times(request, 0, dir);
const char *name = tgtnd->last.name;
int len = tgtnd->last.len;
struct ptlrpc_request *request = NULL;
- struct mdc_op_data op_data;
+ struct mdc_op_data *op_data;
int err;
struct ll_sb_info *sbi = ll_i2sbi(dir);
-
ENTRY;
- CDEBUG(D_VFSTRACE, "VFS Op:inode=%lu/%u(%p),dir=%lu/%u(%p),target=%s\n",
- src->i_ino, src->i_generation, src,
- dir->i_ino, dir->i_generation, dir, name);
- ll_prepare_mdc_data(&op_data, src, dir, name, len, 0);
- err = md_link(sbi->ll_lmv_exp, &op_data, &request);
+ CDEBUG(D_VFSTRACE, "VFS Op:inode=%lu/%u(%p),dir=%lu/%u(%p),target=%s\n",
+ src->i_ino, src->i_generation, src, dir->i_ino, dir->i_generation,
+ dir, name);
+
+ OBD_ALLOC(op_data, sizeof(*op_data));
+ if (op_data == NULL)
+ RETURN(-ENOMEM);
+ ll_prepare_mdc_data(op_data, src, dir, name, len, 0);
+ err = md_link(sbi->ll_lmv_exp, op_data, &request);
+ OBD_FREE(op_data, sizeof(*op_data));
if (err == 0)
ll_update_times(request, 0, dir);
ptlrpc_req_finished(request);
int len = nd->last.len;
struct ptlrpc_request *request = NULL;
struct ll_sb_info *sbi = ll_i2sbi(dir);
- struct mdc_op_data op_data;
+ struct mdc_op_data *op_data;
int err = -EMLINK;
ENTRY;
CDEBUG(D_VFSTRACE, "VFS Op:name=%s,dir=%lu/%u(%p)\n",
name, dir->i_ino, dir->i_generation, dir);
mode = (mode & (S_IRWXUGO|S_ISVTX) & ~current->fs->umask) | S_IFDIR;
- ll_prepare_mdc_data(&op_data, dir, NULL, name, len, 0);
- err = md_create(sbi->ll_lmv_exp, &op_data, NULL, 0, mode,
+ OBD_ALLOC(op_data, sizeof(*op_data));
+ if (op_data == NULL)
+ RETURN(-ENOMEM);
+ ll_prepare_mdc_data(op_data, dir, NULL, name, len, 0);
+ err = md_create(sbi->ll_lmv_exp, op_data, NULL, 0, mode,
current->fsuid, current->fsgid, 0, &request);
+ OBD_FREE(op_data, sizeof(*op_data));
if (err == 0)
ll_update_times(request, 0, dir);
ptlrpc_req_finished(request);
const char *name = nd->last.name;
int len = nd->last.len;
struct ptlrpc_request *request = NULL;
- struct mdc_op_data op_data;
+ struct mdc_op_data *op_data;
int rc;
ENTRY;
CDEBUG(D_VFSTRACE, "VFS Op:name=%s,dir=%lu/%u(%p)\n",
name, dir->i_ino, dir->i_generation, dir);
- ll_prepare_mdc_data(&op_data, dir, NULL, name, len, S_IFDIR);
- rc = md_unlink(ll_i2sbi(dir)->ll_lmv_exp, &op_data, &request);
+ OBD_ALLOC(op_data, sizeof(*op_data));
+ if (op_data == NULL)
+ RETURN(-ENOMEM);
+ ll_prepare_mdc_data(op_data, dir, NULL, name, len, S_IFDIR);
+ rc = md_unlink(ll_i2sbi(dir)->ll_lmv_exp, op_data, &request);
+ OBD_FREE(op_data, sizeof(*op_data));
if (rc == 0)
ll_update_times(request, 0, dir);
ptlrpc_req_finished(request);
const char *name = nd->last.name;
int len = nd->last.len;
struct ptlrpc_request *request = NULL;
- struct mdc_op_data op_data;
+ struct mdc_op_data *op_data;
int rc;
ENTRY;
CDEBUG(D_VFSTRACE, "VFS Op:name=%s,dir=%lu/%u(%p)\n",
name, dir->i_ino, dir->i_generation, dir);
- ll_prepare_mdc_data(&op_data, dir, NULL, name, len, 0);
- rc = md_unlink(ll_i2sbi(dir)->ll_lmv_exp, &op_data, &request);
+ OBD_ALLOC(op_data, sizeof(*op_data));
+ if (op_data == NULL)
+ RETURN(-ENOMEM);
+ ll_prepare_mdc_data(op_data, dir, NULL, name, len, 0);
+ rc = md_unlink(ll_i2sbi(dir)->ll_lmv_exp, op_data, &request);
+ OBD_FREE(op_data, sizeof(*op_data));
if (rc)
GOTO(out, rc);
ll_update_times(request, 0, dir);
int newlen = newnd->last.len;
struct ptlrpc_request *request = NULL;
struct ll_sb_info *sbi = ll_i2sbi(src);
- struct mdc_op_data op_data;
+ struct mdc_op_data *op_data;
int err;
ENTRY;
CDEBUG(D_VFSTRACE, "VFS Op:oldname=%s, src_dir=%lu/%u(%p), newname=%s, "
"tgt_dir=%lu/%u(%p)\n", oldname, src->i_ino, src->i_generation,
src, newname, tgt->i_ino, tgt->i_generation, tgt);
- ll_prepare_mdc_data(&op_data, src, tgt, NULL, 0, 0);
- err = md_rename(sbi->ll_lmv_exp, &op_data,
- oldname, oldlen, newname, newlen, &request);
+ OBD_ALLOC(op_data, sizeof(*op_data));
+ if (op_data == NULL)
+ RETURN(-ENOMEM);
+ ll_prepare_mdc_data(op_data, src, tgt, NULL, 0, 0);
+ err = md_rename(sbi->ll_lmv_exp, op_data, oldname, oldlen,
+ newname, newlen, &request);
+ OBD_FREE(op_data, sizeof(*op_data));
if (!err) {
ll_update_times(request, 0, src);
ll_update_times(request, 0, tgt);