On Tue 15-09-15 17:02:02, Dongsheng Yang wrote: > cd_acquire() works like bd_acquire() to get cdev by an inode, > this commit is a preparation for lookup_cdev(). > > Signed-off-by: Dongsheng Yang <yangds.fnst@xxxxxxxxxxxxxx> Two comments below. > --- > fs/char_dev.c | 35 +++++++++++++++++++++++++++++++++++ > 1 file changed, 35 insertions(+) > > diff --git a/fs/char_dev.c b/fs/char_dev.c > index ea06a3d..e818faa 100644 > --- a/fs/char_dev.c > +++ b/fs/char_dev.c > @@ -439,6 +439,41 @@ static int exact_lock(dev_t dev, void *data) > return cdev_get(p) ? 0 : -1; > } > > +struct cdev *cd_acquire(struct inode *inode) > +{ > + struct cdev *cdev; > + struct cdev *new = NULL; > + > + spin_lock(&cdev_lock); > + cdev = inode->i_cdev; > + if (!cdev) { > + struct kobject *kobj; > + int idx; Empty line here please to separate variable declarations from the code. > + spin_unlock(&cdev_lock); > + kobj = kobj_lookup(cdev_map, inode->i_rdev, &idx); > + if (!kobj) { > + cdev = NULL; > + goto out; > + } > + new = container_of(kobj, struct cdev, kobj); > + spin_lock(&cdev_lock); > + /* Check i_cdev again in case somebody beat us to it while > + we dropped the lock. */ > + cdev = inode->i_cdev; > + if (!cdev) { > + inode->i_cdev = cdev = new; > + list_add(&inode->i_devices, &cdev->list); > + } I think you need to put 'new' in case you didn't use it, don't you? > + } > + > + if (!cdev_get(cdev)) > + cdev = NULL; > + spin_unlock(&cdev_lock); > + > +out: > + return cdev; > +} > + > /** > * cdev_add() - add a char device to the system > * @p: the cdev structure for the device Honza -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR -- To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html