]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blobdiff - fs/open.c
ext4: make sure to reset inode lockdep class when quota enabling fails
[mirror_ubuntu-jammy-kernel.git] / fs / open.c
index daa324606a41f8141567cf4395d26458db76a924..e0df1536eb69f9c328a239bb92c288407392a4c2 100644 (file)
--- a/fs/open.c
+++ b/fs/open.c
@@ -856,8 +856,20 @@ static int do_dentry_open(struct file *f,
                 * of THPs into the page cache will fail.
                 */
                smp_mb();
-               if (filemap_nr_thps(inode->i_mapping))
-                       truncate_pagecache(inode, 0);
+               if (filemap_nr_thps(inode->i_mapping)) {
+                       struct address_space *mapping = inode->i_mapping;
+
+                       filemap_invalidate_lock(inode->i_mapping);
+                       /*
+                        * unmap_mapping_range just need to be called once
+                        * here, because the private pages is not need to be
+                        * unmapped mapping (e.g. data segment of dynamic
+                        * shared libraries here).
+                        */
+                       unmap_mapping_range(mapping, 0, 0, 0);
+                       truncate_inode_pages(mapping, 0);
+                       filemap_invalidate_unlock(inode->i_mapping);
+               }
        }
 
        return 0;