]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
fs/adfs: super: fix inode dropping
authorRussell King <rmk+kernel@armlinux.org.uk>
Mon, 9 Dec 2019 11:11:18 +0000 (11:11 +0000)
committerAl Viro <viro@zeniv.linux.org.uk>
Tue, 21 Jan 2020 01:12:42 +0000 (20:12 -0500)
When we have write support enabled, we must not drop inodes before they
have been written back, otherwise we lose updates to the filesystem on
umount.  Keep the inodes around unless we are built in read-only mode,
or we are mounted read-only.

Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
fs/adfs/super.c

index b2455e9ab923da3ace4e430a25f412a6ec14ebbc..9c93122925cf434c2647282ee7898b7ab788e8b1 100644 (file)
@@ -231,6 +231,12 @@ static void adfs_free_inode(struct inode *inode)
        kmem_cache_free(adfs_inode_cachep, ADFS_I(inode));
 }
 
+static int adfs_drop_inode(struct inode *inode)
+{
+       /* always drop inodes if we are read-only */
+       return !IS_ENABLED(CONFIG_ADFS_FS_RW) || IS_RDONLY(inode);
+}
+
 static void init_once(void *foo)
 {
        struct adfs_inode_info *ei = (struct adfs_inode_info *) foo;
@@ -263,7 +269,7 @@ static void destroy_inodecache(void)
 static const struct super_operations adfs_sops = {
        .alloc_inode    = adfs_alloc_inode,
        .free_inode     = adfs_free_inode,
-       .drop_inode     = generic_delete_inode,
+       .drop_inode     = adfs_drop_inode,
        .write_inode    = adfs_write_inode,
        .put_super      = adfs_put_super,
        .statfs         = adfs_statfs,