diff options
author | Curt Wohlgemuth <curtw@google.com> | 2010-02-16 15:06:29 -0500 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2010-02-16 15:06:29 -0500 |
commit | 73b50c1c92666d326b5fa2c945d46509f2f6d91f (patch) | |
tree | 87e2cc6fed3259a83364ede33d8f4d68173f8175 /fs/ext4/namei.c | |
parent | ba869023eac8354b17acdcff82b851ea8e7b1809 (diff) |
ext4: Fix BUG_ON at fs/buffer.c:652 in no journal mode
Calls to ext4_handle_dirty_metadata should only pass in an inode
pointer for inode-specific metadata, and not for shared metadata
blocks such as inode table blocks, block group descriptors, the
superblock, etc.
The BUG_ON can get tripped when updating a special device (such as a
block device) that is opened (so that i_mapping is set in
fs/block_dev.c) and the file system is mounted in no journal mode.
Addresses-Google-Bug: #2404870
Signed-off-by: Curt Wohlgemuth <curtw@google.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Diffstat (limited to 'fs/ext4/namei.c')
-rw-r--r-- | fs/ext4/namei.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c index bd2dc0b71c8c..a13948f8242f 100644 --- a/fs/ext4/namei.c +++ b/fs/ext4/namei.c | |||
@@ -2017,7 +2017,7 @@ int ext4_orphan_add(handle_t *handle, struct inode *inode) | |||
2017 | /* Insert this inode at the head of the on-disk orphan list... */ | 2017 | /* Insert this inode at the head of the on-disk orphan list... */ |
2018 | NEXT_ORPHAN(inode) = le32_to_cpu(EXT4_SB(sb)->s_es->s_last_orphan); | 2018 | NEXT_ORPHAN(inode) = le32_to_cpu(EXT4_SB(sb)->s_es->s_last_orphan); |
2019 | EXT4_SB(sb)->s_es->s_last_orphan = cpu_to_le32(inode->i_ino); | 2019 | EXT4_SB(sb)->s_es->s_last_orphan = cpu_to_le32(inode->i_ino); |
2020 | err = ext4_handle_dirty_metadata(handle, inode, EXT4_SB(sb)->s_sbh); | 2020 | err = ext4_handle_dirty_metadata(handle, NULL, EXT4_SB(sb)->s_sbh); |
2021 | rc = ext4_mark_iloc_dirty(handle, inode, &iloc); | 2021 | rc = ext4_mark_iloc_dirty(handle, inode, &iloc); |
2022 | if (!err) | 2022 | if (!err) |
2023 | err = rc; | 2023 | err = rc; |
@@ -2089,7 +2089,7 @@ int ext4_orphan_del(handle_t *handle, struct inode *inode) | |||
2089 | if (err) | 2089 | if (err) |
2090 | goto out_brelse; | 2090 | goto out_brelse; |
2091 | sbi->s_es->s_last_orphan = cpu_to_le32(ino_next); | 2091 | sbi->s_es->s_last_orphan = cpu_to_le32(ino_next); |
2092 | err = ext4_handle_dirty_metadata(handle, inode, sbi->s_sbh); | 2092 | err = ext4_handle_dirty_metadata(handle, NULL, sbi->s_sbh); |
2093 | } else { | 2093 | } else { |
2094 | struct ext4_iloc iloc2; | 2094 | struct ext4_iloc iloc2; |
2095 | struct inode *i_prev = | 2095 | struct inode *i_prev = |