bfa: allocate memory with GFP_ATOMIC in spinlock context
authorAlexey Khoroshilov <khoroshilov@ispras.ru>
Fri, 18 Apr 2014 07:58:42 +0000 (00:58 -0700)
committerChristoph Hellwig <hch@lst.de>
Mon, 19 May 2014 17:12:22 +0000 (19:12 +0200)
bfa_fcb_pbc_vport_create() is called only from bfa_fcs_pbc_vport_init(),
that is called only from bfad_drv_start() with bfad_lock spinlock held.
So the patch replaces GFP_KERNEL with GFP_ATOMIC to avoid
sleeping in atomic spinlock context.

Found by Linux Driver Verification project (linuxtesting.org).

Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
Acked-by: Anil Gurumurthy <anil.gurumurthy@qlogic.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
drivers/scsi/bfa/bfad.c

index cc0fbcdc5192a81d8a7a23038a3f42d7a990ecaf..7593b7c1d3367e81a5a323cf5feb7805e1846620 100644 (file)
@@ -507,7 +507,7 @@ bfa_fcb_pbc_vport_create(struct bfad_s *bfad, struct bfi_pbc_vport_s pbc_vport)
        struct bfad_vport_s   *vport;
        int rc;
 
-       vport = kzalloc(sizeof(struct bfad_vport_s), GFP_KERNEL);
+       vport = kzalloc(sizeof(struct bfad_vport_s), GFP_ATOMIC);
        if (!vport) {
                bfa_trc(bfad, 0);
                return;