lkml.org 
[lkml]   [2007]   [Mar]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 13/20] Fix bug 7994 sleeping function called from invalid context
    -stable review patch.  If anyone has any objections, please let us know.

    ------------------
    From: Douglas Gilbert <dougg@torque.net>

    - 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>

    ---
    drivers/scsi/scsi_debug.c | 12 +++++++++---
    1 file changed, 9 insertions(+), 3 deletions(-)

    --- a/drivers/scsi/scsi_debug.c
    +++ b/drivers/scsi/scsi_debug.c
    @@ -954,7 +954,9 @@ static int resp_inquiry(struct scsi_cmnd
    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 scs
    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(st
    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 * devInfoR
    }
    }
    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__);
    --
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2007-03-10 07:25    [W:0.022 / U:89.476 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site