]> www.infradead.org Git - users/jedix/linux-maple.git/commit
sparc64: kernel panic -- vds_bh_reset
authorBijan Mottahedeh <bijan.mottahedeh@oracle.com>
Thu, 5 May 2016 09:10:45 +0000 (02:10 -0700)
committerAllen Pais <allen.pais@oracle.com>
Thu, 15 Sep 2016 06:35:18 +0000 (12:05 +0530)
commit199085e7e27afdd156bd137f60b354c61c34bba8
tree21a98ce82ee8cc2936debd3faa2e87dc8ffde99a
parent16de51f56703ceeb460b7d552706431c55db73a5
sparc64: kernel panic -- vds_bh_reset

Orabug: 23199936

The panic is an assertion failure in fs/buffer.c:1269

static inline void check_irqs_on(void)
{
         *** BUG_ON(irqs_disabled()); ***
}

The vds reset path calls the backend fini routine which eventually calls
the file close interface:

         vds_vio_lock(vio, flags);
         vds_be_fini(port);

vds_vio_lock() grabs a spin lock and disables local irqs and thus
the eventual assertion failure.

The fix is to add a new r/w mutex to protect backend state and move the
vds_vio_lock() call after vds_be_fini().

Signed-off-by: Bijan Mottahedeh <bijan.mottahedeh@oracle.com>
Reviewed-by: Liam Merwick <Liam.Merwick@oracle.com>
(cherry picked from commit 6e33112afcdd654ada7c9414a1c4d83278533911)
(cherry picked from commit e62908110662f009f2449df5faae496ac43a1d65)
Signed-off-by: Allen Pais <allen.pais@oracle.com>
drivers/block/vds/vds.h
drivers/block/vds/vds_io.c
drivers/block/vds/vds_main.c