All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ritika Srivastava <ritika.srivastava@oracle.com>
To: linux-block@vger.kernel.org
Cc: axboe@kernel.dk, ritika.srivastava@oracle.com
Subject: [PATCH v2 2/2] block: return BLK_STS_NOTSUPP if operation is not supported
Date: Wed, 29 Jul 2020 15:47:58 -0700	[thread overview]
Message-ID: <1596062878-4238-3-git-send-email-ritika.srivastava@oracle.com> (raw)
In-Reply-To: <1596062878-4238-1-git-send-email-ritika.srivastava@oracle.com>

If WRITE_ZERO/WRITE_SAME operation is not supported by the storage,
blk_cloned_rq_check_limits() will return IO error which will cause
device-mapper to fail the paths.

Instead, if the queue limit is set to 0, return BLK_STS_NOTSUPP.
BLK_STS_NOTSUPP will be ignored by device-mapper and will not fail the
paths.

Suggested-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Ritika Srivastava <ritika.srivastava@oracle.com>
---
 block/blk-core.c | 26 +++++++++++++++++++++-----
 1 file changed, 21 insertions(+), 5 deletions(-)

diff --git a/block/blk-core.c b/block/blk-core.c
index d241ab8..a6ebfeb 100644
--- a/block/blk-core.c
+++ b/block/blk-core.c
@@ -1223,10 +1223,24 @@ blk_qc_t submit_bio(struct bio *bio)
 static blk_status_t blk_cloned_rq_check_limits(struct request_queue *q,
 				      struct request *rq)
 {
-	if (blk_rq_sectors(rq) > blk_queue_get_max_sectors(q, req_op(rq))) {
+	unsigned int queue_max_sector = blk_queue_get_max_sectors(q, req_op(rq));
+
+	if (blk_rq_sectors(rq) > queue_max_sector) {
 		printk(KERN_ERR "%s: over max size limit. (%u > %u)\n",
-			__func__, blk_rq_sectors(rq),
-			blk_queue_get_max_sectors(q, req_op(rq)));
+			__func__, blk_rq_sectors(rq), queue_max_sector);
+
+		/* If storage does not support the operation,
+		 * the following SCSI error will be returned.
+		 * Illegal Request
+		 * Invalid command operation code
+		 *
+		 * In turn device will set the corresponding queue limit to 0.
+		 *
+		 * If limit is 0, do not return IO error,
+		 * instead return operation not supported.
+		 */
+		if (queue_max_sector == 0)
+			return BLK_STS_NOTSUPP;
 		return BLK_STS_IOERR;
 	}
 
@@ -1253,8 +1267,10 @@ static blk_status_t blk_cloned_rq_check_limits(struct request_queue *q,
  */
 blk_status_t blk_insert_cloned_request(struct request_queue *q, struct request *rq)
 {
-	if (blk_cloned_rq_check_limits(q, rq))
-		return BLK_STS_IOERR;
+	blk_status_t cloned_limit_check = blk_cloned_rq_check_limits(q, rq);
+
+	if (cloned_limit_check != BLK_STS_OK)
+		return cloned_limit_check;
 
 	if (rq->rq_disk &&
 	    should_fail_request(&rq->rq_disk->part0, blk_rq_bytes(rq)))
-- 
1.8.3.1


  parent reply	other threads:[~2020-07-29 23:05 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-29 22:47 Return BLK_STS_NOTSUPP and blk_status_t from blk_cloned_rq_check_limits() Ritika Srivastava
2020-07-29 22:47 ` [PATCH 1/2] block: Return blk_status_t instead of errno codes Ritika Srivastava
2020-08-14  6:26   ` Christoph Hellwig
2020-08-26 17:03     ` Ritika Srivastava
2020-08-26 17:19       ` Jens Axboe
2020-08-26 17:23         ` Ritika Srivastava
2020-08-28 15:52           ` Ritika Srivastava
2020-08-28 15:52             ` Jens Axboe
2020-08-28 17:10               ` Ritika Srivastava
2020-08-31 15:38                 ` Jens Axboe
2020-08-31 23:02                   ` Ritika Srivastava
2020-07-29 22:47 ` Ritika Srivastava [this message]
2020-08-14  6:37   ` [PATCH v2 2/2] block: return BLK_STS_NOTSUPP if operation is not supported Christoph Hellwig
2020-08-17 18:10     ` Ritika Srivastava
2020-08-05 17:54 ` Return BLK_STS_NOTSUPP and blk_status_t from blk_cloned_rq_check_limits() Ritika Srivastava
2020-08-13 19:13   ` Ritika Srivastava

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=1596062878-4238-3-git-send-email-ritika.srivastava@oracle.com \
    --to=ritika.srivastava@oracle.com \
    --cc=axboe@kernel.dk \
    --cc=linux-block@vger.kernel.org \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.