]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - fs/file_table.c
i2c: qcom-geni: Disable DMA processing on the Lenovo Yoga C630
[linux.git] / fs / file_table.c
index 155d7514a0943d729f43f7f4560ab9e50fa7a60a..30d55c9a1744a6244d50e8ae3497a1563e7e14a1 100644 (file)
@@ -1,3 +1,4 @@
+// SPDX-License-Identifier: GPL-2.0-only
 /*
  *  linux/fs/file_table.c
  *
@@ -255,6 +256,7 @@ static void __fput(struct file *file)
        struct dentry *dentry = file->f_path.dentry;
        struct vfsmount *mnt = file->f_path.mnt;
        struct inode *inode = file->f_inode;
+       fmode_t mode = file->f_mode;
 
        if (unlikely(!(file->f_mode & FMODE_OPENED)))
                goto out;
@@ -277,18 +279,20 @@ static void __fput(struct file *file)
        if (file->f_op->release)
                file->f_op->release(inode, file);
        if (unlikely(S_ISCHR(inode->i_mode) && inode->i_cdev != NULL &&
-                    !(file->f_mode & FMODE_PATH))) {
+                    !(mode & FMODE_PATH))) {
                cdev_put(inode->i_cdev);
        }
        fops_put(file->f_op);
        put_pid(file->f_owner.pid);
-       if ((file->f_mode & (FMODE_READ | FMODE_WRITE)) == FMODE_READ)
+       if ((mode & (FMODE_READ | FMODE_WRITE)) == FMODE_READ)
                i_readcount_dec(inode);
-       if (file->f_mode & FMODE_WRITER) {
+       if (mode & FMODE_WRITER) {
                put_write_access(inode);
                __mnt_drop_write(mnt);
        }
        dput(dentry);
+       if (unlikely(mode & FMODE_NEED_UNMOUNT))
+               dissolve_on_fput(mnt);
        mntput(mnt);
 out:
        file_free(file);
@@ -323,6 +327,7 @@ void flush_delayed_fput(void)
 {
        delayed_fput(NULL);
 }
+EXPORT_SYMBOL_GPL(flush_delayed_fput);
 
 static DECLARE_DELAYED_WORK(delayed_fput_work, delayed_fput);