From: Anders Roxell <anders.roxell@linaro.org>
To: Christoph Hellwig <hch@lst.de>
Cc: "Martin K. Petersen" <martin.petersen@oracle.com>,
Jens Axboe <axboe@kernel.dk>,
FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>,
Kai.Makisara@kolumbus.fi, dgilbert@interlog.com,
linux-block@vger.kernel.org, linux-scsi@vger.kernel.org,
Linux-Next Mailing List <linux-next@vger.kernel.org>,
Mark Brown <broonie@kernel.org>,
Stephen Rothwell <sfr@canb.auug.org.au>,
lkft-triage@lists.linaro.org
Subject: Re: [PATCH 14/24] bsg: move bsg_scsi_ops to drivers/scsi/
Date: Fri, 30 Jul 2021 12:25:23 +0200 [thread overview]
Message-ID: <CADYN=9LSzjJBUgD_wbfctKghQdn0VL0BudX_=0Vb_vNgq+60fg@mail.gmail.com> (raw)
In-Reply-To: <20210730072752.GB23847@lst.de>
On Fri, 30 Jul 2021 at 09:27, Christoph Hellwig <hch@lst.de> wrote:
>
Hi Christoph,
> On Thu, Jul 29, 2021 at 10:47:45AM +0200, Anders Roxell wrote:
> > From: Christoph Hellwig <hch@lst.de>
> >
> > > Move the SCSI-specific bsg code in the SCSI midlayer instead of in the
> > > common bsg code. This just keeps the common bsg code block/ and also
> > > allows building it as a module.
> > >
> > > Signed-off-by: Christoph Hellwig <hch@lst.de>
> >
> > [ Please ignore if its already been reported ]
> >
> > When building arm's defconfig 'footbridge_defconfig' on linux-next tag next-20210728 I see the following error.
>
> Can you try this patch on top?
When I applied that patch ontop of tag next-20210728 and built arm's
defconfig 'footbridge_defconfig'
I it builds fine.
Thank you for the fix.
>
> ---
> From d92a8160ce3fbe64a250482522ca0456277781f9 Mon Sep 17 00:00:00 2001
> From: Christoph Hellwig <hch@lst.de>
> Date: Mon, 5 Jul 2021 15:02:43 +0200
> Subject: cdrom: move the guts of cdrom_read_cdda_bpc into the sr driver
>
> cdrom_read_cdda_bpc relies on sending SCSI command to the low level
> driver using a REQ_OP_SCSI_IN request. This isn't generic block
> layer functionality, so some the actual low-level code into the sr
> driver and call it through a new read_cdda_bpc method in the
> cdrom_device_ops structure.
>
> With this the CDROM code does not have to pull in
> scsi_normalize_sense and this depend on CONFIG_SCSI_COMMON.
>
> Signed-off-by: Christoph Hellwig <hch@lst.de>
Tested-by: Anders Roxell <anders.roxell@linaro.org>
Cheers,
Anders
> ---
> drivers/cdrom/cdrom.c | 71 +++++--------------------------------------
> drivers/scsi/sr.c | 56 +++++++++++++++++++++++++++++++++-
> include/linux/cdrom.h | 6 ++--
> 3 files changed, 67 insertions(+), 66 deletions(-)
>
> diff --git a/drivers/cdrom/cdrom.c b/drivers/cdrom/cdrom.c
> index 8882b311bafd..bd2e5b1560f5 100644
> --- a/drivers/cdrom/cdrom.c
> +++ b/drivers/cdrom/cdrom.c
> @@ -629,7 +629,7 @@ int register_cdrom(struct gendisk *disk, struct cdrom_device_info *cdi)
> if (CDROM_CAN(CDC_MRW_W))
> cdi->exit = cdrom_mrw_exit;
>
> - if (cdi->disk)
> + if (cdi->ops->read_cdda_bpc)
> cdi->cdda_method = CDDA_BPC_FULL;
> else
> cdi->cdda_method = CDDA_OLD;
> @@ -2159,81 +2159,26 @@ static int cdrom_read_cdda_old(struct cdrom_device_info *cdi, __u8 __user *ubuf,
> static int cdrom_read_cdda_bpc(struct cdrom_device_info *cdi, __u8 __user *ubuf,
> int lba, int nframes)
> {
> - struct request_queue *q = cdi->disk->queue;
> - struct request *rq;
> - struct scsi_request *req;
> - struct bio *bio;
> - unsigned int len;
> + int max_frames = (queue_max_sectors(cdi->disk->queue) << 9) /
> + CD_FRAMESIZE_RAW;
> int nr, ret = 0;
>
> - if (!q)
> - return -ENXIO;
> -
> - if (!blk_queue_scsi_passthrough(q)) {
> - WARN_ONCE(true,
> - "Attempt read CDDA info through a non-SCSI queue\n");
> - return -EINVAL;
> - }
> -
> cdi->last_sense = 0;
>
> while (nframes) {
> - nr = nframes;
> if (cdi->cdda_method == CDDA_BPC_SINGLE)
> nr = 1;
> - if (nr * CD_FRAMESIZE_RAW > (queue_max_sectors(q) << 9))
> - nr = (queue_max_sectors(q) << 9) / CD_FRAMESIZE_RAW;
> -
> - len = nr * CD_FRAMESIZE_RAW;
> -
> - rq = blk_get_request(q, REQ_OP_DRV_IN, 0);
> - if (IS_ERR(rq)) {
> - ret = PTR_ERR(rq);
> - break;
> - }
> - req = scsi_req(rq);
> -
> - ret = blk_rq_map_user(q, rq, NULL, ubuf, len, GFP_KERNEL);
> - if (ret) {
> - blk_put_request(rq);
> - break;
> - }
> -
> - req->cmd[0] = GPCMD_READ_CD;
> - req->cmd[1] = 1 << 2;
> - req->cmd[2] = (lba >> 24) & 0xff;
> - req->cmd[3] = (lba >> 16) & 0xff;
> - req->cmd[4] = (lba >> 8) & 0xff;
> - req->cmd[5] = lba & 0xff;
> - req->cmd[6] = (nr >> 16) & 0xff;
> - req->cmd[7] = (nr >> 8) & 0xff;
> - req->cmd[8] = nr & 0xff;
> - req->cmd[9] = 0xf8;
> -
> - req->cmd_len = 12;
> - rq->timeout = 60 * HZ;
> - bio = rq->bio;
> -
> - blk_execute_rq(cdi->disk, rq, 0);
> - if (scsi_req(rq)->result) {
> - struct scsi_sense_hdr sshdr;
> -
> - ret = -EIO;
> - scsi_normalize_sense(req->sense, req->sense_len,
> - &sshdr);
> - cdi->last_sense = sshdr.sense_key;
> - }
> -
> - if (blk_rq_unmap_user(bio))
> - ret = -EFAULT;
> - blk_put_request(rq);
> + else
> + nr = min(nframes, max_frames);
>
> + ret = cdi->ops->read_cdda_bpc(cdi, ubuf, lba, nr,
> + &cdi->last_sense);
> if (ret)
> break;
>
> nframes -= nr;
> lba += nr;
> - ubuf += len;
> + ubuf += (nr * CD_FRAMESIZE_RAW);
> }
>
> return ret;
> diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c
> index b98e77fe700b..6203a8b58d40 100644
> --- a/drivers/scsi/sr.c
> +++ b/drivers/scsi/sr.c
> @@ -120,6 +120,8 @@ static void get_capabilities(struct scsi_cd *);
> static unsigned int sr_check_events(struct cdrom_device_info *cdi,
> unsigned int clearing, int slot);
> static int sr_packet(struct cdrom_device_info *, struct packet_command *);
> +static int sr_read_cdda_bpc(struct cdrom_device_info *cdi, void __user *ubuf,
> + u32 lba, u32 nr, u8 *last_sense);
>
> static const struct cdrom_device_ops sr_dops = {
> .open = sr_open,
> @@ -133,8 +135,9 @@ static const struct cdrom_device_ops sr_dops = {
> .get_mcn = sr_get_mcn,
> .reset = sr_reset,
> .audio_ioctl = sr_audio_ioctl,
> - .capability = SR_CAPABILITIES,
> .generic_packet = sr_packet,
> + .read_cdda_bpc = sr_read_cdda_bpc,
> + .capability = SR_CAPABILITIES,
> };
>
> static void sr_kref_release(struct kref *kref);
> @@ -951,6 +954,57 @@ static int sr_packet(struct cdrom_device_info *cdi,
> return cgc->stat;
> }
>
> +static int sr_read_cdda_bpc(struct cdrom_device_info *cdi, void __user *ubuf,
> + u32 lba, u32 nr, u8 *last_sense)
> +{
> + struct gendisk *disk = cdi->disk;
> + u32 len = nr * CD_FRAMESIZE_RAW;
> + struct scsi_request *req;
> + struct request *rq;
> + struct bio *bio;
> + int ret;
> +
> + rq = blk_get_request(disk->queue, REQ_OP_DRV_IN, 0);
> + if (IS_ERR(rq))
> + return PTR_ERR(rq);
> + req = scsi_req(rq);
> +
> + ret = blk_rq_map_user(disk->queue, rq, NULL, ubuf, len, GFP_KERNEL);
> + if (ret)
> + goto out_put_request;
> +
> + req->cmd[0] = GPCMD_READ_CD;
> + req->cmd[1] = 1 << 2;
> + req->cmd[2] = (lba >> 24) & 0xff;
> + req->cmd[3] = (lba >> 16) & 0xff;
> + req->cmd[4] = (lba >> 8) & 0xff;
> + req->cmd[5] = lba & 0xff;
> + req->cmd[6] = (nr >> 16) & 0xff;
> + req->cmd[7] = (nr >> 8) & 0xff;
> + req->cmd[8] = nr & 0xff;
> + req->cmd[9] = 0xf8;
> + req->cmd_len = 12;
> + rq->timeout = 60 * HZ;
> + bio = rq->bio;
> +
> + blk_execute_rq(disk, rq, 0);
> + if (scsi_req(rq)->result) {
> + struct scsi_sense_hdr sshdr;
> +
> + scsi_normalize_sense(req->sense, req->sense_len,
> + &sshdr);
> + *last_sense = sshdr.sense_key;
> + ret = -EIO;
> + }
> +
> + if (blk_rq_unmap_user(bio))
> + ret = -EFAULT;
> +out_put_request:
> + blk_put_request(rq);
> + return ret;
> +}
> +
> +
> /**
> * sr_kref_release - Called to free the scsi_cd structure
> * @kref: pointer to embedded kref
> diff --git a/include/linux/cdrom.h b/include/linux/cdrom.h
> index f48d0a31deae..c4fef00abdf3 100644
> --- a/include/linux/cdrom.h
> +++ b/include/linux/cdrom.h
> @@ -86,11 +86,13 @@ struct cdrom_device_ops {
> /* play stuff */
> int (*audio_ioctl) (struct cdrom_device_info *,unsigned int, void *);
>
> -/* driver specifications */
> - const int capability; /* capability flags */
> /* handle uniform packets for scsi type devices (scsi,atapi) */
> int (*generic_packet) (struct cdrom_device_info *,
> struct packet_command *);
> + int (*read_cdda_bpc)(struct cdrom_device_info *cdi, void __user *ubuf,
> + u32 lba, u32 nframes, u8 *last_sense);
> +/* driver specifications */
> + const int capability; /* capability flags */
> };
>
> int cdrom_multisession(struct cdrom_device_info *cdi,
> --
> 2.30.2
>
next prev parent reply other threads:[~2021-07-30 10:25 UTC|newest]
Thread overview: 37+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-24 7:20 cleanup SCSI ioctl support v2 Christoph Hellwig
2021-07-24 7:20 ` [PATCH 01/24] bsg: remove support for SCSI_IOCTL_SEND_COMMAND Christoph Hellwig
2021-07-28 1:32 ` Jens Axboe
2021-07-29 3:38 ` Martin K. Petersen
2021-07-24 7:20 ` [PATCH 02/24] sr: consolidate compat ioctl handling Christoph Hellwig
2021-07-24 7:20 ` [PATCH 03/24] sd: " Christoph Hellwig
2021-07-24 7:20 ` [PATCH 04/24] ch: " Christoph Hellwig
2021-07-24 7:20 ` [PATCH 05/24] cg: " Christoph Hellwig
2021-07-24 7:20 ` [PATCH 06/24] scsi: remove scsi_compat_ioctl Christoph Hellwig
2021-07-24 7:20 ` [PATCH 07/24] st: simplify ioctl handling Christoph Hellwig
2021-07-24 7:20 ` [PATCH 08/24] cdrom: remove the call to scsi_cmd_blk_ioctl from cdrom_ioctl Christoph Hellwig
2021-07-24 7:20 ` [PATCH 09/24] scsi_ioctl: remove scsi_cmd_blk_ioctl Christoph Hellwig
2021-07-24 7:20 ` [PATCH 10/24] scsi_ioctl: remove scsi_verify_blk_ioctl Christoph Hellwig
2021-07-24 7:20 ` [PATCH 11/24] scsi: call scsi_cmd_ioctl from scsi_ioctl Christoph Hellwig
2021-07-24 7:20 ` [PATCH 12/24] block: add a queue_max_sectors_bytes helper Christoph Hellwig
2021-07-24 7:20 ` [PATCH 13/24] bsg: decouple from scsi_cmd_ioctl Christoph Hellwig
2021-07-24 7:20 ` [PATCH 14/24] bsg: move bsg_scsi_ops to drivers/scsi/ Christoph Hellwig
2021-07-30 7:27 ` Christoph Hellwig
2021-07-30 10:25 ` Anders Roxell [this message]
2021-07-24 7:20 ` [PATCH 15/24] scsi_ioctl: remove scsi_req_init Christoph Hellwig
2021-07-24 7:20 ` [PATCH 16/24] scsi_ioctl: move scsi_command_size_tbl to scsi_common.c Christoph Hellwig
2021-07-24 7:20 ` [PATCH 17/24] scsi_ioctl: simplify SCSI passthrough permission checking Christoph Hellwig
2021-07-24 7:20 ` [PATCH 18/24] scsi_ioctl: move the "block layer" SCSI ioctl handling to drivers/scsi Christoph Hellwig
2021-08-23 6:43 ` Halil Pasic
2021-08-23 6:49 ` Christoph Hellwig
2021-08-23 10:19 ` Halil Pasic
2021-08-23 10:22 ` Christoph Hellwig
2021-07-24 7:20 ` [PATCH 19/24] scsi: rename CONFIG_BLK_SCSI_REQUEST to CONFIG_SCSI_COMMON Christoph Hellwig
2021-07-24 7:20 ` [PATCH 20/24] scsi: remove a very misleading comment Christoph Hellwig
2021-07-24 7:20 ` [PATCH 21/24] scsi: consolidate the START STOP UNIT handling Christoph Hellwig
2021-07-24 7:20 ` [PATCH 22/24] scsi: factor SCSI_IOCTL_GET_IDLUN handling into a helper Christoph Hellwig
2021-07-24 7:20 ` [PATCH 23/24] scsi: factor SG_IO " Christoph Hellwig
2021-07-24 7:20 ` [PATCH 24/24] scsi: unexport sg_scsi_ioctl Christoph Hellwig
2021-07-27 2:52 ` cleanup SCSI ioctl support v2 Martin K. Petersen
-- strict thread matches above, loose matches on Subject: below --
2021-07-12 5:47 cleanup SCSI ioctl support Christoph Hellwig
2021-07-12 5:48 ` [PATCH 14/24] bsg: move bsg_scsi_ops to drivers/scsi/ Christoph Hellwig
2021-07-22 18:03 ` Martin K. Petersen
2021-07-22 19:11 ` Christoph Hellwig
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='CADYN=9LSzjJBUgD_wbfctKghQdn0VL0BudX_=0Vb_vNgq+60fg@mail.gmail.com' \
--to=anders.roxell@linaro.org \
--cc=Kai.Makisara@kolumbus.fi \
--cc=axboe@kernel.dk \
--cc=broonie@kernel.org \
--cc=dgilbert@interlog.com \
--cc=fujita.tomonori@lab.ntt.co.jp \
--cc=hch@lst.de \
--cc=linux-block@vger.kernel.org \
--cc=linux-next@vger.kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=lkft-triage@lists.linaro.org \
--cc=martin.petersen@oracle.com \
--cc=sfr@canb.auug.org.au \
/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).