xfs: don't pass ioflags around in the ioctl path
Instead check the file pointer for the invisble I/O flag directly, and use the chance to drop redundant arguments from the xfs_ioc_space prototype. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Dave Chinner <david@fromorbit.com>
This commit is contained in:
parent
1a695a905c
commit
8f3e2058e1
|
@ -595,13 +595,12 @@ xfs_attrmulti_by_handle(
|
||||||
|
|
||||||
int
|
int
|
||||||
xfs_ioc_space(
|
xfs_ioc_space(
|
||||||
struct xfs_inode *ip,
|
|
||||||
struct inode *inode,
|
|
||||||
struct file *filp,
|
struct file *filp,
|
||||||
int ioflags,
|
|
||||||
unsigned int cmd,
|
unsigned int cmd,
|
||||||
xfs_flock64_t *bf)
|
xfs_flock64_t *bf)
|
||||||
{
|
{
|
||||||
|
struct inode *inode = file_inode(filp);
|
||||||
|
struct xfs_inode *ip = XFS_I(inode);
|
||||||
struct iattr iattr;
|
struct iattr iattr;
|
||||||
enum xfs_prealloc_flags flags = 0;
|
enum xfs_prealloc_flags flags = 0;
|
||||||
uint iolock = XFS_IOLOCK_EXCL;
|
uint iolock = XFS_IOLOCK_EXCL;
|
||||||
|
@ -626,7 +625,7 @@ xfs_ioc_space(
|
||||||
|
|
||||||
if (filp->f_flags & O_DSYNC)
|
if (filp->f_flags & O_DSYNC)
|
||||||
flags |= XFS_PREALLOC_SYNC;
|
flags |= XFS_PREALLOC_SYNC;
|
||||||
if (ioflags & XFS_IO_INVIS)
|
if (filp->f_mode & FMODE_NOCMTIME)
|
||||||
flags |= XFS_PREALLOC_INVISIBLE;
|
flags |= XFS_PREALLOC_INVISIBLE;
|
||||||
|
|
||||||
error = mnt_want_write_file(filp);
|
error = mnt_want_write_file(filp);
|
||||||
|
@ -1464,8 +1463,7 @@ xfs_getbmap_format(void **ap, struct getbmapx *bmv, int *full)
|
||||||
|
|
||||||
STATIC int
|
STATIC int
|
||||||
xfs_ioc_getbmap(
|
xfs_ioc_getbmap(
|
||||||
struct xfs_inode *ip,
|
struct file *file,
|
||||||
int ioflags,
|
|
||||||
unsigned int cmd,
|
unsigned int cmd,
|
||||||
void __user *arg)
|
void __user *arg)
|
||||||
{
|
{
|
||||||
|
@ -1479,10 +1477,10 @@ xfs_ioc_getbmap(
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
bmx.bmv_iflags = (cmd == XFS_IOC_GETBMAPA ? BMV_IF_ATTRFORK : 0);
|
bmx.bmv_iflags = (cmd == XFS_IOC_GETBMAPA ? BMV_IF_ATTRFORK : 0);
|
||||||
if (ioflags & XFS_IO_INVIS)
|
if (file->f_mode & FMODE_NOCMTIME)
|
||||||
bmx.bmv_iflags |= BMV_IF_NO_DMAPI_READ;
|
bmx.bmv_iflags |= BMV_IF_NO_DMAPI_READ;
|
||||||
|
|
||||||
error = xfs_getbmap(ip, &bmx, xfs_getbmap_format,
|
error = xfs_getbmap(XFS_I(file_inode(file)), &bmx, xfs_getbmap_format,
|
||||||
(__force struct getbmap *)arg+1);
|
(__force struct getbmap *)arg+1);
|
||||||
if (error)
|
if (error)
|
||||||
return error;
|
return error;
|
||||||
|
@ -1619,12 +1617,8 @@ xfs_file_ioctl(
|
||||||
struct xfs_inode *ip = XFS_I(inode);
|
struct xfs_inode *ip = XFS_I(inode);
|
||||||
struct xfs_mount *mp = ip->i_mount;
|
struct xfs_mount *mp = ip->i_mount;
|
||||||
void __user *arg = (void __user *)p;
|
void __user *arg = (void __user *)p;
|
||||||
int ioflags = 0;
|
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
if (filp->f_mode & FMODE_NOCMTIME)
|
|
||||||
ioflags |= XFS_IO_INVIS;
|
|
||||||
|
|
||||||
trace_xfs_file_ioctl(ip);
|
trace_xfs_file_ioctl(ip);
|
||||||
|
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
|
@ -1643,7 +1637,7 @@ xfs_file_ioctl(
|
||||||
|
|
||||||
if (copy_from_user(&bf, arg, sizeof(bf)))
|
if (copy_from_user(&bf, arg, sizeof(bf)))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
return xfs_ioc_space(ip, inode, filp, ioflags, cmd, &bf);
|
return xfs_ioc_space(filp, cmd, &bf);
|
||||||
}
|
}
|
||||||
case XFS_IOC_DIOINFO: {
|
case XFS_IOC_DIOINFO: {
|
||||||
struct dioattr da;
|
struct dioattr da;
|
||||||
|
@ -1702,7 +1696,7 @@ xfs_file_ioctl(
|
||||||
|
|
||||||
case XFS_IOC_GETBMAP:
|
case XFS_IOC_GETBMAP:
|
||||||
case XFS_IOC_GETBMAPA:
|
case XFS_IOC_GETBMAPA:
|
||||||
return xfs_ioc_getbmap(ip, ioflags, cmd, arg);
|
return xfs_ioc_getbmap(filp, cmd, arg);
|
||||||
|
|
||||||
case XFS_IOC_GETBMAPX:
|
case XFS_IOC_GETBMAPX:
|
||||||
return xfs_ioc_getbmapx(ip, arg);
|
return xfs_ioc_getbmapx(ip, arg);
|
||||||
|
|
|
@ -20,10 +20,7 @@
|
||||||
|
|
||||||
extern int
|
extern int
|
||||||
xfs_ioc_space(
|
xfs_ioc_space(
|
||||||
struct xfs_inode *ip,
|
|
||||||
struct inode *inode,
|
|
||||||
struct file *filp,
|
struct file *filp,
|
||||||
int ioflags,
|
|
||||||
unsigned int cmd,
|
unsigned int cmd,
|
||||||
xfs_flock64_t *bf);
|
xfs_flock64_t *bf);
|
||||||
|
|
||||||
|
|
|
@ -532,12 +532,8 @@ xfs_file_compat_ioctl(
|
||||||
struct xfs_inode *ip = XFS_I(inode);
|
struct xfs_inode *ip = XFS_I(inode);
|
||||||
struct xfs_mount *mp = ip->i_mount;
|
struct xfs_mount *mp = ip->i_mount;
|
||||||
void __user *arg = (void __user *)p;
|
void __user *arg = (void __user *)p;
|
||||||
int ioflags = 0;
|
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
if (filp->f_mode & FMODE_NOCMTIME)
|
|
||||||
ioflags |= XFS_IO_INVIS;
|
|
||||||
|
|
||||||
trace_xfs_file_compat_ioctl(ip);
|
trace_xfs_file_compat_ioctl(ip);
|
||||||
|
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
|
@ -589,7 +585,7 @@ xfs_file_compat_ioctl(
|
||||||
if (xfs_compat_flock64_copyin(&bf, arg))
|
if (xfs_compat_flock64_copyin(&bf, arg))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
cmd = _NATIVE_IOC(cmd, struct xfs_flock64);
|
cmd = _NATIVE_IOC(cmd, struct xfs_flock64);
|
||||||
return xfs_ioc_space(ip, inode, filp, ioflags, cmd, &bf);
|
return xfs_ioc_space(filp, cmd, &bf);
|
||||||
}
|
}
|
||||||
case XFS_IOC_FSGEOMETRY_V1_32:
|
case XFS_IOC_FSGEOMETRY_V1_32:
|
||||||
return xfs_compat_ioc_fsgeometry_v1(mp, arg);
|
return xfs_compat_ioc_fsgeometry_v1(mp, arg);
|
||||||
|
|
Loading…
Reference in New Issue