X-Git-Url: http://git.monstr.eu/?a=blobdiff_plain;f=fs%2Finode.c;h=c93500d84264d0ca5ddd2463b703cdb6509ba0a4;hb=67e446eb4d063d9f75ef5ebbb4f5083a3f2edc32;hp=9e192bea063096142c6f13ae3313ac2d0a4df6cd;hpb=9f67672a817ec046f7554a885f0fe0d60e1bf99f;p=linux-2.6-microblaze.git diff --git a/fs/inode.c b/fs/inode.c index 9e192bea0630..c93500d84264 100644 --- a/fs/inode.c +++ b/fs/inode.c @@ -529,7 +529,14 @@ void clear_inode(struct inode *inode) */ xa_lock_irq(&inode->i_data.i_pages); BUG_ON(inode->i_data.nrpages); - BUG_ON(inode->i_data.nrexceptional); + /* + * Almost always, mapping_empty(&inode->i_data) here; but there are + * two known and long-standing ways in which nodes may get left behind + * (when deep radix-tree node allocation failed partway; or when THP + * collapse_file() failed). Until those two known cases are cleaned up, + * or a cleanup function is called here, do not BUG_ON(!mapping_empty), + * nor even WARN_ON(!mapping_empty). + */ xa_unlock_irq(&inode->i_data.i_pages); BUG_ON(!list_empty(&inode->i_data.private_list)); BUG_ON(!(inode->i_state & I_FREEING));