Re: Path Name to kdev_t

Christoph Hellwig (hch@infradead.org)
Fri, 15 Nov 2002 16:28:45 +0000


On Fri, Nov 15, 2002 at 04:15:36PM +0000, Joe Thornber wrote:
> On Thu, Nov 14, 2002 at 07:19:16PM +0530, chandrasekhar.nagaraj wrote:
> > Hi,
> >
> > In one of the part of my driver module , I have a path name to a device file
> > (for eg:- /dev/hda1) .Now if I want to obtain the associated major number
> > and minor number i.e. device ID(kdev_t) of this file what would be the
> > procedure?
>
> I think this should be standard function, I'm sure lots of people are
> duplicating this code. For 2.4 kernels:
>
> /*
> * Convert a device path to a kdev_t.
> */
> static int lookup_device(const char *path, kdev_t *dev)
> {
> int r;
> struct nameidata nd;
> struct inode *inode;
>
> if (!path_init(path, LOOKUP_FOLLOW, &nd))
> return 0;

missing LOOKUP_POSITIVE

>
> if ((r = path_walk(path, &nd)))
> goto out;
>
> inode = nd.dentry->d_inode;
> if (!inode) {
> r = -ENOENT;
> goto out;
> }
>
> if (!S_ISBLK(inode->i_mode)) {
> r = -EINVAL;
> goto out;
> }

shouldb be -ENOTBLK

new check here:

if (nd.mnt->mnt_flags & MNT_NODEV)
r = -EACCES;

>
> *dev = inode->i_rdev;
>
> out:
> path_release(&nd);
> return r;

I also think that this doesn not make much sense, you really want
name to properly opened struct block_device * instead, i.e. the firsdt halve
of get_sb_bdev()

-
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/