Can't get Major and Minor number for device correctly.

Greg KH gregkh at linuxfoundation.org
Thu Mar 1 13:29:31 EST 2012


On Thu, Mar 01, 2012 at 12:58:13PM +0530, Pranay Kumar Srivastava wrote:
> Hi,
> 
> I've a kernel module which needs to get hold of the gen_disk
> structure.

Wait, stop there, why do you need to do this?  And why are you trying to
do this by a major/minor number?  What is the root problem you are
trying to solve here?

> To make it a bit interactive I've a user space program which uses stat
> sys call to get the respective device's dev_t number (I use s_rdev of
> the struct stat) and pass it on to my module via an ioctl call. This
> part works good.
> 
> When my module tries to use the get_gendisk function it returns NULL. I printed out the MAJOR(dev_t) and MINOR(dev_t) and was surprised to get the value 0 for MAJOR(dev_t). A little more digging got me to this code snippet, the file is kdev_t.h

As you have found out, you can't pass a userspace dev_t to the kernel
and expect it to work properly.  Try passing a major/minor number and
using the proper internal macros instead, that should work.

greg k-h



More information about the Kernelnewbies mailing list