On Wednesday 09 January 2008 03:05:45 pm Alasdair G Kergon wrote: > On Wed, Jan 09, 2008 at 04:58:46PM -0600, Chris Friesen wrote: > > Alasdair G Kergon wrote: > > >On Wed, Jan 09, 2008 at 11:46:03PM +0100, Andi Kleen wrote: > > >>struct inode *inode = file->f_dentry->d_inode; > > > > > >And oops if that's not defined? > > > > Isn't this basically identical to what was being passed in to .ioctl()? > > Not in every case, unless someone's been through and created fake > structures in all the remaining places that pass in a NULL 'file' because > there isn't one available. >From 2.6.23's fs/ioctl.c - do_ioctl(): if (filp->f_op->unlocked_ioctl) { error = filp->f_op->unlocked_ioctl(filp, cmd, arg); if (error == -ENOIOCTLCMD) error = -EINVAL; goto out; } else if (filp->f_op->ioctl) { lock_kernel(); error = filp->f_op->ioctl(filp->f_path.dentry->d_inode, filp, cmd, arg); unlock_kernel(); } As a sidenote, please don't use f_dentry and f_vfsmnt, since they are just #defines for the correct fields. They were meant to be temporary transition helpers, but (alas) have refused to die thus far. If noone beats me to it, I'll take a look-see at deprecating them all the way. -- Vadim Lobanov - To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html