mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
scsi: ufs: bsg: Complete the job on error
When ufs_bsg_request() fails, it returns a non-zero status without calling
bsg_job_done(). bsg_queue_rq() then ends the request with BLK_STS_IOERR
without running bsg_complete(), leaking the job's device reference and
mapped scatterlists.
Always complete the job via bsg_job_done() and return 0, matching other BSG
transports. Requests failing with a negative errno now return it from SG_IO
with the 4-byte result in the reply, while positive status codes still
return 0 from SG_IO with the reply header.
Fixes: b13a3539eb ("scsi: ufs-bsg: complete ufs-bsg job only if no error")
Cc: stable@vger.kernel.org
Signed-off-by: Stanley Jhu <stanleyjhu@google.com>
Reviewed-by: Bean Huo <beanhuo@micron.com>
Reviewed-by: Peter Wang <peter.wang@mediatek.com>
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Link: https://patch.msgid.link/20261015001855.3450573-2-stanleyjhu@google.com
Signed-off-by: Martin K. Petersen (Oracle) <mkp@kernel.org>
This commit is contained in:
parent
cee9395acd
commit
cc0ce3fe8f
|
|
@ -195,14 +195,12 @@ static int ufs_bsg_request(struct bsg_job *job)
|
|||
ufshcd_rpm_put_sync(hba);
|
||||
kfree(buff);
|
||||
bsg_reply->result = ret;
|
||||
/* complete the job here only if no error */
|
||||
if (ret == 0) {
|
||||
if (ret == 0)
|
||||
job->reply_len = rpmb ? sizeof(struct ufs_rpmb_reply) :
|
||||
sizeof(struct ufs_bsg_reply);
|
||||
bsg_job_done(job, ret, bsg_reply->reply_payload_rcv_len);
|
||||
}
|
||||
bsg_job_done(job, ret, bsg_reply->reply_payload_rcv_len);
|
||||
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user