Re: bdi has dirty inode after umount of ext4 fs in 3.4.83
From: Benjamin LaHaise <bcrl@kvack.org>
Date: 2014-03-25 22:09:38
Also in:
linux-fsdevel
From: Benjamin LaHaise <bcrl@kvack.org>
Date: 2014-03-25 22:09:38
Also in:
linux-fsdevel
On Sun, Mar 23, 2014 at 02:14:16PM +0100, Jan Kara wrote:
So the dirty inode is almost certainly a block device inode. Another clue is that fsync(2) actually doesn't clean inode dirty state (especially not for block device inodes since that inode is a special one and fs usually doesn't get to inspecting it). sync(2) does in general clear inode dirty state because that's handled by flusher thread. However if ->sync_fs() dirties the block device inode, subsequent sync_blockdev() call only writes the data but doesn't clean the inode state. So even with sync(2) it can happen the block device inode remains dirty.
In general inode dirty state isn't reliable. I_DIRTY_DATA can be set when inode is in fact clean. You have to use mapping_tagged(inode->i_mapping, PAGECACHE_TAG_DIRTY) to determine whether the inode has actually any dirty data.
That is indeed the case. I checked the contents of the inode, and none of the buffers attached to that inode were dirty. Is there any desire to fix this? Seeing an inode on the b_dirty list that isn't really an inode that contains any data doesn't make a whole lot of sense. -ben -- "Thought is the essence of where you are now."