> -----Original Message----- > From: Jason Gunthorpe <jgg@xxxxxxxx> > Sent: Wednesday, January 23, 2019 2:17 PM > To: Leon Romanovsky <leon@xxxxxxxxxx> > Cc: Doug Ledford <dledford@xxxxxxxxxx>; Parav Pandit > <parav@xxxxxxxxxxxx>; RDMA mailing list <linux-rdma@xxxxxxxxxxxxxxx>; > Leon Romanovsky <leonro@xxxxxxxxxxxx> > Subject: Re: [PATCH rdma-next] IB/umad: Avoid additional device reference > during open()/close() > > On Tue, Jan 22, 2019 at 08:33:00AM +0200, Leon Romanovsky wrote: > > @@ -1283,8 +1278,10 @@ static void ib_umad_kill_port(struct > ib_umad_port *port) > > mutex_unlock(&port->file_mutex); > > > > cdev_device_del(&port->sm_cdev, &port->sm_dev); > > + /* balances device_initialize() */ > > put_device(&port->sm_dev); > > cdev_device_del(&port->cdev, &port->dev); > > + /* balances device_initialize() */ > > put_device(&port->dev); > > ida_free(&umad_ida, port->dev_num); > > I'm going to re-order this, the ida_free should be before the put_device. It > works OK as-is only because the caller is holding the enclosing dev structure > kref. > > cdev_device_del(&port->sm_cdev, &port->sm_dev); > cdev_device_del(&port->cdev, &port->dev); > ida_free(&umad_ida, port->dev_num); > > /* balances device_initialize() */ > put_device(&port->sm_dev); > put_device(&port->dev); > > Otherwise applied to for-next > Yes. this is better. Thanks.