[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH] Sleeping with spinlock held


  • To: xen-devel@xxxxxxxxxxxxxxxxxxx
  • From: Glauber de Oliveira Costa <gcosta@xxxxxxxxxx>
  • Date: Mon, 9 Oct 2006 14:22:06 -0300
  • Delivery-date: Tue, 10 Oct 2006 02:15:47 -0700
  • List-id: Xen developer discussion <xen-devel.lists.xensource.com>

Hi,

In drivers/xen/blkfront/blkfront.c, flush_scheduled_work(), that might
sleep, is being called with a spinlock held, thus triggering a BUG.
I think it's safe to just poke it out from the locked region, as it
seems to me we won't be receiving any more work at this time.

In case you agree, I'm attaching a simple patch that fix this.

-- 
Glauber de Oliveira Costa
Red Hat Inc.
"Free as in Freedom"
--- linux-2.6.18-orig/drivers/xen/blkfront//blkfront.c.orig     2006-10-07 
10:28:25.000000000 -0400
+++ linux-2.6.18-orig/drivers/xen/blkfront//blkfront.c  2006-10-07 
10:27:58.000000000 -0400
@@ -355,8 +355,8 @@ static void blkfront_closing(struct xenb
        blk_stop_queue(info->rq);
        /* No more gnttab callback work. */
        gnttab_cancel_free_callback(&info->callback);
-       flush_scheduled_work();
        spin_unlock_irqrestore(&blkif_io_lock, flags);
+       flush_scheduled_work();
 
        xlvbd_del(info);
 
@@ -714,8 +714,8 @@ static void blkif_free(struct blkfront_i
                blk_stop_queue(info->rq);
        /* No more gnttab callback work. */
        gnttab_cancel_free_callback(&info->callback);
-       flush_scheduled_work();
        spin_unlock_irq(&blkif_io_lock);
+       flush_scheduled_work();
 
        /* Free resources associated with old device channel. */
        if (info->ring_ref != GRANT_INVALID_REF) {
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.