All of lore.kernel.org
 help / color / mirror / Atom feed
From: Leon Romanovsky <leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
To: Doug Ledford <dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	Leon Romanovsky <leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>,
	Yishai Hadas <yishaih-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
Subject: [rdma-rc 14/14] IB/uverbs: Fix device cleanup
Date: Mon, 31 Jul 2017 10:09:24 +0300	[thread overview]
Message-ID: <20170731070924.7193-15-leon@kernel.org> (raw)
In-Reply-To: <20170731070924.7193-1-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>

From: Yishai Hadas <yishaih-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>

Uverbs device should be cleaned up only when there is no
potential usage of.

As part of ib_uverbs_remove_one which might be triggered upon reset flow
the device reference count is decreased as expected and leave the final
cleanup to the FDs that were opened.

Current code increases reference count upon opening a new command FD and
decreases it upon closing the file. The event FD is opened internally
and rely on the command FD by taking on it a reference count.

In case that the command FD was closed and just later the event FD we
may ensure that the device resources as of srcu are still alive as they
are still in use.

Fixing the above by moving the reference count decreasing to the place
where the command FD is really freed instead of doing that when it was
just closed.

fixes: 036b10635739 ("IB/uverbs: Enable device removal when there are active user space applications")
Signed-off-by: Yishai Hadas <yishaih-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
Reviewed-by: Matan Barak <matanb-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
Reviewed-by: Jason Gunthorpe <jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
Tested-by: Jason Gunthorpe <jgunthorpe-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
Signed-off-by: Leon Romanovsky <leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
---
 drivers/infiniband/core/uverbs_main.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/infiniband/core/uverbs_main.c b/drivers/infiniband/core/uverbs_main.c
index 1ac99aec3d4e..96191e7f8c5f 100644
--- a/drivers/infiniband/core/uverbs_main.c
+++ b/drivers/infiniband/core/uverbs_main.c
@@ -250,6 +250,7 @@ void ib_uverbs_release_file(struct kref *ref)
 	if (atomic_dec_and_test(&file->device->refcount))
 		ib_uverbs_comp_dev(file->device);
 
+	kobject_put(&file->device->kobj);
 	kfree(file);
 }
 
@@ -906,7 +907,6 @@ static int ib_uverbs_open(struct inode *inode, struct file *filp)
 static int ib_uverbs_close(struct inode *inode, struct file *filp)
 {
 	struct ib_uverbs_file *file = filp->private_data;
-	struct ib_uverbs_device *dev = file->device;
 
 	mutex_lock(&file->cleanup_mutex);
 	if (file->ucontext) {
@@ -928,7 +928,6 @@ static int ib_uverbs_close(struct inode *inode, struct file *filp)
 			 ib_uverbs_release_async_event_file);
 
 	kref_put(&file->ref, ib_uverbs_release_file);
-	kobject_put(&dev->kobj);
 
 	return 0;
 }
-- 
2.13.3

--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

  parent reply	other threads:[~2017-07-31  7:09 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-31  7:09 [pull request][rdma-rc 00/14] RDMA fixes for-4.13 Leon Romanovsky
     [not found] ` <20170731070924.7193-1-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-07-31  7:09   ` [rdma-rc 01/14] RDMA/(core,ulp): Convert register/unregister event handler to be void Leon Romanovsky
     [not found]     ` <20170731070924.7193-2-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-07-31 13:03       ` Dennis Dalessandro
     [not found]         ` <67e53715-1346-c969-b59a-ca4494d3b7c4-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2017-07-31 13:07           ` Leon Romanovsky
2017-07-31 15:24       ` Doug Ledford
     [not found]         ` <1501514653.3009.6.camel-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2017-07-31 15:50           ` Leon Romanovsky
2017-07-31  7:09   ` [rdma-rc 02/14] RDMA/core: Cleanup device capability enum Leon Romanovsky
     [not found]     ` <20170731070924.7193-3-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-07-31 13:25       ` Dennis Dalessandro
2017-07-31  7:09   ` [rdma-rc 03/14] RDMA/core: Remove unimplemented node_types and node transport Leon Romanovsky
     [not found]     ` <20170731070924.7193-4-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-07-31 12:01       ` Hal Rosenstock
     [not found]         ` <2e1b38f9-ae7a-4f5e-9cac-168f1f9b56af-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org>
2017-07-31 12:18           ` Leon Romanovsky
     [not found]             ` <20170731121823.GV13672-U/DQcQFIOTAAJjI8aNfphQ@public.gmane.org>
2017-07-31 13:32               ` Dennis Dalessandro
     [not found]                 ` <63a8961c-7341-80c2-c417-67d4e6fd4702-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2017-07-31 15:35                   ` Doug Ledford
2017-07-31  7:09   ` [rdma-rc 04/14] RDMA/core: Delete BUG() from unreachable flow Leon Romanovsky
     [not found]     ` <20170731070924.7193-5-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-07-31 13:34       ` Dennis Dalessandro
2017-07-31  7:09   ` [rdma-rc 05/14] RDMA/core: Refactor get link layer wrapper Leon Romanovsky
     [not found]     ` <20170731070924.7193-6-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-07-31 14:55       ` Dennis Dalessandro
2017-07-31  7:09   ` [rdma-rc 06/14] IB/core: Fix race condition in resolving IP to MAC Leon Romanovsky
2017-07-31  7:09   ` [rdma-rc 07/14] RDMA/uverbs: Prevent leak of reserved field Leon Romanovsky
     [not found]     ` <20170731070924.7193-8-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-07-31 13:43       ` Dennis Dalessandro
2017-07-31  7:09   ` [rdma-rc 08/14] RDMA/mlx4: Avoid potential derefence warning Leon Romanovsky
     [not found]     ` <20170731070924.7193-9-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-07-31 15:11       ` Bart Van Assche
2017-07-31 16:21       ` Leon Romanovsky
     [not found]         ` <20170731162133.GB13672-U/DQcQFIOTAAJjI8aNfphQ@public.gmane.org>
2017-07-31 19:02           ` Dan Carpenter
2017-08-01  7:20             ` Leon Romanovsky
2017-07-31  7:09   ` [rdma-rc 09/14] RDMA/mlx4: Remove gfp_mask argument from acquire_group call Leon Romanovsky
     [not found]     ` <20170731070924.7193-10-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-07-31 13:46       ` Dennis Dalessandro
2017-07-31  7:09   ` [rdma-rc 10/14] RDMA/mlx5: Fix existence check for extended address vector Leon Romanovsky
2017-07-31  7:09   ` [rdma-rc 11/14] RDMA/bnxt_re: Delete unsupported modify_port function Leon Romanovsky
2017-07-31  7:09   ` [rdma-rc 12/14] RDMA/usnic: Fix remove address space warning Leon Romanovsky
2017-07-31  7:09   ` [rdma-rc 13/14] RDMA/mthca: Make explicit conversion to 64bit value Leon Romanovsky
     [not found]     ` <20170731070924.7193-14-leon-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org>
2017-07-31 15:17       ` Bart Van Assche
     [not found]         ` <1501514243.2466.5.camel-Sjgp3cTcYWE@public.gmane.org>
2017-07-31 16:16           ` Leon Romanovsky
     [not found]             ` <20170731161636.GA13672-U/DQcQFIOTAAJjI8aNfphQ@public.gmane.org>
2017-07-31 16:23               ` Bart Van Assche
     [not found]                 ` <1501518230.2466.14.camel-Sjgp3cTcYWE@public.gmane.org>
2017-07-31 16:50                   ` Leon Romanovsky
     [not found]                     ` <20170731165010.GC13672-U/DQcQFIOTAAJjI8aNfphQ@public.gmane.org>
2017-07-31 16:57                       ` Bart Van Assche
     [not found]                         ` <1501520241.2466.16.camel-Sjgp3cTcYWE@public.gmane.org>
2017-07-31 17:07                           ` Bart Van Assche
2017-07-31 17:11                           ` Leon Romanovsky
2017-07-31 17:11       ` Bart Van Assche
2017-07-31  7:09   ` Leon Romanovsky [this message]
2017-07-31 17:15   ` [pull request][rdma-rc 00/14] RDMA fixes for-4.13 Leon Romanovsky

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170731070924.7193-15-leon@kernel.org \
    --to=leon-dgejt+ai2ygdnm+yrofe0a@public.gmane.org \
    --cc=dledford-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=linux-rdma-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=yishaih-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.