linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/3] introduce type based delalloc metadata reserve to fix some false enospc issues
@ 2016-11-11  8:39 Wang Xiaoguang
  2016-11-11  8:39 ` [PATCH 1/3] btrfs: improve inode's outstanding_extents computation Wang Xiaoguang
                   ` (4 more replies)
  0 siblings, 5 replies; 17+ messages in thread
From: Wang Xiaoguang @ 2016-11-11  8:39 UTC (permalink / raw)
  To: linux-btrfs; +Cc: clm, jbacik, dsterba, holger, s.priebe

When having compression enabled, Stefan Priebe ofen got enospc errors
though fs still has much free space. Qu Wenruo also has submitted a
fstests test case which can reproduce this bug steadily, please see
url: https://patchwork.kernel.org/patch/9420527

First patch[1/3] "btrfs: improve inode's outstanding_extents computation" is to
fix outstanding_extents and reserved_extents account issues. This issue was revealed
by modifying BTRFS_MAX_EXTENT_SIZE(128MB) to 64KB, When modifying
BTRFS_MAX_EXTENT_SIZE(128MB) to 64KB, fsstress test often gets these warnings from
btrfs_destroy_inode():
        WARN_ON(BTRFS_I(inode)->outstanding_extents);
        WARN_ON(BTRFS_I(inode)->reserved_extents);
Please see this patch's commit message for detailed info, and this patch is
necessary to patch2 and patch3.

For false enospc, the root reasson is that for compression, its max extent size will
be 128k, not 128MB. If we still use 128MB as max extent size to reserve metadata for
compression, obviously it's not appropriate. In patch "btrfs: Introduce COMPRESS
reserve type to fix false enospc for compression" commit message,
we explain why false enospc error occurs, please see it for detailed info.

To fix this issue, we introduce a new enum type:
	enum btrfs_metadata_reserve_type {
		BTRFS_RESERVE_NORMAL,
        	BTRFS_RESERVE_COMPRESS,
	};
For btrfs_delalloc_[reserve|release]_metadata() and
btrfs_delalloc_[reserve|release]_space(), we introce a new btrfs_metadata_reserve_type
argument, then if a path needs to go compression, we pass BTRFS_RESERVE_COMPRESS,
otherwise pass BTRFS_RESERVE_NORMAL.

With these patchs, Stefan no longer saw such false enospc errors, and Qu Wenruo's
fstests test case will also pass. I have also run whole fstests multiple times,
no regression occurs, thanks.

Wang Xiaoguang (3):
  btrfs: improve inode's outstanding_extents computation
  btrfs: introduce type based delalloc metadata reserve
  btrfs: Introduce COMPRESS reserve type to fix false enospc for
    compression

 fs/btrfs/ctree.h             |  36 +++++--
 fs/btrfs/extent-tree.c       |  52 ++++++---
 fs/btrfs/extent_io.c         |  61 ++++++++++-
 fs/btrfs/extent_io.h         |   5 +
 fs/btrfs/file.c              |  25 +++--
 fs/btrfs/free-space-cache.c  |   6 +-
 fs/btrfs/inode-map.c         |   6 +-
 fs/btrfs/inode.c             | 246 ++++++++++++++++++++++++++++++++++---------
 fs/btrfs/ioctl.c             |  16 +--
 fs/btrfs/relocation.c        |  14 ++-
 fs/btrfs/tests/inode-tests.c |  15 +--
 11 files changed, 381 insertions(+), 101 deletions(-)

-- 
2.7.4




^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2017-04-26  0:41 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-11-11  8:39 [PATCH 0/3] introduce type based delalloc metadata reserve to fix some false enospc issues Wang Xiaoguang
2016-11-11  8:39 ` [PATCH 1/3] btrfs: improve inode's outstanding_extents computation Wang Xiaoguang
2017-01-03 21:00   ` Liu Bo
2017-01-03 23:36     ` Liu Bo
2017-01-23  6:16       ` Qu Wenruo
2016-11-11  8:39 ` [PATCH 2/3] btrfs: introduce type based delalloc metadata reserve Wang Xiaoguang
2016-11-11  8:39 ` [PATCH 3/3] btrfs: Introduce COMPRESS reserve type to fix false enospc for compression Wang Xiaoguang
2016-11-22  9:46 ` [PATCH 0/3] introduce type based delalloc metadata reserve to fix some false enospc issues Wang Xiaoguang
2016-12-31  7:31 ` Stefan Priebe - Profihost AG
2017-01-01  9:32   ` Qu Wenruo
2017-01-04 16:13     ` Stefan Priebe - Profihost AG
2017-02-25  8:23       ` Stefan Priebe - Profihost AG
2017-02-27  0:46         ` Qu Wenruo
2017-02-27  7:22         ` Qu Wenruo
2017-02-27 13:43           ` Stefan Priebe - Profihost AG
2017-04-25 19:25             ` Stefan Priebe - Profihost AG
2017-04-26  0:41               ` Qu Wenruo

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).