diff options
author | Jan Kara <jack@suse.cz> | 2011-12-22 10:49:05 -0500 |
---|---|---|
committer | Jan Kara <jack@suse.cz> | 2012-01-09 07:52:09 -0500 |
commit | 33c104d415e92a51aaf638dc3d93920cfa601e5c (patch) | |
tree | d94d7312b242ee85318188b3bc8fd23481c2f529 /fs/ext3 | |
parent | 0048278552e9752fd578c3d8deee756987c10873 (diff) |
ext3: Don't warn from writepage when readonly inode is spotted after error
WARN_ON_ONCE(IS_RDONLY(inode)) tends to trip when filesystem hits error and is
remounted read-only. This unnecessarily scares users (well, they should be
scared because of filesystem error, but the stack trace distracts them from the
right source of their fear ;-). We could as well just remove the WARN_ON but
it's not hard to fix it to not trip on filesystem with errors and not use more
cycles in the common case so that's what we do.
CC: stable@kernel.org
Signed-off-by: Jan Kara <jack@suse.cz>
Diffstat (limited to 'fs/ext3')
-rw-r--r-- | fs/ext3/inode.c | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/fs/ext3/inode.c b/fs/ext3/inode.c index a8d3217c5cfe..fbf6599a1ce6 100644 --- a/fs/ext3/inode.c +++ b/fs/ext3/inode.c | |||
@@ -1623,7 +1623,13 @@ static int ext3_ordered_writepage(struct page *page, | |||
1623 | int err; | 1623 | int err; |
1624 | 1624 | ||
1625 | J_ASSERT(PageLocked(page)); | 1625 | J_ASSERT(PageLocked(page)); |
1626 | WARN_ON_ONCE(IS_RDONLY(inode)); | 1626 | /* |
1627 | * We don't want to warn for emergency remount. The condition is | ||
1628 | * ordered to avoid dereferencing inode->i_sb in non-error case to | ||
1629 | * avoid slow-downs. | ||
1630 | */ | ||
1631 | WARN_ON_ONCE(IS_RDONLY(inode) && | ||
1632 | !(EXT3_SB(inode->i_sb)->s_mount_state & EXT3_ERROR_FS)); | ||
1627 | 1633 | ||
1628 | /* | 1634 | /* |
1629 | * We give up here if we're reentered, because it might be for a | 1635 | * We give up here if we're reentered, because it might be for a |
@@ -1698,7 +1704,13 @@ static int ext3_writeback_writepage(struct page *page, | |||
1698 | int err; | 1704 | int err; |
1699 | 1705 | ||
1700 | J_ASSERT(PageLocked(page)); | 1706 | J_ASSERT(PageLocked(page)); |
1701 | WARN_ON_ONCE(IS_RDONLY(inode)); | 1707 | /* |
1708 | * We don't want to warn for emergency remount. The condition is | ||
1709 | * ordered to avoid dereferencing inode->i_sb in non-error case to | ||
1710 | * avoid slow-downs. | ||
1711 | */ | ||
1712 | WARN_ON_ONCE(IS_RDONLY(inode) && | ||
1713 | !(EXT3_SB(inode->i_sb)->s_mount_state & EXT3_ERROR_FS)); | ||
1702 | 1714 | ||
1703 | if (ext3_journal_current_handle()) | 1715 | if (ext3_journal_current_handle()) |
1704 | goto out_fail; | 1716 | goto out_fail; |
@@ -1741,7 +1753,13 @@ static int ext3_journalled_writepage(struct page *page, | |||
1741 | int err; | 1753 | int err; |
1742 | 1754 | ||
1743 | J_ASSERT(PageLocked(page)); | 1755 | J_ASSERT(PageLocked(page)); |
1744 | WARN_ON_ONCE(IS_RDONLY(inode)); | 1756 | /* |
1757 | * We don't want to warn for emergency remount. The condition is | ||
1758 | * ordered to avoid dereferencing inode->i_sb in non-error case to | ||
1759 | * avoid slow-downs. | ||
1760 | */ | ||
1761 | WARN_ON_ONCE(IS_RDONLY(inode) && | ||
1762 | !(EXT3_SB(inode->i_sb)->s_mount_state & EXT3_ERROR_FS)); | ||
1745 | 1763 | ||
1746 | if (ext3_journal_current_handle()) | 1764 | if (ext3_journal_current_handle()) |
1747 | goto no_write; | 1765 | goto no_write; |