All of lore.kernel.org
 help / color / mirror / Atom feed
* dm-thinp bug
@ 2011-04-26 18:47 Christoph Hellwig
  2011-04-27  8:27 ` Joe Thornber
  2011-04-27  9:08 ` Joe Thornber
  0 siblings, 2 replies; 7+ messages in thread
From: Christoph Hellwig @ 2011-04-26 18:47 UTC (permalink / raw)
  To: dm-devel; +Cc: ejt

I can reproduce a bug in virtio triggered by running under dm-thinp by
just copying lots of files from my home directory into a freshly created
filesystem on dm-thinp.

The table setup I use for the thinly provisoned volume is:

0 73400320 thin-prov /dev/vdc1 /dev/vdc2 1048576 32

The virtio bug on says that it gets more segments than it allows to
higher layers.

[ 1944.721745] ------------[ cut here ]------------
[ 1944.724771] kernel BUG at /home/hch/work/linux-2.6/drivers/block/virtio_blk.c:178!
[ 1944.725511] invalid opcode: 0000 [#1] SMP 
[ 1944.725511] last sysfs file: /sys/devices/virtual/block/dm-0/dm/name
[ 1944.725511] Modules linked in:
[ 1944.725511] 
[ 1944.725511] Pid: 0, comm: swapper Not tainted 2.6.37+ #95 /Bochs
[ 1944.725511] EIP: 0060:[<c06d6808>] EFLAGS: 00010002 CPU: 0
[ 1944.725511] EIP is at do_virtblk_request+0x378/0x3a0
[ 1944.725511] EAX: 00000081 EBX: f5df7980 ECX: 00000000 EDX: 00000000
[ 1944.725511] ESI: f5dbf000 EDI: f5988670 EBP: f6409f6c ESP: f6409f28
[ 1944.725511]  DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
[ 1944.725511] Process swapper (pid: 0, ti=f6408000 task=c0d30ee0 task.ti=c0d1c000)
[ 1944.725511] Stack:
[ 1944.725511]  00000001 f5df7980 00000020 f5dbf4d8 f5df79ac f5dbf010 f5dbf020 00000004
[ 1944.725511]  f5c75bf0 0000003d f5dbf034 00000001 f77dda00 00000001 f5c75bf0 f5c75da8
[ 1944.725511]  f6409f94 f6409f7c c063b055 f5c75bf0 f5dbf000 f6409f88 c063b215 00000000
[ 1944.725511] Call Trace:
[ 1944.725511]  [<c063b055>] __blk_run_queue+0x65/0x120
[ 1944.725511]  [<c063b215>] blk_start_queue+0x35/0x70
[ 1944.725511]  [<c06d68fe>] blk_done+0xce/0xe0
[ 1944.725511]  [<c06a1594>] vring_interrupt+0x24/0x40
[ 1944.725511]  [<c01ad594>] handle_IRQ_event+0x44/0x150
[ 1944.725511]  [<c01ad594>] ? handle_IRQ_event+0x44/0x150
[ 1944.725511]  [<c01b0884>] ? move_native_irq+0x14/0x50
[ 1944.725511]  [<c01af42b>] handle_edge_irq+0x9b/0x130
[ 1944.725511]  [<c01af53c>] ? handle_fasteoi_irq+0x7c/0xc0
[ 1944.725511]  [<c01af390>] ? handle_edge_irq+0x0/0x130
[ 1944.725511]  <IRQ> 
[ 1944.725511]  [<c01377ed>] ? do_IRQ+0x3d/0xb0
[ 1944.725511]  [<c016f136>] ? irq_exit+0x56/0x70
[ 1944.725511]  [<c014c266>] ? smp_apic_timer_interrupt+0x56/0x90
[ 1944.725511]  [<c0136aa9>] ? common_interrupt+0x29/0x30
[ 1944.725511]  [<c0153525>] ? native_safe_halt+0x5/0x10
[ 1944.725511]  [<c013d493>] ? default_idle+0x73/0x170
[ 1944.725511]  [<c01353ea>] ? cpu_idle+0x4a/0x80
[ 1944.725511]  [<c09810d8>] ? rest_init+0x58/0x60
[ 1944.725511]  [<c0d858e3>] ? start_kernel+0x2e5/0x2eb
[ 1944.725511]  [<c0d85428>] ? unknown_bootoption+0x0/0x1a0
[ 1944.725511]  [<c0d850e0>] ? i386_start_kernel+0xe0/0xe8

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: dm-thinp bug
  2011-04-26 18:47 dm-thinp bug Christoph Hellwig
@ 2011-04-27  8:27 ` Joe Thornber
  2011-04-27  8:39   ` Christoph Hellwig
  2011-04-27  9:08 ` Joe Thornber
  1 sibling, 1 reply; 7+ messages in thread
From: Joe Thornber @ 2011-04-27  8:27 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: dm-devel, ejt

On Tue, 2011-04-26 at 14:47 -0400, Christoph Hellwig wrote:
> I can reproduce a bug in virtio triggered by running under dm-thinp by
> just copying lots of files from my home directory into a freshly created
> filesystem on dm-thinp.

Finally someone has tried using it!  I'll look into this today.

- Joe

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: dm-thinp bug
  2011-04-27  8:27 ` Joe Thornber
@ 2011-04-27  8:39   ` Christoph Hellwig
  2011-04-27  9:23     ` Joe Thornber
  0 siblings, 1 reply; 7+ messages in thread
From: Christoph Hellwig @ 2011-04-27  8:39 UTC (permalink / raw)
  To: Joe Thornber; +Cc: Christoph Hellwig, dm-devel, ejt

On Wed, Apr 27, 2011 at 09:27:37AM +0100, Joe Thornber wrote:
> On Tue, 2011-04-26 at 14:47 -0400, Christoph Hellwig wrote:
> > I can reproduce a bug in virtio triggered by running under dm-thinp by
> > just copying lots of files from my home directory into a freshly created
> > filesystem on dm-thinp.
> 
> Finally someone has tried using it!  I'll look into this today.

I actually used the earlier version you posted and didn't reproduce it
there.  I have a gut feeling it's related to barriers, as I probably
just did a basic ext3 test back then.

One thing that springs to mind is that both the thinp and multisnap
targets don't appear to support empty barriers (that is REQ_FLUSH
without a payload), because they don't set ti->num_flush_requests, but
I'm not sure that's related.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: dm-thinp bug
  2011-04-26 18:47 dm-thinp bug Christoph Hellwig
  2011-04-27  8:27 ` Joe Thornber
@ 2011-04-27  9:08 ` Joe Thornber
  2011-04-27  9:32   ` Christoph Hellwig
  1 sibling, 1 reply; 7+ messages in thread
From: Joe Thornber @ 2011-04-27  9:08 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: dm-devel, ejt

On Tue, 2011-04-26 at 14:47 -0400, Christoph Hellwig wrote:
> The virtio bug on says that it gets more segments than it allows to
> higher layers. 

I think this is simply because I omitted the iterate_devices callback in
the thinp target.

I'll try and find time to test this patch later this week.
Alternatively you could just switch to multisnap which already has this
in.

- Joe



diff --git a/drivers/md/dm-thin-prov.c b/drivers/md/dm-thin-prov.c
index 4d382c8..054b4f9 100644
--- a/drivers/md/dm-thin-prov.c
+++ b/drivers/md/dm-thin-prov.c
@@ -643,6 +643,14 @@ thinp_io_hints(struct dm_target *ti, struct queue_limits *limits)
 	blk_limits_io_opt(limits, data_dev_block_size(tc));
 }
 
+static int thinp_iterate_devices(struct dm_target *ti,
+				 iterate_devices_callout_fn fn,
+				 void *data)
+{
+	struct thinp_c *tc = ti->private;
+	return fn(ti, tc->data_dev, 0, tc->data_size << tc->block_shift, data);
+}
+
 /* Thinp pool control target interface. */
 static struct target_type thinp_target = {
 	.name = "thin-prov",
@@ -658,6 +666,7 @@ static struct target_type thinp_target = {
 	.status = thinp_status,
 	.merge = thinp_bvec_merge,
 	.io_hints = thinp_io_hints,
+	.iterate_devices = thinp_iterate_devices,
 };
 
 static int __init dm_thinp_init(void)

^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: dm-thinp bug
  2011-04-27  8:39   ` Christoph Hellwig
@ 2011-04-27  9:23     ` Joe Thornber
  0 siblings, 0 replies; 7+ messages in thread
From: Joe Thornber @ 2011-04-27  9:23 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: dm-devel, ejt

On Wed, 2011-04-27 at 04:39 -0400, Christoph Hellwig wrote:
> On Wed, Apr 27, 2011 at 09:27:37AM +0100, Joe Thornber wrote:
> > On Tue, 2011-04-26 at 14:47 -0400, Christoph Hellwig wrote:
> > > I can reproduce a bug in virtio triggered by running under dm-thinp by
> > > just copying lots of files from my home directory into a freshly created
> > > filesystem on dm-thinp.
> > 
> > Finally someone has tried using it!  I'll look into this today.
> 
> I actually used the earlier version you posted and didn't reproduce it
> there.  I have a gut feeling it's related to barriers, as I probably
> just did a basic ext3 test back then.

I hope this isn't the case.

> 
> One thing that springs to mind is that both the thinp and multisnap
> targets don't appear to support empty barriers (that is REQ_FLUSH
> without a payload), because they don't set ti->num_flush_requests, but
> I'm not sure that's related.

Fixed in thinp and multisnap public repos.

- Joe

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: dm-thinp bug
  2011-04-27  9:08 ` Joe Thornber
@ 2011-04-27  9:32   ` Christoph Hellwig
  2011-04-27  9:52     ` Joe Thornber
  0 siblings, 1 reply; 7+ messages in thread
From: Christoph Hellwig @ 2011-04-27  9:32 UTC (permalink / raw)
  To: Joe Thornber; +Cc: Christoph Hellwig, dm-devel, ejt

On Wed, Apr 27, 2011 at 10:08:59AM +0100, Joe Thornber wrote:
> I think this is simply because I omitted the iterate_devices callback in
> the thinp target.
> 
> I'll try and find time to test this patch later this week.

This patch already creashes when creating the table:

qemu1:~# dmsetup create thin-volume table.txt 
[   15.186662] BUG: unable to handle kernel NULL pointer dereference at
00000010
[   15.189266] IP: [<c0863b1f>]
thinp_metadata_get_data_block_size+0xf/0x50
[   15.189266] *pde = 00000000 
[   15.189266] Oops: 0000 [#1] SMP 
[   15.189266] last sysfs file: /sys/devices/virtual/block/dm-0/removable
[   15.189266] Modules linked in:
[   15.189266] 
[   15.189266] Pid: 2027, comm: dmsetup Not tainted 2.6.37+ #99 /Bochs
[   15.189266] EIP: 0060:[<c0863b1f>] EFLAGS: 00010292 CPU: 0
[   15.189266] EIP is at thinp_metadata_get_data_block_size+0xf/0x50
[   15.189266] EAX: 00000000 EBX: 00000000 ECX: 00000200 EDX: f5f33da8
[   15.189266] ESI: f5a40140 EDI: c0862ba0 EBP: f5f33da0 ESP: f5f33d98
[   15.189266]  DS: 007b ES: 007b FS: 00d8 GS: 0033 SS: 0068
[   15.189266] Process dmsetup (pid: 2027, ti=f5f32000 task=f6616040 task.ti=f5f32000)
[   15.189266] Stack:
[   15.189266]  f5f33e04 f5a40140 f5f33db0 c0863940 09200000 00000000 f5f33dc0 c0863982
[   15.189266]  f8522040 00000000 f5f33e4c c084d864 f5f33de4 c015db89 00000000 00000000
[   15.189266]  00000000 f6802b40 f58cb9c0 f5f33e08 c017fed1 00000000 00000000 f5f33e64
[   15.189266] Call Trace:
[   15.189266]  [<c0863940>] data_dev_block_size+0x10/0x30
[   15.189266]  [<c0863982>] thinp_io_hints+0x22/0x40
[   15.189266]  [<c084d864>] dm_calculate_queue_limits+0xa4/0x140
[   15.189266]  [<c015db89>] ? complete+0x49/0x60
[   15.189266]  [<c017fed1>] ? flush_workqueue_prep_cwqs+0x71/0x1f0
[   15.189266]  [<c084badb>] dm_swap_table+0x4b/0x1c0
[   15.189266]  [<c018585c>] ? remove_wait_queue+0x3c/0x50
[   15.189266]  [<c084ffa8>] dev_suspend+0xe8/0x1f0
[   15.189266]  [<c06535de>] ? copy_to_user+0x2e/0x50
[   15.189266]  [<c0850bbb>] dm_ctl_ioctl+0x16b/0x210
[   15.189266]  [<c01edc93>] ? __pte_alloc+0x93/0xb0
[   15.189266]  [<c084fec0>] ? dev_suspend+0x0/0x1f0
[   15.189266]  [<c0850a50>] ? dm_ctl_ioctl+0x0/0x210
[   15.189266]  [<c02146c9>] do_vfs_ioctl+0x79/0x580
[   15.189266]  [<c064a9fd>] ? kobject_put+0x1d/0x50
[   15.189266]  [<c021821a>] ? dput+0x1a/0x230
[   15.189266]  [<c021e220>] ? mntput_no_expire+0x20/0xf0
[   15.189266]  [<c021e303>] ? mntput+0x13/0x20
[   15.189266]  [<c0207b4d>] ? fput+0x12d/0x1d0
[   15.189266]  [<c0608470>] ? sys_ipc+0x80/0x220
[   15.189266]  [<c0214c09>] sys_ioctl+0x39/0x70
[   15.189266]  [<c099dac9>] syscall_call+0x7/0xb

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: dm-thinp bug
  2011-04-27  9:32   ` Christoph Hellwig
@ 2011-04-27  9:52     ` Joe Thornber
  0 siblings, 0 replies; 7+ messages in thread
From: Joe Thornber @ 2011-04-27  9:52 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: dm-devel, ejt

On Wed, 2011-04-27 at 05:32 -0400, Christoph Hellwig wrote:
> 
> This patch already creashes when creating the table: 

Sigh, it's revealed a bug in io_hints, which isn't ever run if there's
no iterate_devices callback.

The patch below has been regression tested, but not tried above a virtio
device.  It's been pushed too.

- Joe



diff --git a/drivers/md/dm-thin-prov.c b/drivers/md/dm-thin-prov.c
index 6ac802e..a168ee6 100644
--- a/drivers/md/dm-thin-prov.c
+++ b/drivers/md/dm-thin-prov.c
@@ -641,7 +641,15 @@ thinp_io_hints(struct dm_target *ti, struct
queue_limits *limits)
        struct thinp_c *tc = ti->private;
 
        blk_limits_io_min(limits, 0);
-       blk_limits_io_opt(limits, data_dev_block_size(tc));
+       blk_limits_io_opt(limits, tc->block_size << tc->block_shift);
+}
+
+static int thinp_iterate_devices(struct dm_target *ti,
+                                iterate_devices_callout_fn fn,
+                                void *data)
+{
+       struct thinp_c *tc = ti->private;
+       return fn(ti, tc->data_dev, 0, tc->data_size << tc->block_shift,
data);
 }
 
 /* Thinp pool control target interface. */
@@ -659,6 +667,7 @@ static struct target_type thinp_target = {
        .status = thinp_status,
        .merge = thinp_bvec_merge,
        .io_hints = thinp_io_hints,
+       .iterate_devices = thinp_iterate_devices,
 };
 
 static int __init dm_thinp_init(void)

^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2011-04-27  9:52 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-04-26 18:47 dm-thinp bug Christoph Hellwig
2011-04-27  8:27 ` Joe Thornber
2011-04-27  8:39   ` Christoph Hellwig
2011-04-27  9:23     ` Joe Thornber
2011-04-27  9:08 ` Joe Thornber
2011-04-27  9:32   ` Christoph Hellwig
2011-04-27  9:52     ` Joe Thornber

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.