]> git.baikalelectronics.ru Git - kernel.git/commit
Btrfs: don't delay inode ref updates during log replay
authorChris Mason <clm@fb.com>
Wed, 31 Dec 2014 17:18:29 +0000 (12:18 -0500)
committerChris Mason <clm@fb.com>
Fri, 2 Jan 2015 19:47:56 +0000 (14:47 -0500)
commit47598d7ab38d3481f8d1029959f09136647c52af
tree00700888057da8537676a6af12ed85675c90df18
parent65d954d19735dbab2faf6b839615ed5087479ef7
Btrfs: don't delay inode ref updates during log replay

Commit 7fb60591c67 (Btrfs: try not to ENOSPC on log replay) added a
check to skip delayed inode updates during log replay because it
confuses the enospc code.  But the delayed processing will end up
ignoring delayed refs from log replay because the inode itself wasn't
put through the delayed code.

This can end up triggering a warning at commit time:

WARNING: CPU: 2 PID: 778 at fs/btrfs/delayed-inode.c:1410 btrfs_assert_delayed_root_empty+0x32/0x34()

Which is repeated for each commit because we never process the delayed
inode ref update.

The fix used here is to change btrfs_delayed_delete_inode_ref to return
an error if we're currently in log replay.  The caller will do the ref
deletion immediately and everything will work properly.

Signed-off-by: Chris Mason <clm@fb.com>
cc: stable@vger.kernel.org # v3.18 and any stable series that picked 7fb60591c675a4fd644f14e2f3232f2b49225d9d
fs/btrfs/delayed-inode.c