Proper way to get device file minor number from struct file

Bjørn Mork bjorn at mork.no
Sun Jul 10 12:02:23 EDT 2016


"Matwey V. Kornilov" <matwey.kornilov at gmail.com> writes:

> Hello,
>
> I am looking through some legacy out of tree custom linux kernel device
> driver.
>
> It is full of lines like the following:
>
> iminor(fp->f_dentry->d_inode)
>
> here struct file *fp is an argument of callback of struct file_operations.
>
> Documentation/filesystems/porting says:
>
> "f_dentry is gone; use f_path.dentry, or, better yet, see if you can
> avoid it entirely"
>
> So, is there a proper compatible way to do the same?

Don't know how proper it is, but a "git grep iminor drivers/" shows that

   minor = iminor(file_inode(file));

is a very common construct.

Or alternatively, do the iminor(inode) lookup once in open() to lookup
up your device struct or whatever, and then save that reference in
file->private_data, thereby avoiding the need to know the minor anywhere
else.



Bjørn



More information about the Kernelnewbies mailing list