* Patch "Btrfs: adjust outstanding_extents counter properly when dio write is split" has been added to the 4.9-stable tree
@ 2017-08-04 22:26 gregkh
0 siblings, 0 replies; only message in thread
From: gregkh @ 2017-08-04 22:26 UTC (permalink / raw)
To: bo.li.liu, alexander.levin, anand.jain, dsterba, gregkh
Cc: stable, stable-commits
This is a note to let you know that I've just added the patch titled
Btrfs: adjust outstanding_extents counter properly when dio write is split
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
btrfs-adjust-outstanding_extents-counter-properly-when-dio-write-is-split.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@vger.kernel.org> know about it.
>From foo@baz Fri Aug 4 15:15:01 PDT 2017
From: Liu Bo <bo.li.liu@oracle.com>
Date: Thu, 22 Dec 2016 17:13:54 -0800
Subject: Btrfs: adjust outstanding_extents counter properly when dio write is split
From: Liu Bo <bo.li.liu@oracle.com>
[ 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 | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -7648,11 +7648,18 @@ static void adjust_dio_outstanding_exten
* within our reservation, otherwise we need to adjust our inode
* counter appropriately.
*/
- if (dio_data->outstanding_extents) {
+ if (dio_data->outstanding_extents >= num_extents) {
dio_data->outstanding_extents -= num_extents;
} else {
+ /*
+ * If dio write length has been split due to no large enough
+ * contiguous space, we need to compensate our inode counter
+ * appropriately.
+ */
+ u64 num_needed = num_extents - dio_data->outstanding_extents;
+
spin_lock(&BTRFS_I(inode)->lock);
- BTRFS_I(inode)->outstanding_extents += num_extents;
+ BTRFS_I(inode)->outstanding_extents += num_needed;
spin_unlock(&BTRFS_I(inode)->lock);
}
}
Patches currently in stable-queue which might be from bo.li.liu@oracle.com are
queue-4.9/btrfs-fix-lockdep-warning-about-log_mutex.patch
queue-4.9/btrfs-adjust-outstanding_extents-counter-properly-when-dio-write-is-split.patch
queue-4.9/btrfs-use-down_read_nested-to-make-lockdep-silent.patch
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2017-08-04 22:26 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-08-04 22:26 Patch "Btrfs: adjust outstanding_extents counter properly when dio write is split" has been added to the 4.9-stable tree gregkh
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).