All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sebastian Ott <sebott@linux.vnet.ibm.com>
To: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Alan Stern <stern@rowland.harvard.edu>,
	Joerg Roedel <joerg.roedel@amd.com>,
	Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>,
	Michael Buesch <m@bues.ch>,
	Dmitry Torokhov <dmitry.torokhov@gmail.com>,
	Kernel development list <linux-kernel@vger.kernel.org>
Subject: Re: Incorrect uses of get_driver()/put_driver()
Date: Tue, 10 Jan 2012 11:21:43 +0100 (CET)	[thread overview]
Message-ID: <alpine.LFD.2.02.1201101119230.1750@c4eb> (raw)
In-Reply-To: <20120110100541.38a3940f@de.ibm.com>



On Tue, 10 Jan 2012, Martin Schwidefsky wrote:

> On Mon, 9 Jan 2012 12:35:09 -0500 (EST)
> Alan Stern <stern@rowland.harvard.edu> wrote:
> 
> > drivers/s390/cio/device.c:1681:       drv = get_driver(&cdrv->driver);
> > drivers/s390/cio/device.c:1687:       put_driver(drv);
> > 
> > Martin, these calls seem to be useless.  The calls in ccwgroup.c are 
> > definitely useless; there's no reason to take a reference to a driver 
> > while it's being unregistered, since it can't go away until the 
> > unregistration is finished.
> 
> The get_driver/put_driver in ccwgroup.c are obviously useless, the caller
> passed ccwgroup_driver_unregister a ccwgroup_driver reference.
> I am not so sure about the code in device.c. get_ccwdev_by_busid() gets
> used e.g. by vmur like this:
> 
> static struct ccw_driver ur_driver = { .. };
> 
> static struct urdev *urdev_get_from_devno(u16 devno)
> {
> 	..
> 	sprintf(bus_id, "0.0.%04x", devno);
>         cdev = get_ccwdev_by_busid(&ur_driver, bus_id);
> 	..
> }
> 
> static int ur_open(struct inode *inode, struct file *file)
> {
> 	..
> 	urd = urdev_get_from_devno(devno);
> 	..
> }
> 
> For vmur we should be safe by the fact that ur_open is only possible if
> a try_module_get has been successful and the ccw_driver is unregistered
> only in the module exit function. But we have to check if this is true
> for all users of the get_ccwdev_by_busid() function.

Done.
[PATCH] cio: remove {get,put}_driver

Remove useless {get,put}_driver - the caller of the functions
has to ensure valid driver pointers.

Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
---
 drivers/s390/cio/ccwgroup.c |    2 --
 drivers/s390/cio/device.c   |    8 +-------
 2 files changed, 1 insertion(+), 9 deletions(-)

--- a/drivers/s390/cio/ccwgroup.c
+++ b/drivers/s390/cio/ccwgroup.c
@@ -580,7 +580,6 @@ void ccwgroup_driver_unregister(struct c
 	struct device *dev;
 
 	/* We don't want ccwgroup devices to live longer than their driver. */
-	get_driver(&cdriver->driver);
 	while ((dev = driver_find_device(&cdriver->driver, NULL, NULL,
 					 __ccwgroup_match_all))) {
 		struct ccwgroup_device *gdev = to_ccwgroupdev(dev);
@@ -592,7 +591,6 @@ void ccwgroup_driver_unregister(struct c
 		mutex_unlock(&gdev->reg_mutex);
 		put_device(dev);
 	}
-	put_driver(&cdriver->driver);
 	driver_unregister(&cdriver->driver);
 }
 EXPORT_SYMBOL(ccwgroup_driver_unregister);
--- a/drivers/s390/cio/device.c
+++ b/drivers/s390/cio/device.c
@@ -1676,15 +1676,9 @@ struct ccw_device *get_ccwdev_by_busid(s
 				       const char *bus_id)
 {
 	struct device *dev;
-	struct device_driver *drv;
 
-	drv = get_driver(&cdrv->driver);
-	if (!drv)
-		return NULL;
-
-	dev = driver_find_device(drv, NULL, (void *)bus_id,
+	dev = driver_find_device(&cdrv->driver, NULL, (void *)bus_id,
 				 __ccwdev_check_busid);
-	put_driver(drv);
 
 	return dev ? to_ccwdev(dev) : NULL;
 }



> 
> -- 
> blue skies,
>    Martin.
> 
> "Reality continues to ruin my life." - Calvin.
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
> 
> 


  parent reply	other threads:[~2012-01-10 10:22 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-01-05 16:31 Problems with get_driver() and driver_attach() (and new_id too) Alan Stern
2012-01-05 18:01 ` Dmitry Torokhov
2012-01-05 18:55   ` Alan Stern
2012-01-05 20:05     ` Dmitry Torokhov
2012-01-05 20:48       ` Alan Stern
2012-01-05 23:17         ` Greg KH
2012-01-06 14:42           ` Alan Stern
2012-01-06 15:42           ` Alan Stern
2012-01-06 20:29       ` Alan Stern
2012-01-09  8:48         ` Dmitry Torokhov
2012-01-09 16:37           ` Alan Stern
2012-01-09 16:50             ` Dmitry Torokhov
2012-01-09 17:01               ` Alan Stern
2012-01-09 17:05             ` Dmitry Torokhov
2012-01-09 17:35             ` Incorrect uses of get_driver()/put_driver() Alan Stern
2012-01-09 17:48               ` Konrad Rzeszutek Wilk
2012-01-09 18:20                 ` Dmitry Torokhov
2012-01-09 18:34                   ` Konrad Rzeszutek Wilk
2012-01-09 18:49                     ` Dmitry Torokhov
2012-01-09 19:36                       ` Alan Stern
2012-01-09 18:03               ` Michael Büsch
2012-01-09 18:14                 ` Dmitry Torokhov
2012-01-09 19:48                   ` Alan Stern
2012-01-09 20:07                     ` Michael Büsch
2012-01-09 22:44                       ` Alan Stern
2012-01-09 23:05                         ` Michael Büsch
2012-01-09 18:04               ` Joerg Roedel
2012-01-10  9:05               ` Martin Schwidefsky
2012-01-10  9:20                 ` Dmitry Torokhov
2012-01-10 10:03                   ` Martin Schwidefsky
2012-01-10 10:18                   ` Sebastian Ott
2012-01-10 10:21                 ` Sebastian Ott [this message]
2012-01-10 20:32                   ` Alan Stern

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=alpine.LFD.2.02.1201101119230.1750@c4eb \
    --to=sebott@linux.vnet.ibm.com \
    --cc=dmitry.torokhov@gmail.com \
    --cc=joerg.roedel@amd.com \
    --cc=konrad.wilk@oracle.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=m@bues.ch \
    --cc=schwidefsky@de.ibm.com \
    --cc=stern@rowland.harvard.edu \
    /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.