]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
xen/blkback: don't use xen_blkif_get() in xen-blkback kthread
authorJuergen Gross <jgross@suse.com>
Thu, 18 May 2017 15:28:49 +0000 (17:28 +0200)
committerChuck Anderson <chuck.anderson@oracle.com>
Wed, 13 Sep 2017 04:38:02 +0000 (21:38 -0700)
There is no need to use xen_blkif_get()/xen_blkif_put() in the kthread
of xen-blkback. Thread stopping is synchronous and using the blkif
reference counting in the kthread will avoid to ever let the reference
count drop to zero at the end of an I/O running concurrent to
disconnecting and multiple rings.

Setting ring->xenblkd to NULL after stopping the kthread isn't needed
as the kthread does this already.

Signed-off-by: Juergen Gross <jgross@suse.com>
Tested-by: Steven Haigh <netwiz@crc.id.au>
Acked-by: Roger Pau Monné <roger.pau@citrix.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
OraBug: 26662731

(cherry picked from commit a24fa22ce22ae302b3bf8f7008896d52d5d57b8d)
Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Reviewed-by: Joao Martins <joao.m.martins@oracle.com>
drivers/block/xen-blkback/blkback.c
drivers/block/xen-blkback/xenbus.c

index 83ab268701962f6dc53462b6cf3750d4c8b8b2f7..1bf143ee7b52073a3020d7f90a513a0805444a10 100644 (file)
@@ -609,8 +609,6 @@ int xen_blkif_schedule(void *arg)
        unsigned long timeout;
        int ret;
 
-       xen_blkif_get(blkif);
-
        set_freezable();
        while (!kthread_should_stop()) {
                if (try_to_freeze())
@@ -665,7 +663,6 @@ purge_gnt_list:
                print_stats(ring);
 
        ring->xenblkd = NULL;
-       xen_blkif_put(blkif);
 
        return 0;
 }
index abb407b7366f780839462081205f286755412fd2..01ad2ca61760790eaedae883e93e7e3cb983272e 100644 (file)
@@ -252,7 +252,6 @@ static int xen_blkif_disconnect(struct xen_blkif *blkif)
                if (ring->xenblkd) {
                        kthread_stop(ring->xenblkd);
                        wake_up(&ring->shutdown_wq);
-                       ring->xenblkd = NULL;
                }
 
                /* The above kthread_stop() guarantees that at this point we