diff mbox

vfs: remove might_sleep() from clear_inode()

Message ID 20171108004354.40308-1-shakeelb@google.com (mailing list archive)
State New, archived
Headers show

Commit Message

Shakeel Butt Nov. 8, 2017, 12:43 a.m. UTC
Commit 7994e6f72543 ("vfs: Move waiting for inode writeback from
end_writeback() to evict_inode()") removed inode_sync_wait() from
end_writeback() and commit dbd5768f87ff ("vfs: Rename end_writeback()
to clear_inode()") renamed end_writeback() to clear_inode(). After
these patches there is no sleeping operation in clear_inode(). So,
remove might_sleep() from it.

Signed-off-by: Shakeel Butt <shakeelb@google.com>
---
 fs/inode.c | 1 -
 1 file changed, 1 deletion(-)

Comments

Al Viro Nov. 8, 2017, 2:24 a.m. UTC | #1
On Tue, Nov 07, 2017 at 04:43:54PM -0800, Shakeel Butt wrote:
> Commit 7994e6f72543 ("vfs: Move waiting for inode writeback from
> end_writeback() to evict_inode()") removed inode_sync_wait() from
> end_writeback() and commit dbd5768f87ff ("vfs: Rename end_writeback()
> to clear_inode()") renamed end_writeback() to clear_inode(). After
> these patches there is no sleeping operation in clear_inode(). So,
> remove might_sleep() from it.

Point, but... this is far from the worst annoyance in clear_inode().
Starting with "BUG_ON() under spin_lock_irq() is antisocial and
not in a good way", of course, but that's not all - the whole
cycling of ->tree_lock has already been done back in
truncate_inode_pages_final() and we'd better have called that
in all cases when ->i_data might have ever contained anything.

The whole thing looks bogus these days...  I wonder if we should
simply move the remaining paranoia into destroy_inode() and get
rid of the I_CLEAR completely...
diff mbox

Patch

diff --git a/fs/inode.c b/fs/inode.c
index d1e35b53bb23..528f3159b928 100644
--- a/fs/inode.c
+++ b/fs/inode.c
@@ -497,7 +497,6 @@  EXPORT_SYMBOL(__remove_inode_hash);
 
 void clear_inode(struct inode *inode)
 {
-	might_sleep();
 	/*
 	 * We have to cycle tree_lock here because reclaim can be still in the
 	 * process of removing the last page (in __delete_from_page_cache())