All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] raid5: After bio_reset, it must set some parameter of struct bio.
@ 2013-05-17  7:29 majianpeng
  0 siblings, 0 replies; only message in thread
From: majianpeng @ 2013-05-17  7:29 UTC (permalink / raw)
  To: koverstreet, NeilBrown; +Cc: axboe, linux-raid

In commit 2f6db2a7073452b1, raid5 used bio_reset.But Kent Overstreet 
leak some fields of bio to set.So it will cause bugs:
[  355.746233] md/raid:md0: raid level 5 active with 3 out of 4 devices, algorithm 2
[  355.783651] ------------[ cut here ]------------
[  355.783707] kernel BUG at drivers/scsi/scsi_lib.c:1196!
[  355.783756] invalid opcode: 0000 [#1] SMP 
[  355.783846] Modules linked in: raid456 async_raid6_recov async_memcpy async_pq async_xor async_tx netconsole configfs e1000e btrfs xor raid6_pq
[  355.784208] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.10.0-rc1+ #158
[  355.784261] Hardware name: To Be Filled By O.E.M. To Be Filled By O.E.M./To be filled by O.E.M., BIOS 080015  11/09/2011
[  355.784336] task: ffffffff81c10440 ti: ffffffff81c00000 task.ti: ffffffff81c00000
[  355.784386] RIP: 0010:[<ffffffff81428fd2>]  [<ffffffff81428fd2>] scsi_setup_fs_cmnd+0x92/0xa0
[  355.784469] RSP: 0018:ffff8800bd203c48  EFLAGS: 00010046
[  355.784517] RAX: 0000000000000000 RBX: ffff880036e1a000 RCX: 0000000000000002
[  355.784571] RDX: ffffffff812afab0 RSI: ffff8800b5d75178 RDI: ffff880036e1a000
[  355.784593] RBP: ffff8800bd203c58 R08: ffff8800b5d74738 R09: 0000000000000001
[  355.784593] R10: 0000000000000000 R11: 0000000000012a00 R12: ffff8800b5d75178
[  355.784593] R13: ffff880036e1a000 R14: ffff8800b583a800 R15: 0000000000040000
[  355.784593] FS:  0000000000000000(0000) GS:ffff8800bd200000(0000) knlGS:0000000000000000
[  355.784593] CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
[  355.784593] CR2: 0000000001dfa008 CR3: 00000000b6d11000 CR4: 00000000000407f0
[  355.784593] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[  355.784593] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
[  355.784593] Stack:
[  355.784593]  ffff8800b5d75178 ffff8800b58f0000 ffff8800bd203ca8 ffffffff81439453
[  355.784593]  ffffffff821f2100 000000010000d993 ffff880000080000 ffff8800b58f0000
[  355.784593]  ffff8800b5d75178 ffffffff81c01fd8 ffffffff81c01fd8 ffff880036e1a000
[  355.784593] Call Trace:
[  355.784593]  <IRQ> 
[  355.784593]  [<ffffffff81439453>] sd_prep_fn+0xf3/0x810
[  355.784593]  [<ffffffff8129e186>] blk_peek_request+0x126/0x230
[  355.784593]  [<ffffffff814297ce>] scsi_request_fn+0x4e/0x4e0
[  355.784593]  [<ffffffff8129cce4>] ? blk_run_queue+0x24/0x50
[  355.784593]  [<ffffffff8129c773>] __blk_run_queue+0x33/0x40
[  355.784593]  [<ffffffff8129ccef>] blk_run_queue+0x2f/0x50
[  355.784593]  [<ffffffff81429361>] scsi_run_queue+0x151/0x2f0
[  355.784593]  [<ffffffff81409d97>] ? put_device+0x17/0x20
[  355.784593]  [<ffffffff814228c4>] ? __scsi_put_command+0x64/0xa0
[  355.784593]  [<ffffffff8142a852>] scsi_next_command+0x42/0x60
[  355.784593]  [<ffffffff8142a9a2>] scsi_io_completion+0xd2/0x6e0
[  355.784593]  [<ffffffff8109e6ed>] ? trace_hardirqs_on+0xd/0x10
[  355.784593]  [<ffffffff81421dcc>] scsi_finish_command+0xac/0xf0
[  355.784593]  [<ffffffff8142a753>] scsi_softirq_done+0xa3/0x140
[  355.784593]  [<ffffffff812a3aeb>] blk_done_softirq+0x7b/0x90
[  355.784593]  [<ffffffff81046970>] __do_softirq+0x100/0x280
[  355.784593]  [<ffffffff81046c95>] irq_exit+0xb5/0xc0
[  355.784593]  [<ffffffff81696443>] do_IRQ+0x63/0xe0
[  355.784593]  [<ffffffff8168c4af>] common_interrupt+0x6f/0x6f
[  355.784593]  <EOI> 
[  355.784593]  [<ffffffff8100a576>] ? default_idle+0x26/0x100
[  355.784593]  [<ffffffff8100ae56>] arch_cpu_idle+0x26/0x30
[  355.784593]  [<ffffffff8108ffae>] cpu_startup_entry+0x8e/0x270
[  355.784593]  [<ffffffff8166ba03>] rest_init+0xd3/0xe0
[  355.784593]  [<ffffffff8166b935>] ? rest_init+0x5/0xe0
[  355.784593]  [<ffffffff81ecbe1b>] start_kernel+0x3b5/0x3c2
[  355.784593]  [<ffffffff81ecb86e>] ? repair_env_string+0x5e/0x5e
[  355.784593]  [<ffffffff81ecb5a3>] x86_64_start_reservations+0x2a/0x2c
[  355.784593]  [<ffffffff81ecb671>] x86_64_start_kernel+0xcc/0xcf
[  355.784593] Code: c3 48 8b 00 48 85 c0 74 b7 48 8b 40 48 48 85 c0 74 ae 4c 89 e6 48 89 df ff d0 85 c0 74 a2 eb dc b8 02 00 00 00 0f 1f 40 00 eb d1 <0f> 0b 66 66 66 2e 0f 1f 84 00 00 00 00 00 66 66 66 66 90 55 48 
[  355.784593] RIP  [<ffffffff81428fd2>] scsi_setup_fs_cmnd+0x92/0xa0
[  355.784593]  RSP <ffff8800bd203c48>

Signed-off-by: Jianpeng Ma <majianpeng@gmail.com>
---
 drivers/md/raid5.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c
index 9359828..66314b5 100644
--- a/drivers/md/raid5.c
+++ b/drivers/md/raid5.c
@@ -642,8 +642,10 @@ static void ops_run_io(struct stripe_head *sh, struct stripe_head_state *s)
  md_sync_acct(rdev->bdev, STRIPE_SECTORS);

  set_bit(STRIPE_IO_STARTED, &sh->state);
-
  bio_reset(bi);
+
+ bi->bi_vcnt = bi->bi_max_vecs = 1;
+ bi->bi_io_vec = &(sh->dev[i].vec);
  bi->bi_bdev = rdev->bdev;
  bi->bi_rw = rw;
  bi->bi_end_io = (rw & WRITE)
@@ -663,7 +665,6 @@ static void ops_run_io(struct stripe_head *sh, struct stripe_head_state *s)
   + rdev->data_offset);
  if (test_bit(R5_ReadNoMerge, &sh->dev[i].flags))
  bi->bi_rw |= REQ_FLUSH;
-
  bi->bi_io_vec[0].bv_len = STRIPE_SIZE;
  bi->bi_io_vec[0].bv_offset = 0;
  bi->bi_size = STRIPE_SIZE;
@@ -684,6 +685,9 @@ static void ops_run_io(struct stripe_head *sh, struct stripe_head_state *s)
  set_bit(STRIPE_IO_STARTED, &sh->state);

  bio_reset(rbi);
+
+ rbi->bi_vcnt = rbi->bi_max_vecs = 1;
+ rbi->bi_io_vec = &(sh->dev[i].rvec);
  rbi->bi_bdev = rrdev->bdev;
  rbi->bi_rw = rw;
  BUG_ON(!(rw & WRITE));
-- 
1.8.3.rc1.44.gb387c77


--------------------------------------------------------------------------------

majianpeng

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2013-05-17  7:29 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-05-17  7:29 [PATCH] raid5: After bio_reset, it must set some parameter of struct bio majianpeng

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.