mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 04:25:09 +07:00
staging: lustre: llite: use the correct mode for striped directory
Create striped directory with correct mode, which should be handling same as mkdir. Signed-off-by: wang di <di.wang@intel.com> Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-4929 Reviewed-on: http://review.whamcloud.com/10028 Reviewed-by: Andreas Dilger <andreas.dilger@intel.com> Reviewed-by: John L. Hammond <john.hammond@intel.com> Signed-off-by: James Simmons <jsimmons@infradead.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
711942df95
commit
d07d4cb829
@ -694,28 +694,40 @@ static int ll_send_mgc_param(struct obd_export *mgc, char *string)
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int ll_dir_setdirstripe(struct inode *dir, struct lmv_user_md *lump,
|
||||
const char *filename)
|
||||
/**
|
||||
* Create striped directory with specified stripe(@lump)
|
||||
*
|
||||
* param[in] parent the parent of the directory.
|
||||
* param[in] lump the specified stripes.
|
||||
* param[in] dirname the name of the directory.
|
||||
* param[in] mode the specified mode of the directory.
|
||||
*
|
||||
* retval =0 if striped directory is being created successfully.
|
||||
* <0 if the creation is failed.
|
||||
*/
|
||||
static int ll_dir_setdirstripe(struct inode *parent, struct lmv_user_md *lump,
|
||||
const char *dirname, umode_t mode)
|
||||
{
|
||||
struct ptlrpc_request *request = NULL;
|
||||
struct md_op_data *op_data;
|
||||
struct ll_sb_info *sbi = ll_i2sbi(dir);
|
||||
int mode;
|
||||
struct ll_sb_info *sbi = ll_i2sbi(parent);
|
||||
int err;
|
||||
|
||||
if (unlikely(lump->lum_magic != LMV_USER_MAGIC))
|
||||
return -EINVAL;
|
||||
|
||||
CDEBUG(D_VFSTRACE, "VFS Op:inode="DFID"(%p) name %s stripe_offset %d, stripe_count: %u\n",
|
||||
PFID(ll_inode2fid(dir)), dir, filename,
|
||||
PFID(ll_inode2fid(parent)), parent, dirname,
|
||||
(int)lump->lum_stripe_offset, lump->lum_stripe_count);
|
||||
|
||||
if (lump->lum_magic != cpu_to_le32(LMV_USER_MAGIC))
|
||||
lustre_swab_lmv_user_md(lump);
|
||||
|
||||
mode = (~current_umask() & 0755) | S_IFDIR;
|
||||
op_data = ll_prep_md_op_data(NULL, dir, NULL, filename,
|
||||
strlen(filename), mode, LUSTRE_OPC_MKDIR,
|
||||
if (!IS_POSIXACL(parent) || !exp_connect_umask(ll_i2mdexp(parent)))
|
||||
mode &= ~current_umask();
|
||||
mode = (mode & (S_IRWXUGO | S_ISVTX)) | S_IFDIR;
|
||||
op_data = ll_prep_md_op_data(NULL, parent, NULL, dirname,
|
||||
strlen(dirname), mode, LUSTRE_OPC_MKDIR,
|
||||
lump);
|
||||
if (IS_ERR(op_data)) {
|
||||
err = PTR_ERR(op_data);
|
||||
@ -1379,6 +1391,7 @@ static long ll_dir_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
||||
char *filename;
|
||||
int namelen = 0;
|
||||
int lumlen = 0;
|
||||
umode_t mode;
|
||||
int len;
|
||||
int rc;
|
||||
|
||||
@ -1412,11 +1425,12 @@ static long ll_dir_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
||||
goto lmv_out_free;
|
||||
}
|
||||
|
||||
/**
|
||||
* ll_dir_setdirstripe will be used to set dir stripe
|
||||
* mdc_create--->mdt_reint_create (with dirstripe)
|
||||
*/
|
||||
rc = ll_dir_setdirstripe(inode, lum, filename);
|
||||
#if OBD_OCD_VERSION(2, 9, 50, 0) > LUSTRE_VERSION_CODE
|
||||
mode = data->ioc_type != 0 ? data->ioc_type : S_IRWXUGO;
|
||||
#else
|
||||
mode = data->ioc_type;
|
||||
#endif
|
||||
rc = ll_dir_setdirstripe(inode, lum, filename, mode);
|
||||
lmv_out_free:
|
||||
obd_ioctl_freedata(buf, len);
|
||||
return rc;
|
||||
|
Loading…
Reference in New Issue
Block a user