|
@@ -1824,7 +1824,8 @@ int
|
|
xfs_create(
|
|
xfs_create(
|
|
xfs_inode_t *dp,
|
|
xfs_inode_t *dp,
|
|
bhv_vname_t *dentry,
|
|
bhv_vname_t *dentry,
|
|
- bhv_vattr_t *vap,
|
|
|
|
|
|
+ mode_t mode,
|
|
|
|
+ xfs_dev_t rdev,
|
|
bhv_vnode_t **vpp,
|
|
bhv_vnode_t **vpp,
|
|
cred_t *credp)
|
|
cred_t *credp)
|
|
{
|
|
{
|
|
@@ -1834,7 +1835,6 @@ xfs_create(
|
|
xfs_inode_t *ip;
|
|
xfs_inode_t *ip;
|
|
bhv_vnode_t *vp = NULL;
|
|
bhv_vnode_t *vp = NULL;
|
|
xfs_trans_t *tp;
|
|
xfs_trans_t *tp;
|
|
- xfs_dev_t rdev;
|
|
|
|
int error;
|
|
int error;
|
|
xfs_bmap_free_t free_list;
|
|
xfs_bmap_free_t free_list;
|
|
xfs_fsblock_t first_block;
|
|
xfs_fsblock_t first_block;
|
|
@@ -1845,20 +1845,18 @@ xfs_create(
|
|
xfs_prid_t prid;
|
|
xfs_prid_t prid;
|
|
struct xfs_dquot *udqp, *gdqp;
|
|
struct xfs_dquot *udqp, *gdqp;
|
|
uint resblks;
|
|
uint resblks;
|
|
- int dm_di_mode;
|
|
|
|
int namelen;
|
|
int namelen;
|
|
|
|
|
|
ASSERT(!*vpp);
|
|
ASSERT(!*vpp);
|
|
vn_trace_entry(dp, __FUNCTION__, (inst_t *)__return_address);
|
|
vn_trace_entry(dp, __FUNCTION__, (inst_t *)__return_address);
|
|
|
|
|
|
- dm_di_mode = vap->va_mode;
|
|
|
|
namelen = VNAMELEN(dentry);
|
|
namelen = VNAMELEN(dentry);
|
|
|
|
|
|
if (DM_EVENT_ENABLED(dp, DM_EVENT_CREATE)) {
|
|
if (DM_EVENT_ENABLED(dp, DM_EVENT_CREATE)) {
|
|
error = XFS_SEND_NAMESP(mp, DM_EVENT_CREATE,
|
|
error = XFS_SEND_NAMESP(mp, DM_EVENT_CREATE,
|
|
dir_vp, DM_RIGHT_NULL, NULL,
|
|
dir_vp, DM_RIGHT_NULL, NULL,
|
|
DM_RIGHT_NULL, name, NULL,
|
|
DM_RIGHT_NULL, name, NULL,
|
|
- dm_di_mode, 0, 0);
|
|
|
|
|
|
+ mode, 0, 0);
|
|
|
|
|
|
if (error)
|
|
if (error)
|
|
return error;
|
|
return error;
|
|
@@ -1873,8 +1871,6 @@ xfs_create(
|
|
udqp = gdqp = NULL;
|
|
udqp = gdqp = NULL;
|
|
if (dp->i_d.di_flags & XFS_DIFLAG_PROJINHERIT)
|
|
if (dp->i_d.di_flags & XFS_DIFLAG_PROJINHERIT)
|
|
prid = dp->i_d.di_projid;
|
|
prid = dp->i_d.di_projid;
|
|
- else if (vap->va_mask & XFS_AT_PROJID)
|
|
|
|
- prid = (xfs_prid_t)vap->va_projid;
|
|
|
|
else
|
|
else
|
|
prid = (xfs_prid_t)dfltprid;
|
|
prid = (xfs_prid_t)dfltprid;
|
|
|
|
|
|
@@ -1926,8 +1922,7 @@ xfs_create(
|
|
|
|
|
|
if (resblks == 0 && (error = xfs_dir_canenter(tp, dp, name, namelen)))
|
|
if (resblks == 0 && (error = xfs_dir_canenter(tp, dp, name, namelen)))
|
|
goto error_return;
|
|
goto error_return;
|
|
- rdev = (vap->va_mask & XFS_AT_RDEV) ? vap->va_rdev : 0;
|
|
|
|
- error = xfs_dir_ialloc(&tp, dp, vap->va_mode, 1,
|
|
|
|
|
|
+ error = xfs_dir_ialloc(&tp, dp, mode, 1,
|
|
rdev, credp, prid, resblks > 0,
|
|
rdev, credp, prid, resblks > 0,
|
|
&ip, &committed);
|
|
&ip, &committed);
|
|
if (error) {
|
|
if (error) {
|
|
@@ -2018,7 +2013,7 @@ std_return:
|
|
dir_vp, DM_RIGHT_NULL,
|
|
dir_vp, DM_RIGHT_NULL,
|
|
*vpp ? vp:NULL,
|
|
*vpp ? vp:NULL,
|
|
DM_RIGHT_NULL, name, NULL,
|
|
DM_RIGHT_NULL, name, NULL,
|
|
- dm_di_mode, error, 0);
|
|
|
|
|
|
+ mode, error, 0);
|
|
}
|
|
}
|
|
return error;
|
|
return error;
|
|
|
|
|
|
@@ -2709,7 +2704,7 @@ int
|
|
xfs_mkdir(
|
|
xfs_mkdir(
|
|
xfs_inode_t *dp,
|
|
xfs_inode_t *dp,
|
|
bhv_vname_t *dentry,
|
|
bhv_vname_t *dentry,
|
|
- bhv_vattr_t *vap,
|
|
|
|
|
|
+ mode_t mode,
|
|
bhv_vnode_t **vpp,
|
|
bhv_vnode_t **vpp,
|
|
cred_t *credp)
|
|
cred_t *credp)
|
|
{
|
|
{
|
|
@@ -2731,19 +2726,17 @@ xfs_mkdir(
|
|
xfs_prid_t prid;
|
|
xfs_prid_t prid;
|
|
struct xfs_dquot *udqp, *gdqp;
|
|
struct xfs_dquot *udqp, *gdqp;
|
|
uint resblks;
|
|
uint resblks;
|
|
- int dm_di_mode;
|
|
|
|
|
|
|
|
if (XFS_FORCED_SHUTDOWN(mp))
|
|
if (XFS_FORCED_SHUTDOWN(mp))
|
|
return XFS_ERROR(EIO);
|
|
return XFS_ERROR(EIO);
|
|
|
|
|
|
tp = NULL;
|
|
tp = NULL;
|
|
- dm_di_mode = vap->va_mode;
|
|
|
|
|
|
|
|
if (DM_EVENT_ENABLED(dp, DM_EVENT_CREATE)) {
|
|
if (DM_EVENT_ENABLED(dp, DM_EVENT_CREATE)) {
|
|
error = XFS_SEND_NAMESP(mp, DM_EVENT_CREATE,
|
|
error = XFS_SEND_NAMESP(mp, DM_EVENT_CREATE,
|
|
dir_vp, DM_RIGHT_NULL, NULL,
|
|
dir_vp, DM_RIGHT_NULL, NULL,
|
|
DM_RIGHT_NULL, dir_name, NULL,
|
|
DM_RIGHT_NULL, dir_name, NULL,
|
|
- dm_di_mode, 0, 0);
|
|
|
|
|
|
+ mode, 0, 0);
|
|
if (error)
|
|
if (error)
|
|
return error;
|
|
return error;
|
|
dm_event_sent = 1;
|
|
dm_event_sent = 1;
|
|
@@ -2757,8 +2750,6 @@ xfs_mkdir(
|
|
udqp = gdqp = NULL;
|
|
udqp = gdqp = NULL;
|
|
if (dp->i_d.di_flags & XFS_DIFLAG_PROJINHERIT)
|
|
if (dp->i_d.di_flags & XFS_DIFLAG_PROJINHERIT)
|
|
prid = dp->i_d.di_projid;
|
|
prid = dp->i_d.di_projid;
|
|
- else if (vap->va_mask & XFS_AT_PROJID)
|
|
|
|
- prid = (xfs_prid_t)vap->va_projid;
|
|
|
|
else
|
|
else
|
|
prid = (xfs_prid_t)dfltprid;
|
|
prid = (xfs_prid_t)dfltprid;
|
|
|
|
|
|
@@ -2811,7 +2802,7 @@ xfs_mkdir(
|
|
/*
|
|
/*
|
|
* create the directory inode.
|
|
* create the directory inode.
|
|
*/
|
|
*/
|
|
- error = xfs_dir_ialloc(&tp, dp, vap->va_mode, 2,
|
|
|
|
|
|
+ error = xfs_dir_ialloc(&tp, dp, mode, 2,
|
|
0, credp, prid, resblks > 0,
|
|
0, credp, prid, resblks > 0,
|
|
&cdp, NULL);
|
|
&cdp, NULL);
|
|
if (error) {
|
|
if (error) {
|
|
@@ -2905,7 +2896,7 @@ std_return:
|
|
created ? XFS_ITOV(cdp):NULL,
|
|
created ? XFS_ITOV(cdp):NULL,
|
|
DM_RIGHT_NULL,
|
|
DM_RIGHT_NULL,
|
|
dir_name, NULL,
|
|
dir_name, NULL,
|
|
- dm_di_mode, error, 0);
|
|
|
|
|
|
+ mode, error, 0);
|
|
}
|
|
}
|
|
return error;
|
|
return error;
|
|
|
|
|
|
@@ -3162,8 +3153,8 @@ int
|
|
xfs_symlink(
|
|
xfs_symlink(
|
|
xfs_inode_t *dp,
|
|
xfs_inode_t *dp,
|
|
bhv_vname_t *dentry,
|
|
bhv_vname_t *dentry,
|
|
- bhv_vattr_t *vap,
|
|
|
|
char *target_path,
|
|
char *target_path,
|
|
|
|
+ mode_t mode,
|
|
bhv_vnode_t **vpp,
|
|
bhv_vnode_t **vpp,
|
|
cred_t *credp)
|
|
cred_t *credp)
|
|
{
|
|
{
|
|
@@ -3251,8 +3242,6 @@ xfs_symlink(
|
|
udqp = gdqp = NULL;
|
|
udqp = gdqp = NULL;
|
|
if (dp->i_d.di_flags & XFS_DIFLAG_PROJINHERIT)
|
|
if (dp->i_d.di_flags & XFS_DIFLAG_PROJINHERIT)
|
|
prid = dp->i_d.di_projid;
|
|
prid = dp->i_d.di_projid;
|
|
- else if (vap->va_mask & XFS_AT_PROJID)
|
|
|
|
- prid = (xfs_prid_t)vap->va_projid;
|
|
|
|
else
|
|
else
|
|
prid = (xfs_prid_t)dfltprid;
|
|
prid = (xfs_prid_t)dfltprid;
|
|
|
|
|
|
@@ -3321,7 +3310,7 @@ xfs_symlink(
|
|
/*
|
|
/*
|
|
* Allocate an inode for the symlink.
|
|
* Allocate an inode for the symlink.
|
|
*/
|
|
*/
|
|
- error = xfs_dir_ialloc(&tp, dp, S_IFLNK | (vap->va_mode&~S_IFMT),
|
|
|
|
|
|
+ error = xfs_dir_ialloc(&tp, dp, S_IFLNK | (mode & ~S_IFMT),
|
|
1, 0, credp, prid, resblks > 0, &ip, NULL);
|
|
1, 0, credp, prid, resblks > 0, &ip, NULL);
|
|
if (error) {
|
|
if (error) {
|
|
if (error == ENOSPC)
|
|
if (error == ENOSPC)
|