diff options
author | Roland Dreier <rolandd@cisco.com> | 2009-02-22 20:14:37 -0800 |
---|---|---|
committer | Roland Dreier <rolandd@cisco.com> | 2009-02-22 20:14:37 -0800 |
commit | e538052746d570c874650a24eed89fca6e4c93dc (patch) | |
tree | 308b1a9829002328cdd91ef913a486b31b6342c2 | |
parent | 71c4512201575c7cc008b364e2e2c75cc7085c26 (diff) |
IB/ipath: Really run work in ipath_release_user_pages_on_close()
ipath_release_user_pages_on_close() just allocated a structure to
schedule work with but just returned (leaking the structure) rather than
actually doing schedule_work(). Fix the logic to what was intended.
This was spotted by the Coverity checker (CID 2700).
Signed-off-by: Roland Dreier <rolandd@cisco.com>
-rw-r--r-- | drivers/infiniband/hw/ipath/ipath_user_pages.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/infiniband/hw/ipath/ipath_user_pages.c b/drivers/infiniband/hw/ipath/ipath_user_pages.c index 0190edc8044..855911e7396 100644 --- a/drivers/infiniband/hw/ipath/ipath_user_pages.c +++ b/drivers/infiniband/hw/ipath/ipath_user_pages.c @@ -209,20 +209,20 @@ void ipath_release_user_pages_on_close(struct page **p, size_t num_pages) mm = get_task_mm(current); if (!mm) - goto bail; + return; work = kmalloc(sizeof(*work), GFP_KERNEL); if (!work) goto bail_mm; - goto bail; - INIT_WORK(&work->work, user_pages_account); work->mm = mm; work->num_pages = num_pages; + schedule_work(&work->work); + return; + bail_mm: mmput(mm); -bail: return; } |