lkml.org 
[lkml]   [2019]   [Oct]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v6 29/43] REPLACE gfs2: add compat_ioctl support
    Date
    Out of the four ioctl commands supported on gfs2, only FITRIM
    works in compat mode.

    Add a proper handler based on the ext4 implementation.

    Fixes: 6ddc5c3ddf25 ("gfs2: getlabel support")
    Reviewed-by: Bob Peterson <rpeterso@redhat.com>
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    ---
    fs/gfs2/file.c | 30 ++++++++++++++++++++++++++++++
    1 file changed, 30 insertions(+)

    diff --git a/fs/gfs2/file.c b/fs/gfs2/file.c
    index 997b326247e2..e073050c1f2a 100644
    --- a/fs/gfs2/file.c
    +++ b/fs/gfs2/file.c
    @@ -6,6 +6,7 @@

    #include <linux/slab.h>
    #include <linux/spinlock.h>
    +#include <linux/compat.h>
    #include <linux/completion.h>
    #include <linux/buffer_head.h>
    #include <linux/pagemap.h>
    @@ -354,6 +355,31 @@ static long gfs2_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
    return -ENOTTY;
    }

    +#ifdef CONFIG_COMPAT
    +static long gfs2_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
    +{
    + switch(cmd) {
    + /* These are just misnamed, they actually get/put from/to user an int */
    + case FS_IOC32_GETFLAGS:
    + cmd = FS_IOC_GETFLAGS;
    + break;
    + case FS_IOC32_SETFLAGS:
    + cmd = FS_IOC_SETFLAGS;
    + break;
    + /* Keep this list in sync with gfs2_ioctl */
    + case FITRIM:
    + case FS_IOC_GETFSLABEL:
    + break;
    + default:
    + return -ENOIOCTLCMD;
    + }
    +
    + return gfs2_ioctl(filp, cmd, (unsigned long)compat_ptr(arg));
    +}
    +#else
    +#define gfs2_compat_ioctl NULL
    +#endif
    +
    /**
    * gfs2_size_hint - Give a hint to the size of a write request
    * @filep: The struct file
    @@ -1293,6 +1319,7 @@ const struct file_operations gfs2_file_fops = {
    .write_iter = gfs2_file_write_iter,
    .iopoll = iomap_dio_iopoll,
    .unlocked_ioctl = gfs2_ioctl,
    + .compat_ioctl = gfs2_compat_ioctl,
    .mmap = gfs2_mmap,
    .open = gfs2_open,
    .release = gfs2_release,
    @@ -1308,6 +1335,7 @@ const struct file_operations gfs2_file_fops = {
    const struct file_operations gfs2_dir_fops = {
    .iterate_shared = gfs2_readdir,
    .unlocked_ioctl = gfs2_ioctl,
    + .compat_ioctl = gfs2_compat_ioctl,
    .open = gfs2_open,
    .release = gfs2_release,
    .fsync = gfs2_fsync,
    @@ -1324,6 +1352,7 @@ const struct file_operations gfs2_file_fops_nolock = {
    .write_iter = gfs2_file_write_iter,
    .iopoll = iomap_dio_iopoll,
    .unlocked_ioctl = gfs2_ioctl,
    + .compat_ioctl = gfs2_compat_ioctl,
    .mmap = gfs2_mmap,
    .open = gfs2_open,
    .release = gfs2_release,
    @@ -1337,6 +1366,7 @@ const struct file_operations gfs2_file_fops_nolock = {
    const struct file_operations gfs2_dir_fops_nolock = {
    .iterate_shared = gfs2_readdir,
    .unlocked_ioctl = gfs2_ioctl,
    + .compat_ioctl = gfs2_compat_ioctl,
    .open = gfs2_open,
    .release = gfs2_release,
    .fsync = gfs2_fsync,
    --
    2.20.0
    \
     
     \ /
      Last update: 2019-10-09 21:13    [W:4.209 / U:0.524 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site