[SCSI] sg: fix bio leak with a detached device
authorFUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Thu, 22 Jul 2010 00:36:51 +0000 (09:36 +0900)
committerJames Bottomley <James.Bottomley@suse.de>
Wed, 28 Jul 2010 14:06:05 +0000 (09:06 -0500)
After blk_rq_map_user is successful, if we find that a device is
unavailable (was detached), we must call blk_end_request_all to free
bio(s) before blk_rq_unmap_user and blk_put_request.

Reported-by: "Dailey, Nate" <Nate.Dailey@stratus.com>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Tested-by: "Dailey, Nate" <Nate.Dailey@stratus.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
drivers/scsi/sg.c

index ef752b2..d454909 100644 (file)
@@ -729,6 +729,8 @@ sg_common_write(Sg_fd * sfp, Sg_request * srp,
                return k;       /* probably out of space --> ENOMEM */
        }
        if (sdp->detached) {
+               if (srp->bio)
+                       blk_end_request_all(srp->rq, -EIO);
                sg_finish_rem_req(srp);
                return -ENODEV;
        }