OSDN Git Service

Btrfs: adjust outstanding_extents counter properly when dio write is split
authorLiu Bo <bo.li.liu@oracle.com>
Fri, 23 Dec 2016 01:13:54 +0000 (17:13 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 7 Aug 2017 02:19:46 +0000 (19:19 -0700)
commit786fd31f6001c0f429797b10e8ff16838794fce2
tree5806bd80b10c20b0086fe91b68c13ef3a4ee21c1
parent7ea3cc440ec9f3c53fdc54f59248d19f2d29106c
Btrfs: adjust outstanding_extents counter properly when dio write is split

[ Upstream commit c2931667c83ded6504b3857e99cc45b21fa496fb ]

Currently how btrfs dio deals with split dio write is not good
enough if dio write is split into several segments due to the
lack of contiguous space, a large dio write like 'dd bs=1G count=1'
can end up with incorrect outstanding_extents counter and endio
would complain loudly with an assertion.

This fixes the problem by compensating the outstanding_extents
counter in inode if a large dio write gets split.

Reported-by: Anand Jain <anand.jain@oracle.com>
Tested-by: Anand Jain <anand.jain@oracle.com>
Signed-off-by: Liu Bo <bo.li.liu@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/btrfs/inode.c