Commit 8f3e2058 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by Dave Chinner

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: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarDave Chinner <dchinner@redhat.com>
Signed-off-by: default avatarDave Chinner <david@fromorbit.com>
parent 1a695a90
...@@ -595,13 +595,12 @@ xfs_attrmulti_by_handle( ...@@ -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( ...@@ -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) ...@@ -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( ...@@ -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( ...@@ -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( ...@@ -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( ...@@ -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 @@ ...@@ -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( ...@@ -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( ...@@ -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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment