unsigned long nr_segs, loff_t offset)
 {
        int rc;
-       struct super_block *sb;
-       struct hypfs_sb_info *fs_info;
+       struct super_block *sb = file_inode(iocb->ki_filp)->i_sb;
+       struct hypfs_sb_info *fs_info = sb->s_fs_info;
        size_t count = iov_length(iov, nr_segs);
 
-       sb = iocb->ki_filp->f_path.dentry->d_inode->i_sb;
-       fs_info = sb->s_fs_info;
        /*
         * Currently we only allow one update per second for two reasons:
         * 1. diag 204 is VERY expensive
 
        u32 __user *tmp = (u32 __user *) buf;
        u32 data[2];
        u32 reg = *ppos;
-       int cpu = iminor(file->f_path.dentry->d_inode);
+       int cpu = iminor(file_inode(file));
        int err = 0;
        ssize_t bytes = 0;
 
        const u32 __user *tmp = (const u32 __user *)buf;
        u32 data[2];
        u32 reg = *ppos;
-       int cpu = iminor(file->f_path.dentry->d_inode);
+       int cpu = iminor(file_inode(file));
        int err = 0;
        ssize_t bytes = 0;
 
 {
        u32 __user *uregs = (u32 __user *)arg;
        u32 regs[8];
-       int cpu = iminor(file->f_path.dentry->d_inode);
+       int cpu = iminor(file_inode(file));
        int err;
 
        switch (ioc) {
 
 static int msr_open(struct inode *inode, struct file *file)
 {
-       unsigned int cpu;
+       unsigned int cpu = iminor(file_inode(file));
        struct cpuinfo_x86 *c;
 
        if (!capable(CAP_SYS_RAWIO))
                return -EPERM;
 
-       cpu = iminor(file->f_path.dentry->d_inode);
        if (cpu >= nr_cpu_ids || !cpu_online(cpu))
                return -ENXIO;  /* No such CPU */
 
 
                            struct comedi_devinfo __user *arg,
                            struct file *file)
 {
-       const unsigned minor = iminor(file->f_dentry->d_inode);
+       const unsigned minor = iminor(file_inode(file));
        struct comedi_file_info *info = comedi_file_info_from_minor(minor);
        struct comedi_subdevice *s;
        struct comedi_devinfo devinfo;
 static long comedi_unlocked_ioctl(struct file *file, unsigned int cmd,
                                  unsigned long arg)
 {
-       const unsigned minor = iminor(file->f_dentry->d_inode);
+       const unsigned minor = iminor(file_inode(file));
        struct comedi_file_info *info = comedi_file_info_from_minor(minor);
        struct comedi_device *dev = comedi_dev_from_file_info(info);
        int rc;
 
 static int comedi_mmap(struct file *file, struct vm_area_struct *vma)
 {
-       const unsigned minor = iminor(file->f_dentry->d_inode);
+       const unsigned minor = iminor(file_inode(file));
        struct comedi_file_info *info = comedi_file_info_from_minor(minor);
        struct comedi_device *dev = comedi_dev_from_file_info(info);
        struct comedi_subdevice *s;
 static unsigned int comedi_poll(struct file *file, poll_table *wait)
 {
        unsigned int mask = 0;
-       const unsigned minor = iminor(file->f_dentry->d_inode);
+       const unsigned minor = iminor(file_inode(file));
        struct comedi_file_info *info = comedi_file_info_from_minor(minor);
        struct comedi_device *dev = comedi_dev_from_file_info(info);
        struct comedi_subdevice *s;
        struct comedi_async *async;
        int n, m, count = 0, retval = 0;
        DECLARE_WAITQUEUE(wait, current);
-       const unsigned minor = iminor(file->f_dentry->d_inode);
+       const unsigned minor = iminor(file_inode(file));
        struct comedi_file_info *info = comedi_file_info_from_minor(minor);
        struct comedi_device *dev = comedi_dev_from_file_info(info);
 
        struct comedi_async *async;
        int n, m, count = 0, retval = 0;
        DECLARE_WAITQUEUE(wait, current);
-       const unsigned minor = iminor(file->f_dentry->d_inode);
+       const unsigned minor = iminor(file_inode(file));
        struct comedi_file_info *info = comedi_file_info_from_minor(minor);
        struct comedi_device *dev = comedi_dev_from_file_info(info);
 
 
 static int comedi_fasync(int fd, struct file *file, int on)
 {
-       const unsigned minor = iminor(file->f_dentry->d_inode);
+       const unsigned minor = iminor(file_inode(file));
        struct comedi_device *dev = comedi_dev_from_minor(minor);
 
        if (!dev)
 
                        loff_t *ppos)
 {
        int i;
-       struct inode *inode = file->f_path.dentry->d_inode;
        struct tty_struct *tty = file_tty(file);
        struct tty_ldisc *ld;
 
-       if (tty_paranoia_check(tty, inode, "tty_read"))
+       if (tty_paranoia_check(tty, file_inode(file), "tty_read"))
                return -EIO;
        if (!tty || (test_bit(TTY_IO_ERROR, &tty->flags)))
                return -EIO;
 static ssize_t tty_write(struct file *file, const char __user *buf,
                                                size_t count, loff_t *ppos)
 {
-       struct inode *inode = file->f_path.dentry->d_inode;
        struct tty_struct *tty = file_tty(file);
        struct tty_ldisc *ld;
        ssize_t ret;
 
-       if (tty_paranoia_check(tty, inode, "tty_write"))
+       if (tty_paranoia_check(tty, file_inode(file), "tty_write"))
                return -EIO;
        if (!tty || !tty->ops->write ||
                (test_bit(TTY_IO_ERROR, &tty->flags)))
        struct tty_ldisc *ld;
        int ret = 0;
 
-       if (tty_paranoia_check(tty, filp->f_path.dentry->d_inode, "tty_poll"))
+       if (tty_paranoia_check(tty, file_inode(filp), "tty_poll"))
                return 0;
 
        ld = tty_ldisc_ref_wait(tty);
        unsigned long flags;
        int retval = 0;
 
-       if (tty_paranoia_check(tty, filp->f_path.dentry->d_inode, "tty_fasync"))
+       if (tty_paranoia_check(tty, file_inode(filp), "tty_fasync"))
                goto out;
 
        retval = fasync_helper(fd, filp, on, &tty->fasync);
        void __user *p = (void __user *)arg;
        int retval;
        struct tty_ldisc *ld;
-       struct inode *inode = file->f_dentry->d_inode;
 
-       if (tty_paranoia_check(tty, inode, "tty_ioctl"))
+       if (tty_paranoia_check(tty, file_inode(file), "tty_ioctl"))
                return -EINVAL;
 
        real_tty = tty_pair_get_tty(tty);
 static long tty_compat_ioctl(struct file *file, unsigned int cmd,
                                unsigned long arg)
 {
-       struct inode *inode = file->f_dentry->d_inode;
        struct tty_struct *tty = file_tty(file);
        struct tty_ldisc *ld;
        int retval = -ENOIOCTLCMD;
 
-       if (tty_paranoia_check(tty, inode, "tty_ioctl"))
+       if (tty_paranoia_check(tty, file_inode(file), "tty_ioctl"))
                return -EINVAL;
 
        if (tty->ops->compat_ioctl) {
 
 
 int ext4_ind_punch_hole(struct file *file, loff_t offset, loff_t length)
 {
-       struct inode *inode = file->f_path.dentry->d_inode;
+       struct inode *inode = file_inode(file);
        struct super_block *sb = inode->i_sb;
        ext4_lblk_t first_block, stop_block;
        struct address_space *mapping = inode->i_mapping;
 
                                                struct vm_fault *vmf)
 {
        struct page *page = vmf->page;
-       struct inode *inode = vma->vm_file->f_path.dentry->d_inode;
+       struct inode *inode = file_inode(vma->vm_file);
        struct f2fs_sb_info *sbi = F2FS_SB(inode->i_sb);
        block_t old_blk_addr;
        struct dnode_of_data dn;
 static long f2fs_fallocate(struct file *file, int mode,
                                loff_t offset, loff_t len)
 {
-       struct inode *inode = file->f_path.dentry->d_inode;
+       struct inode *inode = file_inode(file);
        long ret;
 
        if (mode & ~(FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE))
 
 long f2fs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
 {
-       struct inode *inode = filp->f_dentry->d_inode;
+       struct inode *inode = file_inode(filp);
        struct f2fs_inode_info *fi = F2FS_I(inode);
        unsigned int flags;
        int ret;
 
 
 void fuse_force_forget(struct file *file, u64 nodeid)
 {
-       struct inode *inode = file->f_path.dentry->d_inode;
+       struct inode *inode = file_inode(file);
        struct fuse_conn *fc = get_fuse_conn(inode);
        struct fuse_req *req;
        struct fuse_forget_in inarg;
 
 
 static int fuse_flush(struct file *file, fl_owner_t id)
 {
-       struct inode *inode = file->f_path.dentry->d_inode;
+       struct inode *inode = file_inode(file);
        struct fuse_conn *fc = get_fuse_conn(inode);
        struct fuse_file *ff = file->private_data;
        struct fuse_req *req;
                                  unsigned long nr_segs, loff_t *ppos)
 {
        ssize_t res;
-       struct inode *inode = file->f_path.dentry->d_inode;
+       struct inode *inode = file_inode(file);
 
        if (is_bad_inode(inode))
                return -EIO;
 static ssize_t __fuse_direct_write(struct file *file, const struct iovec *iov,
                                   unsigned long nr_segs, loff_t *ppos)
 {
-       struct inode *inode = file->f_path.dentry->d_inode;
+       struct inode *inode = file_inode(file);
        size_t count = iov_length(iov, nr_segs);
        ssize_t res;
 
                                 size_t count, loff_t *ppos)
 {
        struct iovec iov = { .iov_base = (void __user *)buf, .iov_len = count };
-       struct inode *inode = file->f_path.dentry->d_inode;
+       struct inode *inode = file_inode(file);
        ssize_t res;
 
        if (is_bad_inode(inode))
 static int fuse_file_mmap(struct file *file, struct vm_area_struct *vma)
 {
        if ((vma->vm_flags & VM_SHARED) && (vma->vm_flags & VM_MAYWRITE)) {
-               struct inode *inode = file->f_dentry->d_inode;
+               struct inode *inode = file_inode(file);
                struct fuse_conn *fc = get_fuse_conn(inode);
                struct fuse_inode *fi = get_fuse_inode(inode);
                struct fuse_file *ff = file->private_data;
                         const struct file_lock *fl, int opcode, pid_t pid,
                         int flock)
 {
-       struct inode *inode = file->f_path.dentry->d_inode;
+       struct inode *inode = file_inode(file);
        struct fuse_conn *fc = get_fuse_conn(inode);
        struct fuse_file *ff = file->private_data;
        struct fuse_lk_in *arg = &req->misc.lk_in;
 
 static int fuse_getlk(struct file *file, struct file_lock *fl)
 {
-       struct inode *inode = file->f_path.dentry->d_inode;
+       struct inode *inode = file_inode(file);
        struct fuse_conn *fc = get_fuse_conn(inode);
        struct fuse_req *req;
        struct fuse_lk_out outarg;
 
 static int fuse_setlk(struct file *file, struct file_lock *fl, int flock)
 {
-       struct inode *inode = file->f_path.dentry->d_inode;
+       struct inode *inode = file_inode(file);
        struct fuse_conn *fc = get_fuse_conn(inode);
        struct fuse_req *req;
        int opcode = (fl->fl_flags & FL_SLEEP) ? FUSE_SETLKW : FUSE_SETLK;
 
 static int fuse_file_lock(struct file *file, int cmd, struct file_lock *fl)
 {
-       struct inode *inode = file->f_path.dentry->d_inode;
+       struct inode *inode = file_inode(file);
        struct fuse_conn *fc = get_fuse_conn(inode);
        int err;
 
 
 static int fuse_file_flock(struct file *file, int cmd, struct file_lock *fl)
 {
-       struct inode *inode = file->f_path.dentry->d_inode;
+       struct inode *inode = file_inode(file);
        struct fuse_conn *fc = get_fuse_conn(inode);
        int err;
 
 static loff_t fuse_file_llseek(struct file *file, loff_t offset, int whence)
 {
        loff_t retval;
-       struct inode *inode = file->f_path.dentry->d_inode;
+       struct inode *inode = file_inode(file);
 
        /* No i_mutex protection necessary for SEEK_CUR and SEEK_SET */
        if (whence == SEEK_CUR || whence == SEEK_SET)
 long fuse_ioctl_common(struct file *file, unsigned int cmd,
                       unsigned long arg, unsigned int flags)
 {
-       struct inode *inode = file->f_dentry->d_inode;
+       struct inode *inode = file_inode(file);
        struct fuse_conn *fc = get_fuse_conn(inode);
 
        if (!fuse_allow_current_process(fc))
 
 /**
  *     seq_release -   free the structures associated with sequential file.
  *     @file: file in question
- *     @inode: file->f_path.dentry->d_inode
+ *     @inode: its inode
  *
  *     Frees the structures associated with sequential file; can be used
  *     as ->f_op->release() if you don't have private data to destroy.
 
  * Returns a negative error code or 0
  * The key words are stored in *key on success.
  *
- * For shared mappings, it's (page->index, vma->vm_file->f_path.dentry->d_inode,
+ * For shared mappings, it's (page->index, file_inode(vma->vm_file),
  * offset_within_page).  For private mappings, it's (uaddr, current->mm).
  * We can usually work out the index without swapping in the page.
  *