linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Arnd Bergmann <arnd@arndb.de>
To: Christoph Hellwig <hch@infradead.org>
Cc: Dave Chinner <david@fromorbit.com>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Al Viro <viro@zeniv.linux.org.uk>,
	Linux FS-devel Mailing List <linux-fsdevel@vger.kernel.org>,
	"Darrick J. Wong" <darrick.wong@oracle.com>,
	linux-xfs <linux-xfs@vger.kernel.org>,
	Brian Foster <bfoster@redhat.com>,
	Allison Collins <allison.henderson@oracle.com>,
	Nick Bowler <nbowler@draconx.ca>,
	Eric Sandeen <sandeen@sandeen.net>,
	Dave Chinner <dchinner@redhat.com>
Subject: Re: [PATCH v5 01/18] xfs: compat_ioctl: use compat_ptr()
Date: Thu, 15 Aug 2019 09:56:54 +0200	[thread overview]
Message-ID: <CAK8P3a2Hjfd49XY18cDr04ZpvC5ZBGudzxqpCesbSsDf1ydmSA@mail.gmail.com> (raw)
In-Reply-To: <20190815071314.GA6960@infradead.org>

On Thu, Aug 15, 2019 at 9:13 AM Christoph Hellwig <hch@infradead.org> wrote:
>
> On Thu, Aug 15, 2019 at 07:37:53AM +1000, Dave Chinner wrote:
> > > @@ -576,7 +576,7 @@ xfs_file_compat_ioctl(
> > >     case XFS_IOC_SCRUB_METADATA:
> > >     case XFS_IOC_BULKSTAT:
> > >     case XFS_IOC_INUMBERS:
> > > -           return xfs_file_ioctl(filp, cmd, p);
> > > +           return xfs_file_ioctl(filp, cmd, (unsigned long)arg);
> >
> > I don't really like having to sprinkle special casts through the
> > code because of this.
>
> True.  But the proper fix is to not do the indirection through
> xfs_file_ioctl but instead to call xfs_ioc_scrub_metadata,
> xfs_ioc_bulkstat, etc directly which all take a void __user
> arguments already.

I'm not sure that's better: This would end up duplicating all
of xfs_file_ioctl(), which is already a fairly long function, compared
to the current way of having a large set of commands all handled
with a single line.

From looking at other subsystems, what I find to work best is to
move the compat handler into the same file as the native code
and then structure the files so that shared handlers get
put into one place, something like

/* these are the ones that have the same ABI for 32-bit and 64-bit tasks */
static int xfs_compatible_file_ioctl(struct file *filp, unsigned cmd,
void __user *p)
{
      int ret = -ENOIOCTLCMD;

       switch (cmd) {
       case XFS_IOC_DIOINFO:
            ...
        case ...
     }

     return ret;
}

long
xfs_file_compat_ioctl(
        struct file             *filp,
        unsigned                cmd,
        unsigned long           p)
{
       ret = xfs_compatible_file_ioctl(filp, cmd, compat_ptr(p));
       if (ret != -ENOIOCTLCMD)
              return ret;

      /* all incompatible ones below */
      switch (cmd) {
         ...
      }
}
Having them in one place makes it more obvious to readers how the
native and compat handlers fit together, and makes it easier to keep
the two in sync.

That would of course be a much larger change to how it's done today,
and it's way out of scope of what I want to achieve in my (already
too long) series.

     Arnd

  reply	other threads:[~2019-08-15  7:57 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-14 20:42 [PATCH v5 00/18] compat_ioctl.c removal, part 2/3 Arnd Bergmann
2019-08-14 20:42 ` [PATCH v5 01/18] xfs: compat_ioctl: use compat_ptr() Arnd Bergmann
2019-08-14 21:37   ` Dave Chinner
2019-08-15  6:43     ` Arnd Bergmann
2019-08-15  7:13     ` Christoph Hellwig
2019-08-15  7:56       ` Arnd Bergmann [this message]
2019-08-15  8:02         ` Christoph Hellwig
2019-08-15 10:26           ` Christoph Hellwig
2019-08-15 11:02             ` Arnd Bergmann
2019-08-15 12:15             ` Dave Chinner
2019-08-15 14:03               ` Christoph Hellwig
2019-08-15 19:20                 ` Arnd Bergmann
2019-08-15 19:28                   ` Darrick J. Wong
2019-08-15 19:46                     ` Arnd Bergmann
2019-08-14 20:42 ` [PATCH v5 02/18] xfs: compat_ioctl: add missing conversions Arnd Bergmann
2019-08-14 20:42 ` [PATCH v5 03/18] gfs2: add compat_ioctl support Arnd Bergmann
2019-08-15 12:07   ` Bob Peterson
2019-08-16 17:31   ` Andreas Gruenbacher
2019-08-18 19:31     ` Arnd Bergmann
2019-08-18 20:17       ` Andreas Grünbacher
2019-08-19  9:09         ` Arnd Bergmann
2019-08-19  9:37           ` Andreas Gruenbacher
2019-08-14 20:42 ` [PATCH v5 04/18] fs: compat_ioctl: move FITRIM emulation into file systems Arnd Bergmann
2019-08-14 20:42 ` [PATCH v5 05/18] watchdog: cpwd: use generic compat_ptr_ioctl Arnd Bergmann
2019-08-15 18:06   ` Guenter Roeck
2019-10-07 23:28   ` Guenter Roeck
2019-10-08  7:38     ` Arnd Bergmann
2019-08-14 20:49 ` [PATCH v5 06/18] compat_ioctl: move WDIOC handling into wdt drivers Arnd Bergmann
2019-08-15 18:10   ` Guenter Roeck
2019-08-14 20:49 ` [PATCH v5 07/18] compat_ioctl: reimplement SG_IO handling Arnd Bergmann
2019-08-14 20:49 ` [PATCH v5 08/18] af_unix: add compat_ioctl support Arnd Bergmann
2019-08-14 20:49 ` [PATCH v5 09/18] compat_ioctl: handle SIOCOUTQNSD Arnd Bergmann
2019-08-14 20:54 ` [PATCH v5 10/18] compat_ioctl: move SIOCOUTQ out of compat_ioctl.c Arnd Bergmann
2019-08-15 14:09   ` Greg Kroah-Hartman
2019-08-14 20:54 ` [PATCH v5 11/18] tty: handle compat PPP ioctls Arnd Bergmann
2019-08-15 14:09   ` Greg Kroah-Hartman
2019-08-14 20:54 ` [PATCH v5 12/18] compat_ioctl: unify copy-in of ppp filters Arnd Bergmann
2019-08-14 20:54 ` [PATCH v5 13/18] compat_ioctl: move PPPIOCSCOMPRESS to ppp_generic Arnd Bergmann
2019-08-14 20:54 ` [PATCH v5 14/18] compat_ioctl: handle PPPIOCGIDLE for 64-bit time_t Arnd Bergmann
2019-08-14 20:54 ` [PATCH v5 15/18] compat_ioctl: ppp: move simple commands into ppp_generic.c Arnd Bergmann
2019-08-14 20:54 ` [PATCH v5 16/18] compat_ioctl: move SG_GET_REQUEST_TABLE handling Arnd Bergmann
2019-08-14 20:54 ` [PATCH v5 17/18] pktcdvd: add compat_ioctl handler Arnd Bergmann
2019-08-14 20:54 ` [PATCH v5 18/18] scsi: sd: enable compat ioctls for sed-opal Arnd Bergmann

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CAK8P3a2Hjfd49XY18cDr04ZpvC5ZBGudzxqpCesbSsDf1ydmSA@mail.gmail.com \
    --to=arnd@arndb.de \
    --cc=allison.henderson@oracle.com \
    --cc=bfoster@redhat.com \
    --cc=darrick.wong@oracle.com \
    --cc=david@fromorbit.com \
    --cc=dchinner@redhat.com \
    --cc=hch@infradead.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-xfs@vger.kernel.org \
    --cc=nbowler@draconx.ca \
    --cc=sandeen@sandeen.net \
    --cc=viro@zeniv.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).