From patchwork Tue Dec 17 22:17:02 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 181947 Delivered-To: patch@linaro.org Received: by 2002:a92:3001:0:0:0:0:0 with SMTP id x1csp6383391ile; Tue, 17 Dec 2019 14:19:21 -0800 (PST) X-Google-Smtp-Source: APXvYqzsgEZhKX98zuA1iTwTba0xolJqkdGRq2OgD5na6Rt0y3foPn1NG0G5JEFJwFONioJzsjLo X-Received: by 2002:a05:6830:145:: with SMTP id j5mr38689726otp.242.1576621161639; Tue, 17 Dec 2019 14:19:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1576621161; cv=none; d=google.com; s=arc-20160816; b=NCHpKsAn2TjPX7/RLoziJuhE17P8M99MZ8di6stVtxAqR/W/o4IrxlD+cJbCO0vmqI 3Chgh4QoQ0M4nxtByg6Cp2pioxCnnjrM6Ihh62mo1uVSfk7qVetgkzrD+ZEaOjix5oW3 DEWGQxBL3EgCgD2D5dnoGcLThqLfHyoaA28x7tnssq0WrqTIiOt+yiHE/KvmF4Ao/vrw iAlBPfYWu6cCgv6oohQ57ajgS/PkqsmZP22dWO+4NrQTTtL+RcMZ4qoGLYEbx4N+ItuW fu+VjHsfy6Aj6pNR/edKL3B/M1DuKq0vT7IIufHBB6VEjz8BrSagFMr9Awx1IrpmfJOF nk/g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=KNYX6SmnxcHU+EB4bOKJKMFcpH26A767qXp5FzAXjow=; b=aprBS7npqD+7nHiUM2umM7bE+IKgNavcOr8KDxZ7gXzmQf+MPSpa9xep2iA7UBFa+8 K8kOfJZgKhMmCFFG1ZHr/fMqKno9ANq0BB/cFyN+dBz+/a6SS3VZ09R9LpIdyda2ZTTI sFS83wByXq5f07ouA7iyynDChhSN9woqgnLQPSYiQnnsbyg1Lp5Z2hcxdfW/Ite1EKEF mAV5DoD0x1ANve6hDbocneeNUQcdInH/RnU0UK2N+rZRYFvQfcgVJhUWcbJi3JyeAKza riBKADH5NBzAcqu9txI37uy1kgsvON9BBIUmM/XXPEKqIaiYzr+ZXjyduHCmKM4Ljoob I28A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id y22si11845750oti.269.2019.12.17.14.19.21; Tue, 17 Dec 2019 14:19:21 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727201AbfLQWTU (ORCPT + 27 others); Tue, 17 Dec 2019 17:19:20 -0500 Received: from mout.kundenserver.de ([217.72.192.74]:46933 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727165AbfLQWTO (ORCPT ); Tue, 17 Dec 2019 17:19:14 -0500 Received: from threadripper.lan ([149.172.19.189]) by mrelayeu.kundenserver.de (mreue108 [212.227.15.145]) with ESMTPA (Nemesis) id 1MKKhF-1iOrCN359b-00Looj; Tue, 17 Dec 2019 23:17:32 +0100 From: Arnd Bergmann To: Jens Axboe , "James E.J. Bottomley" , "Martin K. Petersen" Cc: linux-scsi@vger.kernel.org, linux-block@vger.kernel.org, y2038@lists.linaro.org, linux-kernel@vger.kernel.org, Christoph Hellwig , Ben Hutchings , linux-doc@vger.kernel.org, corbet@lwn.net, viro@zeniv.linux.org.uk, linux-fsdevel@vger.kernel.org, Arnd Bergmann Subject: [PATCH v2 21/27] compat_ioctl: move cdrom commands into cdrom.c Date: Tue, 17 Dec 2019 23:17:02 +0100 Message-Id: <20191217221708.3730997-22-arnd@arndb.de> X-Mailer: git-send-email 2.20.0 In-Reply-To: <20191217221708.3730997-1-arnd@arndb.de> References: <20191217221708.3730997-1-arnd@arndb.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:xQtqzDF0k6u89EQieIQzUB9hiVcXtS5mjt2hY+zFGQb8APrgaxJ mBUBNv6HQTyWI67r5klVxNs8hbG34FMJ6V4H1OIknx+iXFwtjM25VsaYwp88i2z0nwoWi1I TnTgZeCsnC1aCMB9hk8IaX2/KgLUhBCJxsDWxtft0DzXyc+PzBt+rt/ZuyVMomqnjviYnh3 YoVR+mpglYKYjo8U/jGGw== X-Spam-Flag: NO X-UI-Out-Filterresults: notjunk:1; V03:K0:TNPJQbvKd+U=:MpWDPVhy5y+i9LqCtJmTmu 6rkUBZ4gXyXzKxtB/tFOl7A5y+hEU4TED8JWQgJ2isNp9eMh71mKG0ZTXIyBVqnnXnMz6ZzIk cwvQVxdoM+OkoUPEH1AYuTpfGTDFlhX2aT8My3SbrLvONUjOt1Hi+uGLtQLiEWiNwwzBA6y5Y OLncZQuRAq4yIMRZwN4zswmQICGt5DTcjgOVX2OJ0/K7oBUaMb2Y+5HmGwa9AfZ3dum3zZiKW 3MaW8IaqB5h2v6ACeBBi/0QlBlk6qGM0Z2Vg6BrD70OhREPIuMlRysYUqSNl95+7DG1t5u07q VW0nT2wuOQOG7RKpg2DPN21t+mxmPuLYr7s2N5UKormAGysU37nm2O0cy3fFk+MtxdRRmy5hv haQ8FdrRKHA9ki+wiEo9W+axXfVz+bXL9Jy/casciu5wxQ7BpJ+SSwXul3TO3V1GiKV5lmq+6 xtGhudSAjpl3JVNugwDKiMJ49ijrh7OPKH8VWZg+qGoDsgAbzlGz7IjBRi/CO5mjKcFnK1LM6 /XS+6SYCp8MXbznn5MWAXS/5jtS4I9Tx5P/s9iv3UvGtwtS1iHQWBeVaIANpFvAT88NhXM+Yy EzBJWS3cGVKhUfx12Lcn4EmBc+xHaAPxbnHEM/RatnKc5dl86+m/bNfr9hkerJCTuNhoiHqeh laVSWhnadCyCeXocU6Lice+7EZ7oTmJaCG71UKBydjRa3XbXT2sQUXnNE5OH79/SQlPyJFZYd 1F7Y8cf2R3Jhx0GLvVBIsTPJhewRJxdITcP7GijENBG6TY3lfjWdVNgrCqIomX9LjVyS9ki2v M2jchqHAy81dGqM3yECcIr+jfNeu98PEf1uSEeZGzI+CcHemHpYaJ/sGQyc4m1HMNwSTQ8cfR lXW2ZFqZ+z3qFEY+ixDg== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org There is no need for the special cases for the cdrom ioctls any more now, so make sure that each cdrom driver has a .compat_ioctl() callback and calls cdrom_compat_ioctl() directly there. Signed-off-by: Arnd Bergmann --- block/compat_ioctl.c | 45 -------------------------------------- drivers/block/paride/pcd.c | 3 +++ drivers/cdrom/gdrom.c | 3 +++ drivers/ide/ide-cd.c | 36 ++++++++++++++++++++++++++++++ drivers/scsi/sr.c | 10 +++------ 5 files changed, 45 insertions(+), 52 deletions(-) -- 2.20.0 diff --git a/block/compat_ioctl.c b/block/compat_ioctl.c index cf136bc2c9fc..7cb534d6e767 100644 --- a/block/compat_ioctl.c +++ b/block/compat_ioctl.c @@ -159,42 +159,6 @@ static int compat_blkdev_driver_ioctl(struct block_device *bdev, fmode_t mode, case HDIO_DRIVE_CMD: /* 0x330 is reserved -- it used to be HDIO_GETGEO_BIG */ case 0x330: - /* CDROM stuff */ - case CDROMPAUSE: - case CDROMRESUME: - case CDROMPLAYMSF: - case CDROMPLAYTRKIND: - case CDROMREADTOCHDR: - case CDROMREADTOCENTRY: - case CDROMSTOP: - case CDROMSTART: - case CDROMEJECT: - case CDROMVOLCTRL: - case CDROMSUBCHNL: - case CDROMMULTISESSION: - case CDROM_GET_MCN: - case CDROMRESET: - case CDROMVOLREAD: - case CDROMSEEK: - case CDROMPLAYBLK: - case CDROMCLOSETRAY: - case CDROM_DISC_STATUS: - case CDROM_CHANGER_NSLOTS: - case CDROM_GET_CAPABILITY: - case CDROM_SEND_PACKET: - /* Ignore cdrom.h about these next 5 ioctls, they absolutely do - * not take a struct cdrom_read, instead they take a struct cdrom_msf - * which is compatible. - */ - case CDROMREADMODE2: - case CDROMREADMODE1: - case CDROMREADRAW: - case CDROMREADCOOKED: - case CDROMREADALL: - /* DVD ioctls */ - case DVD_READ_STRUCT: - case DVD_WRITE_STRUCT: - case DVD_AUTH: arg = (unsigned long)compat_ptr(arg); /* These intepret arg as an unsigned long, not as a pointer, * so we must not do compat_ptr() conversion. */ @@ -210,15 +174,6 @@ static int compat_blkdev_driver_ioctl(struct block_device *bdev, fmode_t mode, case HDIO_SET_ACOUSTIC: case HDIO_SET_BUSSTATE: case HDIO_SET_ADDRESS: - case CDROMEJECT_SW: - case CDROM_SET_OPTIONS: - case CDROM_CLEAR_OPTIONS: - case CDROM_SELECT_SPEED: - case CDROM_SELECT_DISC: - case CDROM_MEDIA_CHANGED: - case CDROM_DRIVE_STATUS: - case CDROM_LOCKDOOR: - case CDROM_DEBUG: break; default: /* unknown ioctl number */ diff --git a/drivers/block/paride/pcd.c b/drivers/block/paride/pcd.c index 636bfea2de6f..117cfc8cd05a 100644 --- a/drivers/block/paride/pcd.c +++ b/drivers/block/paride/pcd.c @@ -275,6 +275,9 @@ static const struct block_device_operations pcd_bdops = { .open = pcd_block_open, .release = pcd_block_release, .ioctl = pcd_block_ioctl, +#ifdef CONFIG_COMPAT + .ioctl = blkdev_compat_ptr_ioctl, +#endif .check_events = pcd_block_check_events, }; diff --git a/drivers/cdrom/gdrom.c b/drivers/cdrom/gdrom.c index 5b21dc421c94..886b2638c730 100644 --- a/drivers/cdrom/gdrom.c +++ b/drivers/cdrom/gdrom.c @@ -518,6 +518,9 @@ static const struct block_device_operations gdrom_bdops = { .release = gdrom_bdops_release, .check_events = gdrom_bdops_check_events, .ioctl = gdrom_bdops_ioctl, +#ifdef CONFIG_COMPAT + .ioctl = blkdev_compat_ptr_ioctl, +#endif }; static irqreturn_t gdrom_command_interrupt(int irq, void *dev_id) diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c index 9d117936bee1..2de6e8ace957 100644 --- a/drivers/ide/ide-cd.c +++ b/drivers/ide/ide-cd.c @@ -25,6 +25,7 @@ #define IDECD_VERSION "5.00" +#include #include #include #include @@ -1710,6 +1711,38 @@ static int idecd_ioctl(struct block_device *bdev, fmode_t mode, return ret; } +#ifdef CONFIG_COMPAT +static int idecd_locked_compat_ioctl(struct block_device *bdev, fmode_t mode, + unsigned int cmd, unsigned long arg) +{ + struct cdrom_info *info = ide_drv_g(bdev->bd_disk, cdrom_info); + int err; + + switch (cmd) { + case CDROMSETSPINDOWN: + return idecd_set_spindown(&info->devinfo, arg); + case CDROMGETSPINDOWN: + return idecd_get_spindown(&info->devinfo, arg); + default: + break; + } + + return cdrom_ioctl(&info->devinfo, bdev, mode, cmd, + (unsigned long)compat_ptr(arg)); +} + +static int idecd_compat_ioctl(struct block_device *bdev, fmode_t mode, + unsigned int cmd, unsigned long arg) +{ + int ret; + + mutex_lock(&ide_cd_mutex); + ret = idecd_locked_compat_ioctl(bdev, mode, cmd, arg); + mutex_unlock(&ide_cd_mutex); + + return ret; +} +#endif static unsigned int idecd_check_events(struct gendisk *disk, unsigned int clearing) @@ -1732,6 +1765,9 @@ static const struct block_device_operations idecd_ops = { .open = idecd_open, .release = idecd_release, .ioctl = idecd_ioctl, +#ifdef CONFIG_COMPAT + .compat_ioctl = idecd_compat_ioctl, +#endif .check_events = idecd_check_events, .revalidate_disk = idecd_revalidate_disk }; diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c index 6033a886c42c..0fbb8fe6e521 100644 --- a/drivers/scsi/sr.c +++ b/drivers/scsi/sr.c @@ -628,13 +628,9 @@ static int sr_block_compat_ioctl(struct block_device *bdev, fmode_t mode, unsign goto put; } - /* - * CDROM ioctls are handled in the block layer, but - * do the scsi blk ioctls here. - */ - ret = scsi_cmd_blk_ioctl(bdev, mode, cmd, argp); - if (ret != -ENOTTY) - return ret; + ret = cdrom_ioctl(&cd->cdi, bdev, mode, cmd, (unsigned long)argp); + if (ret != -ENOSYS) + goto put; ret = scsi_compat_ioctl(sdev, cmd, argp);