lkml.org 
[lkml]   [2018]   [Apr]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL for 3.18 051/101] scsi: sun_esp: fix device reference leaks
    Date
    From: Johan Hovold <johan@kernel.org>

    [ Upstream commit f62f9ffdb5ef683ef8cffb43932fa72cc3713e94 ]

    Make sure to drop the reference to the dma device taken by
    of_find_device_by_node() on probe errors and on driver unbind.

    Fixes: 334ae614772b ("sparc: Kill SBUS DVMA layer.")
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    ---
    drivers/scsi/sun_esp.c | 9 ++++++++-
    1 file changed, 8 insertions(+), 1 deletion(-)

    diff --git a/drivers/scsi/sun_esp.c b/drivers/scsi/sun_esp.c
    index f2e68459f7ea..6585d75bf732 100644
    --- a/drivers/scsi/sun_esp.c
    +++ b/drivers/scsi/sun_esp.c
    @@ -566,6 +566,7 @@ static int esp_sbus_probe(struct platform_device *op)
    struct device_node *dp = op->dev.of_node;
    struct platform_device *dma_of = NULL;
    int hme = 0;
    + int ret;

    if (dp->parent &&
    (!strcmp(dp->parent->name, "espdma") ||
    @@ -580,7 +581,11 @@ static int esp_sbus_probe(struct platform_device *op)
    if (!dma_of)
    return -ENODEV;

    - return esp_sbus_probe_one(op, dma_of, hme);
    + ret = esp_sbus_probe_one(op, dma_of, hme);
    + if (ret)
    + put_device(&dma_of->dev);
    +
    + return ret;
    }

    static int esp_sbus_remove(struct platform_device *op)
    @@ -613,6 +618,8 @@ static int esp_sbus_remove(struct platform_device *op)

    dev_set_drvdata(&op->dev, NULL);

    + put_device(&dma_of->dev);
    +
    return 0;
    }

    --
    2.15.1
    \
     
     \ /
      Last update: 2018-04-09 02:55    [W:4.276 / U:0.044 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site