Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
Pull SCSI fixes from James Bottomley: "Two fairly simple fixes. One is a regression with ipr firmware loading caused by one of the trivial patches in the last merge window which failed to strip the \n from the file name string, so now the firmware loader no longer works leading to a lot of unhappy ipr users; fix by stripping the \n. The second is a memory leak within SCSI: the BLK_PREP_INVALID state was introduced a recent fix but we forgot to account for it correctly when freeing state, resulting in memory leakage. Add the correct state freeing in scsi_prep_return()" * tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: ipr: Fix regression when loading firmware SCSI: Free resources when we return BLKPREP_INVALID
This commit is contained in:
@@ -4002,6 +4002,7 @@ static ssize_t ipr_store_update_fw(struct device *dev,
|
||||
struct ipr_sglist *sglist;
|
||||
char fname[100];
|
||||
char *src;
|
||||
char *endline;
|
||||
int result, dnld_size;
|
||||
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
@@ -4009,6 +4010,10 @@ static ssize_t ipr_store_update_fw(struct device *dev,
|
||||
|
||||
snprintf(fname, sizeof(fname), "%s", buf);
|
||||
|
||||
endline = strchr(fname, '\n');
|
||||
if (endline)
|
||||
*endline = '\0';
|
||||
|
||||
if (request_firmware(&fw_entry, fname, &ioa_cfg->pdev->dev)) {
|
||||
dev_err(&ioa_cfg->pdev->dev, "Firmware file %s not found\n", fname);
|
||||
return -EIO;
|
||||
|
||||
@@ -1344,6 +1344,7 @@ scsi_prep_return(struct request_queue *q, struct request *req, int ret)
|
||||
|
||||
switch (ret) {
|
||||
case BLKPREP_KILL:
|
||||
case BLKPREP_INVALID:
|
||||
req->errors = DID_NO_CONNECT << 16;
|
||||
/* release the command and kill it */
|
||||
if (req->special) {
|
||||
|
||||
Reference in New Issue
Block a user