aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/ext4/super.c18
1 files changed, 1 insertions, 17 deletions
diff --git a/fs/ext4/super.c b/fs/ext4/super.c
index c681352f7c69..e47a552fea05 100644
--- a/fs/ext4/super.c
+++ b/fs/ext4/super.c
@@ -322,22 +322,6 @@ static void save_error_info(struct super_block *sb, const char *func,
322 ext4_commit_super(sb, 1); 322 ext4_commit_super(sb, 1);
323} 323}
324 324
325/*
326 * The del_gendisk() function uninitializes the disk-specific data
327 * structures, including the bdi structure, without telling anyone
328 * else. Once this happens, any attempt to call mark_buffer_dirty()
329 * (for example, by ext4_commit_super), will cause a kernel OOPS.
330 * This is a kludge to prevent these oops until we can put in a proper
331 * hook in del_gendisk() to inform the VFS and file system layers.
332 */
333static int block_device_ejected(struct super_block *sb)
334{
335 struct inode *bd_inode = sb->s_bdev->bd_inode;
336 struct backing_dev_info *bdi = inode_to_bdi(bd_inode);
337
338 return bdi->dev == NULL;
339}
340
341static void ext4_journal_commit_callback(journal_t *journal, transaction_t *txn) 325static void ext4_journal_commit_callback(journal_t *journal, transaction_t *txn)
342{ 326{
343 struct super_block *sb = journal->j_private; 327 struct super_block *sb = journal->j_private;
@@ -4569,7 +4553,7 @@ static int ext4_commit_super(struct super_block *sb, int sync)
4569 struct buffer_head *sbh = EXT4_SB(sb)->s_sbh; 4553 struct buffer_head *sbh = EXT4_SB(sb)->s_sbh;
4570 int error = 0; 4554 int error = 0;
4571 4555
4572 if (!sbh || block_device_ejected(sb)) 4556 if (!sbh)
4573 return error; 4557 return error;
4574 if (buffer_write_io_error(sbh)) { 4558 if (buffer_write_io_error(sbh)) {
4575 /* 4559 /*