| From: Theodore Ts'o <tytso@mit.edu> |
| Date: Wed, 19 Dec 2018 14:36:58 -0500 |
| Subject: ext4: check for shutdown and r/o file system in ext4_write_inode() |
| |
| commit 18f2c4fcebf2582f96cbd5f2238f4f354a0e4847 upstream. |
| |
| If the file system has been shut down or is read-only, then |
| ext4_write_inode() needs to bail out early. |
| |
| Also use jbd2_complete_transaction() instead of ext4_force_commit() so |
| we only force a commit if it is needed. |
| |
| Signed-off-by: Theodore Ts'o <tytso@mit.edu> |
| [bwh: Backported to 3.16: |
| - Open-code sb_rdonly() |
| - Drop ext4_forced_shutdown() check] |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| --- a/fs/ext4/inode.c |
| +++ b/fs/ext4/inode.c |
| @@ -4658,7 +4658,8 @@ int ext4_write_inode(struct inode *inode |
| { |
| int err; |
| |
| - if (WARN_ON_ONCE(current->flags & PF_MEMALLOC)) |
| + if (WARN_ON_ONCE(current->flags & PF_MEMALLOC) || |
| + (inode->i_sb->s_flags & MS_RDONLY)) |
| return 0; |
| |
| if (EXT4_SB(inode->i_sb)->s_journal) { |
| @@ -4676,7 +4677,8 @@ int ext4_write_inode(struct inode *inode |
| if (wbc->sync_mode != WB_SYNC_ALL || wbc->for_sync) |
| return 0; |
| |
| - err = ext4_force_commit(inode->i_sb); |
| + err = jbd2_complete_transaction(EXT4_SB(inode->i_sb)->s_journal, |
| + EXT4_I(inode)->i_sync_tid); |
| } else { |
| struct ext4_iloc iloc; |
| |