Fix bug 7994 sleeping function called from invalid context
- addresses the reported bug (with GFP_KERNEL -> GFP_ATOMIC) - improves error checking, and - is a subset of the changes to scsi_debug in lk 2.6.21-rc* Compiled and lightly tested (in lk 2.6.21-rc2 environment). Signed-off-by: Douglas Gilbert <dougg@torque.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
7f5c005cb1
commit
ba5617decc
@@ -954,7 +954,9 @@ static int resp_inquiry(struct scsi_cmnd * scp, int target,
|
||||
int alloc_len, n, ret;
|
||||
|
||||
alloc_len = (cmd[3] << 8) + cmd[4];
|
||||
arr = kzalloc(SDEBUG_MAX_INQ_ARR_SZ, GFP_KERNEL);
|
||||
arr = kzalloc(SDEBUG_MAX_INQ_ARR_SZ, GFP_ATOMIC);
|
||||
if (! arr)
|
||||
return DID_REQUEUE << 16;
|
||||
if (devip->wlun)
|
||||
pq_pdt = 0x1e; /* present, wlun */
|
||||
else if (scsi_debug_no_lun_0 && (0 == devip->lun))
|
||||
@@ -1217,7 +1219,9 @@ static int resp_report_tgtpgs(struct scsi_cmnd * scp,
|
||||
alen = ((cmd[6] << 24) + (cmd[7] << 16) + (cmd[8] << 8)
|
||||
+ cmd[9]);
|
||||
|
||||
arr = kzalloc(SDEBUG_MAX_TGTPGS_ARR_SZ, GFP_KERNEL);
|
||||
arr = kzalloc(SDEBUG_MAX_TGTPGS_ARR_SZ, GFP_ATOMIC);
|
||||
if (! arr)
|
||||
return DID_REQUEUE << 16;
|
||||
/*
|
||||
* EVPD page 0x88 states we have two ports, one
|
||||
* real and a fake port with no device connected.
|
||||
@@ -1996,6 +2000,8 @@ static int scsi_debug_slave_configure(struct scsi_device * sdp)
|
||||
if (sdp->host->max_cmd_len != SCSI_DEBUG_MAX_CMD_LEN)
|
||||
sdp->host->max_cmd_len = SCSI_DEBUG_MAX_CMD_LEN;
|
||||
devip = devInfoReg(sdp);
|
||||
if (NULL == devip)
|
||||
return 1; /* no resources, will be marked offline */
|
||||
sdp->hostdata = devip;
|
||||
if (sdp->host->cmd_per_lun)
|
||||
scsi_adjust_queue_depth(sdp, SDEBUG_TAGGED_QUEUING,
|
||||
@@ -2044,7 +2050,7 @@ static struct sdebug_dev_info * devInfoReg(struct scsi_device * sdev)
|
||||
}
|
||||
}
|
||||
if (NULL == open_devip) { /* try and make a new one */
|
||||
open_devip = kzalloc(sizeof(*open_devip),GFP_KERNEL);
|
||||
open_devip = kzalloc(sizeof(*open_devip),GFP_ATOMIC);
|
||||
if (NULL == open_devip) {
|
||||
printk(KERN_ERR "%s: out of memory at line %d\n",
|
||||
__FUNCTION__, __LINE__);
|
||||
|
||||
Reference in New Issue
Block a user