lkml.org 
[lkml]   [2020]   [Jun]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.4 060/178] IB/hfi1: Fix module use count flaw due to leftover module put calls
    Date
    From: Dennis Dalessandro <dennis.dalessandro@intel.com>

    commit 822fbd37410639acdae368ea55477ddd3498651d upstream.

    When the try_module_get calls were removed from opening and closing of the
    i2c debugfs file, the corresponding module_put calls were missed. This
    results in an inaccurate module use count that requires a power cycle to
    fix.

    Fixes: 09fbca8e6240 ("IB/hfi1: No need to use try_module_get for debugfs")
    Link: https://lore.kernel.org/r/20200623203230.106975.76240.stgit@awfm-01.aw.intel.com
    Cc: <stable@vger.kernel.org>
    Reviewed-by: Kaike Wan <kaike.wan@intel.com>
    Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
    Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
    Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/infiniband/hw/hfi1/debugfs.c | 19 ++-----------------
    1 file changed, 2 insertions(+), 17 deletions(-)

    diff --git a/drivers/infiniband/hw/hfi1/debugfs.c b/drivers/infiniband/hw/hfi1/debugfs.c
    index d268bf9c42eef..c29da2f4e3396 100644
    --- a/drivers/infiniband/hw/hfi1/debugfs.c
    +++ b/drivers/infiniband/hw/hfi1/debugfs.c
    @@ -985,15 +985,10 @@ static ssize_t qsfp2_debugfs_read(struct file *file, char __user *buf,
    static int __i2c_debugfs_open(struct inode *in, struct file *fp, u32 target)
    {
    struct hfi1_pportdata *ppd;
    - int ret;

    ppd = private2ppd(fp);

    - ret = acquire_chip_resource(ppd->dd, i2c_target(target), 0);
    - if (ret) /* failed - release the module */
    - module_put(THIS_MODULE);
    -
    - return ret;
    + return acquire_chip_resource(ppd->dd, i2c_target(target), 0);
    }

    static int i2c1_debugfs_open(struct inode *in, struct file *fp)
    @@ -1013,7 +1008,6 @@ static int __i2c_debugfs_release(struct inode *in, struct file *fp, u32 target)
    ppd = private2ppd(fp);

    release_chip_resource(ppd->dd, i2c_target(target));
    - module_put(THIS_MODULE);

    return 0;
    }
    @@ -1031,18 +1025,10 @@ static int i2c2_debugfs_release(struct inode *in, struct file *fp)
    static int __qsfp_debugfs_open(struct inode *in, struct file *fp, u32 target)
    {
    struct hfi1_pportdata *ppd;
    - int ret;
    -
    - if (!try_module_get(THIS_MODULE))
    - return -ENODEV;

    ppd = private2ppd(fp);

    - ret = acquire_chip_resource(ppd->dd, i2c_target(target), 0);
    - if (ret) /* failed - release the module */
    - module_put(THIS_MODULE);
    -
    - return ret;
    + return acquire_chip_resource(ppd->dd, i2c_target(target), 0);
    }

    static int qsfp1_debugfs_open(struct inode *in, struct file *fp)
    @@ -1062,7 +1048,6 @@ static int __qsfp_debugfs_release(struct inode *in, struct file *fp, u32 target)
    ppd = private2ppd(fp);

    release_chip_resource(ppd->dd, i2c_target(target));
    - module_put(THIS_MODULE);

    return 0;
    }
    --
    2.25.1
    \
     
     \ /
      Last update: 2020-06-29 21:58    [W:7.417 / U:0.180 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site