]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
sd: add a sd_disable_write_same helper
authorChristoph Hellwig <hch@lst.de>
Fri, 31 May 2024 07:48:02 +0000 (09:48 +0200)
committerJens Axboe <axboe@kernel.dk>
Fri, 14 Jun 2024 16:19:44 +0000 (10:19 -0600)
Add helper to disable WRITE SAME when it is not supported and use it
instead of sd_config_write_same in the I/O completion handler.  This
avoids touching more fields than required in the I/O completion handler
and  prepares for converting sd to use the atomic queue limits API.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
Link: https://lore.kernel.org/r/20240531074837.1648501-8-hch@lst.de
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/scsi/sd.c

index f07d90474e682b85e69d6aad7b542c45ccca2bf5..70211d0b187652be5336d7a4a7f0005eaaaa5d66 100644 (file)
@@ -1004,6 +1004,13 @@ static blk_status_t sd_setup_write_zeroes_cmnd(struct scsi_cmnd *cmd)
        return sd_setup_write_same10_cmnd(cmd, false);
 }
 
+static void sd_disable_write_same(struct scsi_disk *sdkp)
+{
+       sdkp->device->no_write_same = 1;
+       sdkp->max_ws_blocks = 0;
+       blk_queue_max_write_zeroes_sectors(sdkp->disk->queue, 0);
+}
+
 static void sd_config_write_same(struct scsi_disk *sdkp)
 {
        struct request_queue *q = sdkp->disk->queue;
@@ -2258,8 +2265,7 @@ static int sd_done(struct scsi_cmnd *SCpnt)
                                if (SCpnt->cmnd[1] & 8) { /* UNMAP */
                                        sd_disable_discard(sdkp);
                                } else {
-                                       sdkp->device->no_write_same = 1;
-                                       sd_config_write_same(sdkp);
+                                       sd_disable_write_same(sdkp);
                                        req->rq_flags |= RQF_QUIET;
                                }
                                break;