Re: [PATCH v3 07/39] fs: char_dev: introduce cd_acquire function to acquire cdev

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [Linux Ext4 Filesystem]     [Union Filesystem]     [Filesystem Testing]     [Ceph Users]     [Ecryptfs]     [AutoFS]     [Kernel Newbies]     [Share Photos]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux Cachefs]     [Reiser Filesystem]     [Linux RAID]     [Samba]     [Device Mapper]     [CEPH Development]
  Powered by Linux