ext4: remove block_device_ejected()
authorYu Kuai <yukuai3@huawei.com>
Thu, 11 Apr 2024 14:53:42 +0000 (15:53 +0100)
committerAl Viro <viro@zeniv.linux.org.uk>
Fri, 3 May 2024 06:28:27 +0000 (02:28 -0400)
block_device_ejected() is added by commit bdfe0cbd746a ("Revert
"ext4: remove block_device_ejected"") in 2015. At that time 'bdi->wb'
is destroyed synchronized from del_gendisk(), hence if ext4 is still
mounted, and then mark_buffer_dirty() will reference destroyed 'wb'.
However, such problem doesn't exist anymore:

- commit d03f6cdc1fc4 ("block: Dynamically allocate and refcount
backing_dev_info") switch bdi to use refcounting;
- commit 13eec2363ef0 ("fs: Get proper reference for s_bdi"), will grab
additional reference of bdi while mounting, so that 'bdi->wb' will not
be destroyed until generic_shutdown_super().

Hence remove this dead function block_device_ejected().

Signed-off-by: Yu Kuai <yukuai3@huawei.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Link: https://lore.kernel.org/r/20240411145346.2516848-7-viro@zeniv.linux.org.uk
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/ext4/super.c

index 9988b3a40b424ab10789914264327bb9c37f3592..b255f798f449b956b053486ca76b01fd84366ddc 100644 (file)
@@ -492,22 +492,6 @@ static void ext4_maybe_update_superblock(struct super_block *sb)
                schedule_work(&EXT4_SB(sb)->s_sb_upd_work);
 }
 
-/*
- * The del_gendisk() function uninitializes the disk-specific data
- * structures, including the bdi structure, without telling anyone
- * else.  Once this happens, any attempt to call mark_buffer_dirty()
- * (for example, by ext4_commit_super), will cause a kernel OOPS.
- * This is a kludge to prevent these oops until we can put in a proper
- * hook in del_gendisk() to inform the VFS and file system layers.
- */
-static int block_device_ejected(struct super_block *sb)
-{
-       struct inode *bd_inode = sb->s_bdev->bd_inode;
-       struct backing_dev_info *bdi = inode_to_bdi(bd_inode);
-
-       return bdi->dev == NULL;
-}
-
 static void ext4_journal_commit_callback(journal_t *journal, transaction_t *txn)
 {
        struct super_block              *sb = journal->j_private;
@@ -6172,8 +6156,6 @@ static int ext4_commit_super(struct super_block *sb)
 
        if (!sbh)
                return -EINVAL;
-       if (block_device_ejected(sb))
-               return -ENODEV;
 
        ext4_update_super(sb);