All of lore.kernel.org
 help / color / mirror / Atom feed
From: ZhangXiaoxu <zhangxiaoxu5@huawei.com>
To: <martin.petersen@oracle.com>, <hch@infradead.org>,
	<heinzm@redhat.com>, <jdorminy@redhat.com>, <axboe@kernel.dk>,
	<snitzer@redhat.com>, <linux-block@vger.kernel.org>,
	<dm-devel@redhat.com>, <agk@redhat.com>,
	<zhangxiaoxu5@huawei.com>
Subject: [PATCH v3] block: Fix a WRITE SAME BUG_ON
Date: Wed, 20 Feb 2019 10:09:43 +0800	[thread overview]
Message-ID: <1550628583-100041-1-git-send-email-zhangxiaoxu5@huawei.com> (raw)

If the lvm is stacked by different lbs disks, when WRITE SAME on it, will bug_on:

kernel BUG at drivers/scsi/sd.c:968!
invalid opcode: 0000 [#1] SMP PTI
CPU: 11 PID: 525 Comm: kworker/11:1H Tainted: G           O      5.0.0-rc3+ #2
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.10.2-2.fc27 04/01/2014
Workqueue: kblockd blk_mq_run_work_fn
RIP: 0010:sd_init_command+0x7aa/0xdb0
Code: 30 75 00 00 c7 85 44 01 00 00 18 00 00 00 0f 85 fa 04 00 00 48 83 c4 40 48
      89 df 5b 5d 41 5c 41 5d 41 5e 41 5f e9 b6 ca fe ff <0f> 0b 41 bc 09
RSP: 0018:ffffb55f80ddbca0 EFLAGS: 00010206
RAX: 0000000000001000 RBX: ffff9ed23fb927a0 RCX: 000000000000f000
RDX: ffff9ed23f0a8400 RSI: ffff9ed27bc79800 RDI: 0000000000000000
RBP: ffff9ed23fb92680 R08: ffff9ed27c8c0000 R09: ffff9ed23fb927d8
R10: 0000000000000000 R11: fefefefefefefeff R12: ffff9ed27bc79800
R13: ffff9ed2787a0000 R14: ffff9ed27bdf3400 R15: ffff9ed23fb927a0
FS:  0000000000000000(0000) GS:ffff9ed27c8c0000(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007f6b14cf9341 CR3: 0000000069058000 CR4: 00000000000006e0
Call Trace:
 ? vp_notify+0x12/0x20
 scsi_queue_rq+0x525/0xa30
 blk_mq_dispatch_rq_list+0x8d/0x580
 ? syscall_return_via_sysret+0x10/0x7f
 ? elv_rb_del+0x1f/0x30
 ? deadline_remove_request+0x55/0xc0
 blk_mq_do_dispatch_sched+0x76/0x110
 blk_mq_sched_dispatch_requests+0xf9/0x170
 __blk_mq_run_hw_queue+0x51/0xd0
 process_one_work+0x195/0x380
 worker_thread+0x30/0x390
 ? process_one_work+0x380/0x380
 kthread+0x113/0x130
 ? kthread_park+0x90/0x90
 ret_from_fork+0x35/0x40
Modules linked in: alloc(O+)
---[ end trace dc92ddeb2e6d1fe5 ]---

The logical_block_size of the LVM is the max value of the sub disks,
it maybe different with one of the sub disk. when WRITE SAME on the
disk, it will BUG_ON when setup WRITE SAME cmd.

Close WRITE_SAME feature on the LVM if it was stacked by different
logical_block_size disk.

Signed-off-by: ZhangXiaoxu <zhangxiaoxu5@huawei.com>
---
 block/blk-settings.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/block/blk-settings.c b/block/blk-settings.c
index 3e7038e..672cd27 100644
--- a/block/blk-settings.c
+++ b/block/blk-settings.c
@@ -497,8 +497,6 @@ int blk_stack_limits(struct queue_limits *t, struct queue_limits *b,
 	t->max_sectors = min_not_zero(t->max_sectors, b->max_sectors);
 	t->max_hw_sectors = min_not_zero(t->max_hw_sectors, b->max_hw_sectors);
 	t->max_dev_sectors = min_not_zero(t->max_dev_sectors, b->max_dev_sectors);
-	t->max_write_same_sectors = min(t->max_write_same_sectors,
-					b->max_write_same_sectors);
 	t->max_write_zeroes_sectors = min(t->max_write_zeroes_sectors,
 					b->max_write_zeroes_sectors);
 	t->bounce_pfn = min_not_zero(t->bounce_pfn, b->bounce_pfn);
@@ -537,6 +535,18 @@ int blk_stack_limits(struct queue_limits *t, struct queue_limits *b,
 		}
 	}
 
+	/* If the lbs is different, disable WRITE SAME.
+	   The default value of max_write_same_sectors is UINT_MAX, and
+	   default value of logical_block_size is 512, do not apply this
+	   rule when first iteration.
+	 */
+	if (t->logical_block_size != b->logical_block_size &&
+	    t->max_write_same_sectors != UINT_MAX)
+		t->max_write_same_sectors = 0;
+	else
+		t->max_write_same_sectors = min(t->max_write_same_sectors,
+						b->max_write_same_sectors);
+
 	t->logical_block_size = max(t->logical_block_size,
 				    b->logical_block_size);
 
-- 
2.7.4


WARNING: multiple messages have this Message-ID (diff)
From: ZhangXiaoxu <zhangxiaoxu5@huawei.com>
To: martin.petersen@oracle.com, hch@infradead.org, heinzm@redhat.com,
	jdorminy@redhat.com, axboe@kernel.dk, snitzer@redhat.com,
	linux-block@vger.kernel.org, dm-devel@redhat.com, agk@redhat.com,
	zhangxiaoxu5@huawei.com
Subject: [PATCH v3] block: Fix a WRITE SAME BUG_ON
Date: Wed, 20 Feb 2019 10:09:43 +0800	[thread overview]
Message-ID: <1550628583-100041-1-git-send-email-zhangxiaoxu5@huawei.com> (raw)

If the lvm is stacked by different lbs disks, when WRITE SAME on it, will bug_on:

kernel BUG at drivers/scsi/sd.c:968!
invalid opcode: 0000 [#1] SMP PTI
CPU: 11 PID: 525 Comm: kworker/11:1H Tainted: G           O      5.0.0-rc3+ #2
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.10.2-2.fc27 04/01/2014
Workqueue: kblockd blk_mq_run_work_fn
RIP: 0010:sd_init_command+0x7aa/0xdb0
Code: 30 75 00 00 c7 85 44 01 00 00 18 00 00 00 0f 85 fa 04 00 00 48 83 c4 40 48
      89 df 5b 5d 41 5c 41 5d 41 5e 41 5f e9 b6 ca fe ff <0f> 0b 41 bc 09
RSP: 0018:ffffb55f80ddbca0 EFLAGS: 00010206
RAX: 0000000000001000 RBX: ffff9ed23fb927a0 RCX: 000000000000f000
RDX: ffff9ed23f0a8400 RSI: ffff9ed27bc79800 RDI: 0000000000000000
RBP: ffff9ed23fb92680 R08: ffff9ed27c8c0000 R09: ffff9ed23fb927d8
R10: 0000000000000000 R11: fefefefefefefeff R12: ffff9ed27bc79800
R13: ffff9ed2787a0000 R14: ffff9ed27bdf3400 R15: ffff9ed23fb927a0
FS:  0000000000000000(0000) GS:ffff9ed27c8c0000(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007f6b14cf9341 CR3: 0000000069058000 CR4: 00000000000006e0
Call Trace:
 ? vp_notify+0x12/0x20
 scsi_queue_rq+0x525/0xa30
 blk_mq_dispatch_rq_list+0x8d/0x580
 ? syscall_return_via_sysret+0x10/0x7f
 ? elv_rb_del+0x1f/0x30
 ? deadline_remove_request+0x55/0xc0
 blk_mq_do_dispatch_sched+0x76/0x110
 blk_mq_sched_dispatch_requests+0xf9/0x170
 __blk_mq_run_hw_queue+0x51/0xd0
 process_one_work+0x195/0x380
 worker_thread+0x30/0x390
 ? process_one_work+0x380/0x380
 kthread+0x113/0x130
 ? kthread_park+0x90/0x90
 ret_from_fork+0x35/0x40
Modules linked in: alloc(O+)
---[ end trace dc92ddeb2e6d1fe5 ]---

The logical_block_size of the LVM is the max value of the sub disks,
it maybe different with one of the sub disk. when WRITE SAME on the
disk, it will BUG_ON when setup WRITE SAME cmd.

Close WRITE_SAME feature on the LVM if it was stacked by different
logical_block_size disk.

Signed-off-by: ZhangXiaoxu <zhangxiaoxu5@huawei.com>
---
 block/blk-settings.c | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/block/blk-settings.c b/block/blk-settings.c
index 3e7038e..672cd27 100644
--- a/block/blk-settings.c
+++ b/block/blk-settings.c
@@ -497,8 +497,6 @@ int blk_stack_limits(struct queue_limits *t, struct queue_limits *b,
 	t->max_sectors = min_not_zero(t->max_sectors, b->max_sectors);
 	t->max_hw_sectors = min_not_zero(t->max_hw_sectors, b->max_hw_sectors);
 	t->max_dev_sectors = min_not_zero(t->max_dev_sectors, b->max_dev_sectors);
-	t->max_write_same_sectors = min(t->max_write_same_sectors,
-					b->max_write_same_sectors);
 	t->max_write_zeroes_sectors = min(t->max_write_zeroes_sectors,
 					b->max_write_zeroes_sectors);
 	t->bounce_pfn = min_not_zero(t->bounce_pfn, b->bounce_pfn);
@@ -537,6 +535,18 @@ int blk_stack_limits(struct queue_limits *t, struct queue_limits *b,
 		}
 	}
 
+	/* If the lbs is different, disable WRITE SAME.
+	   The default value of max_write_same_sectors is UINT_MAX, and
+	   default value of logical_block_size is 512, do not apply this
+	   rule when first iteration.
+	 */
+	if (t->logical_block_size != b->logical_block_size &&
+	    t->max_write_same_sectors != UINT_MAX)
+		t->max_write_same_sectors = 0;
+	else
+		t->max_write_same_sectors = min(t->max_write_same_sectors,
+						b->max_write_same_sectors);
+
 	t->logical_block_size = max(t->logical_block_size,
 				    b->logical_block_size);
 
-- 
2.7.4

             reply	other threads:[~2019-02-20  2:06 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-20  2:09 ZhangXiaoxu [this message]
2019-02-20  2:09 ` [PATCH v3] block: Fix a WRITE SAME BUG_ON ZhangXiaoxu

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=1550628583-100041-1-git-send-email-zhangxiaoxu5@huawei.com \
    --to=zhangxiaoxu5@huawei.com \
    --cc=agk@redhat.com \
    --cc=axboe@kernel.dk \
    --cc=dm-devel@redhat.com \
    --cc=hch@infradead.org \
    --cc=heinzm@redhat.com \
    --cc=jdorminy@redhat.com \
    --cc=linux-block@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    --cc=snitzer@redhat.com \
    /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.