]> git.baikalelectronics.ru Git - kernel.git/commit
Btrfs: change how we wait for pending ordered extents
authorJosef Bacik <jbacik@fb.com>
Thu, 24 Sep 2015 20:17:39 +0000 (16:17 -0400)
committerChris Mason <clm@fb.com>
Thu, 22 Oct 2015 01:51:40 +0000 (18:51 -0700)
commit03cc5a9bbe56fa263d0aa27834bad44e8d26cea4
treef14c534323f7b8d6bf181c9610df66313358360b
parente70f05ab63fa9187aa91fcd16fb05cfd807f3ca0
Btrfs: change how we wait for pending ordered extents

We have a mechanism to make sure we don't lose updates for ordered extents that
were logged in the transaction that is currently running.  We add the ordered
extent to a transaction list and then the transaction waits on all the ordered
extents in that list.  However are substantially large file systems this list
can be extremely large, and can give us soft lockups, since the ordered extents
don't remove themselves from the list when they do complete.

To fix this we simply add a counter to the transaction that is incremented any
time we have a logged extent that needs to be completed in the current
transaction.  Then when the ordered extent finally completes it decrements the
per transaction counter and wakes up the transaction if we are the last ones.
This will eliminate the softlockup.  Thanks,

Signed-off-by: Josef Bacik <jbacik@fb.com>
Signed-off-by: Chris Mason <clm@fb.com>
fs/btrfs/disk-io.c
fs/btrfs/ordered-data.c
fs/btrfs/ordered-data.h
fs/btrfs/transaction.c
fs/btrfs/transaction.h