Thread (2 messages) 2 messages, 2 authors, 2012-03-01

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

From: gregkh@linuxfoundation.org (Greg KH)
Date: 2012-03-01 18:29:31

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help