Thread (49 messages) 49 messages, 4 authors, 2013-10-11

Re: [PATCH 16/22] dm: Refactor for new bio cloning/splitting

From: Mike Snitzer <hidden>
Date: 2013-10-07 00:14:14
Also in: dm-devel, linux-fsdevel, lkml
Subsystem: device-mapper (lvm), the rest · Maintainers: Alasdair Kergon, Mike Snitzer, Mikulas Patocka, Benjamin Marzinski, Linus Torvalds

On Fri, Oct 04 2013 at  1:07pm -0400,
Mike Snitzer [off-list ref] wrote:
 
With your latest fix I was able to create a thin device and format with
XFS.  Unfortunately, when I tried to run the thinp-test-suite the very
first BasicTests test (test_dd_benchmark) fails -- need to look closer
but it would seem to me the thinp saved bio_endio path isn't happy.  We
likely need an appropriately placed atomic_inc(&bio->bi_remaining); like
you did in dm-cache-target.c

------------[ cut here ]------------
kernel BUG at fs/bio.c:1722!
...
Call Trace:
 [<ffffffffa05f2ef9>] process_prepared_mapping+0x79/0x150 [dm_thin_pool]
 [<ffffffffa05f2ba7>] process_prepared+0x87/0xa0 [dm_thin_pool]
 [<ffffffffa05f58f3>] do_worker+0x33/0x60 [dm_thin_pool]
 [<ffffffff81067862>] process_one_work+0x182/0x3b0
 [<ffffffff81068c80>] worker_thread+0x120/0x3a0
 [<ffffffff81068b60>] ? manage_workers+0x160/0x160
 [<ffffffff8106eace>] kthread+0xce/0xe0
 [<ffffffff8106ea00>] ? kthread_freezable_should_stop+0x70/0x70
 [<ffffffff8152b1ac>] ret_from_fork+0x7c/0xb0
 [<ffffffff8106ea00>] ? kthread_freezable_should_stop+0x70/0x70
Code: 1f 84 00 00 00 00 00 48 8b 57 10 83 e2 01 0f 44 f1 eb cd 0f 1f 40 00 48 8b 7f 50 48 85 ff 74 dd 8b 57 44 48 8d 47 44 85 d2 7f ac <0f> 0b eb fe 0f 1f 84 00 00 00 00 00 55 48 89 e5 66 66 66 66 90 
RIP  [<ffffffff811b1464>] bio_endio+0x74/0x80
 RSP <ffff88032c5e7d48>
---[ end trace acb5a7d638591b7b ]---
Please fold this fix into your for-jens branch, thanks.  (Could be that
by the time Jens takes your immutable biovec changes we'll need to
rebase but at least it won't slip through the cracks).

---
 drivers/md/dm-thin.c |    8 ++++++--
 1 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/drivers/md/dm-thin.c b/drivers/md/dm-thin.c
index a654024..1abb4a2 100644
--- a/drivers/md/dm-thin.c
+++ b/drivers/md/dm-thin.c
@@ -611,8 +611,10 @@ static void cell_defer_no_holder(struct thin_c *tc, struct dm_bio_prison_cell *c
 
 static void process_prepared_mapping_fail(struct dm_thin_new_mapping *m)
 {
-	if (m->bio)
+	if (m->bio) {
 		m->bio->bi_end_io = m->saved_bi_end_io;
+		atomic_inc(&m->bio->bi_remaining);
+	}
 	cell_error(m->tc->pool, m->cell);
 	list_del(&m->list);
 	mempool_free(m, m->tc->pool->mapping_pool);
@@ -626,8 +628,10 @@ static void process_prepared_mapping(struct dm_thin_new_mapping *m)
 	int r;
 
 	bio = m->bio;
-	if (bio)
+	if (bio) {
 		bio->bi_end_io = m->saved_bi_end_io;
+		atomic_inc(&bio->bi_remaining);
+	}
 
 	if (m->err) {
 		cell_error(pool, m->cell);
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help