Messages in this thread | | | Date | Mon, 12 Apr 2004 01:28:40 -0700 | From | Andrew Morton <> | Subject | Re: 2.6.5-mm4 |
| |
Please do not edit people out of the Cc line.
Paul P Komkoff Jr <i@stingr.net> wrote: > > Replying to Andrew Morton: > > I added a might_sleep() to generic_unplug_device(), because some drivers' > > unplug functions can sleep. > > > > It appears that either the EVMS or the udm2 patch is calling > > generic_unplug_device() under a lock. Probably spin_lock_irq(q->lock). > > can it be thisi (raid1.c):
Yes. The below locking is not correct.
> static void unplug_slaves(mddev_t *mddev) > { > conf_t *conf = mddev_to_conf(mddev); > int i; > unsigned long flags; > > spin_lock_irqsave(&conf->device_lock, flags); > for (i=0; i<mddev->raid_disks; i++) { > mdk_rdev_t *rdev = conf->mirrors[i].rdev; > if (rdev && !rdev->faulty) { > request_queue_t *r_queue = bdev_get_queue(rdev->bdev); > > if (r_queue->unplug_fn) > r_queue->unplug_fn(r_queue); > } > } > spin_unlock_irqrestore(&conf->device_lock, flags); > }
I do not know which drivers insist on sleeping in their unplug functions, but apparently they're out there. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |