diff options
author | Christoph Hellwig <hch@lst.de> | 2019-08-16 02:41:06 -0400 |
---|---|---|
committer | Darrick J. Wong <darrick.wong@oracle.com> | 2019-08-16 21:42:59 -0400 |
commit | 314e01a6d7ddf04608440beb087b21d8aa32f03f (patch) | |
tree | 7f763f06a3e348adc856d7536175a024d621a9d5 /fs/xfs | |
parent | 8612de3f7ba6e900465e340516b8313806d27b2d (diff) |
xfs: fall back to native ioctls for unhandled compat ones
Always try the native ioctl if we don't have a compat handler. This
removes a lot of boilerplate code as 'modern' ioctls should generally
be compat clean, and fixes the missing entries for the recently added
FS_IOC_GETFSLABEL/FS_IOC_SETFSLABEL ioctls.
Fixes: f7664b31975b ("xfs: implement online get/set fs label")
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Diffstat (limited to 'fs/xfs')
-rw-r--r-- | fs/xfs/xfs_ioctl32.c | 54 |
1 files changed, 2 insertions, 52 deletions
diff --git a/fs/xfs/xfs_ioctl32.c b/fs/xfs/xfs_ioctl32.c index 7fcf7569743f..bae08ef92ac3 100644 --- a/fs/xfs/xfs_ioctl32.c +++ b/fs/xfs/xfs_ioctl32.c | |||
@@ -553,57 +553,6 @@ xfs_file_compat_ioctl( | |||
553 | trace_xfs_file_compat_ioctl(ip); | 553 | trace_xfs_file_compat_ioctl(ip); |
554 | 554 | ||
555 | switch (cmd) { | 555 | switch (cmd) { |
556 | /* No size or alignment issues on any arch */ | ||
557 | case XFS_IOC_DIOINFO: | ||
558 | case XFS_IOC_FSGEOMETRY_V4: | ||
559 | case XFS_IOC_FSGEOMETRY: | ||
560 | case XFS_IOC_AG_GEOMETRY: | ||
561 | case XFS_IOC_FSGETXATTR: | ||
562 | case XFS_IOC_FSSETXATTR: | ||
563 | case XFS_IOC_FSGETXATTRA: | ||
564 | case XFS_IOC_FSSETDM: | ||
565 | case XFS_IOC_GETBMAP: | ||
566 | case XFS_IOC_GETBMAPA: | ||
567 | case XFS_IOC_GETBMAPX: | ||
568 | case XFS_IOC_FSCOUNTS: | ||
569 | case XFS_IOC_SET_RESBLKS: | ||
570 | case XFS_IOC_GET_RESBLKS: | ||
571 | case XFS_IOC_FSGROWFSLOG: | ||
572 | case XFS_IOC_GOINGDOWN: | ||
573 | case XFS_IOC_ERROR_INJECTION: | ||
574 | case XFS_IOC_ERROR_CLEARALL: | ||
575 | case FS_IOC_GETFSMAP: | ||
576 | case XFS_IOC_SCRUB_METADATA: | ||
577 | case XFS_IOC_BULKSTAT: | ||
578 | case XFS_IOC_INUMBERS: | ||
579 | return xfs_file_ioctl(filp, cmd, p); | ||
580 | #if !defined(BROKEN_X86_ALIGNMENT) || defined(CONFIG_X86_X32) | ||
581 | /* | ||
582 | * These are handled fine if no alignment issues. To support x32 | ||
583 | * which uses native 64-bit alignment we must emit these cases in | ||
584 | * addition to the ia-32 compat set below. | ||
585 | */ | ||
586 | case XFS_IOC_ALLOCSP: | ||
587 | case XFS_IOC_FREESP: | ||
588 | case XFS_IOC_RESVSP: | ||
589 | case XFS_IOC_UNRESVSP: | ||
590 | case XFS_IOC_ALLOCSP64: | ||
591 | case XFS_IOC_FREESP64: | ||
592 | case XFS_IOC_RESVSP64: | ||
593 | case XFS_IOC_UNRESVSP64: | ||
594 | case XFS_IOC_FSGEOMETRY_V1: | ||
595 | case XFS_IOC_FSGROWFSDATA: | ||
596 | case XFS_IOC_FSGROWFSRT: | ||
597 | case XFS_IOC_ZERO_RANGE: | ||
598 | #ifdef CONFIG_X86_X32 | ||
599 | /* | ||
600 | * x32 special: this gets a different cmd number from the ia-32 compat | ||
601 | * case below; the associated data will match native 64-bit alignment. | ||
602 | */ | ||
603 | case XFS_IOC_SWAPEXT: | ||
604 | #endif | ||
605 | return xfs_file_ioctl(filp, cmd, p); | ||
606 | #endif | ||
607 | #if defined(BROKEN_X86_ALIGNMENT) | 556 | #if defined(BROKEN_X86_ALIGNMENT) |
608 | case XFS_IOC_ALLOCSP_32: | 557 | case XFS_IOC_ALLOCSP_32: |
609 | case XFS_IOC_FREESP_32: | 558 | case XFS_IOC_FREESP_32: |
@@ -705,6 +654,7 @@ xfs_file_compat_ioctl( | |||
705 | case XFS_IOC_FSSETDM_BY_HANDLE_32: | 654 | case XFS_IOC_FSSETDM_BY_HANDLE_32: |
706 | return xfs_compat_fssetdm_by_handle(filp, arg); | 655 | return xfs_compat_fssetdm_by_handle(filp, arg); |
707 | default: | 656 | default: |
708 | return -ENOIOCTLCMD; | 657 | /* try the native version */ |
658 | return xfs_file_ioctl(filp, cmd, p); | ||
709 | } | 659 | } |
710 | } | 660 | } |