Zygo Blaxell wrote:
commit
space_cache / nospace_cache
sdd / ssd_spread / nossd / no_ssdspread
How could those be anything other than filesystem-wide options?
Well being me, I tend to live in a fantasy world where BTRFS have
complete world domination and has become the VFS layer.
As I hav
On Fri, Jan 15, 2021 at 01:02:12AM +0100, waxhead wrote:
> > I don't think the per-subvolume storage options were ever tracked on
> > wiki, the closest match is per-subvolume mount options that's still
> > there
> >
> > https://btrfs.wiki.kernel.org/index.php/Project_ideas#Per-subvolume_mount_opti
Hi,
this is a pre-release of btrfs-progs, 5.10-rc1.
The proper release is scheduled to Monday, +3 days (2021-01-18).
Changelog:
* scrub status:
* print percentage of progress
* add size unit options
* fi usage: also print free space from statfs
* convert: copy full 64 bit timestam
While running btrfs/011 in a loop I would often ASSERT() while trying to
add a new free space entry that already existed, or get an -EEXIST while
adding a new block to the extent tree, which is another indication of
double allocation.
This occurs because when we do the free space tree population,
Currently we pass things around to figure out if we maybe free'ing data
based on the state of the delayed refs head. This makes the accounting
sort of confusing and hard to follow, as it's distinctly separate from
the delayed ref heads stuff, but also depends on it entirely.
Fix this by explicitl
v2->v3:
- Updated the changelog in patch 2 to refer to the patchset that inspired the
change.
- Added Nik's reviewed-by for patch 2.
v1->v2:
- Rebase onto latest misc-next.
- Added Nikolay's reviewed-by for the first patch.
--- Original email ---
Hello,
Nikolay discovered a regression with gene
My recent patch set "A variety of lock contention fixes", found here
https://github.com/btrfs/linux/issues/86
that reduce lock contention on the extent root by running delayed refs
less often resulted in a regression in generic/371. This test
fallocate()'s the fs until it's full, deletes all the
We have this check to make sure we don't accidentally add older devices
that may have disappeared and re-appeared with an older generation from
being added to an fs_devices. This makes sense, we don't want stale
disks in our file system. However for single disks this doesn't really
make sense. I
On 1/15/21 1:53 AM, Naohiro Aota wrote:
From: Johannes Thumshirn
Add bio_add_zone_append_page(), a wrapper around bio_add_hw_page() which
is intended to be used by file systems that directly add pages to a bio
instead of using bio_iov_iter_get_pages().
Cc: Jens Axboe
Reviewed-by: Christoph He
On 1/15/21 1:53 AM, Naohiro Aota wrote:
From: Johannes Thumshirn
Run zoned btrfs mode on non-zoned devices. This is done by "slicing
up" the block-device into static sized chunks and fake a conventional zone
on each of them. The emulated zone size is determined from the size of
device extent.
On 1/15/21 1:53 AM, Naohiro Aota wrote:
This commit extract page adding to bio part from submit_extent_page(). The
page is added only when bio_flags are the same, contiguous and the added
page fits in the same stripe as pages in the bio.
Condition checkings are reordered to allow early return to
On 1/15/21 1:53 AM, Naohiro Aota wrote:
Zoned device has its own hardware restrictions e.g. max_zone_append_size
when using REQ_OP_ZONE_APPEND. To follow the restrictions, use
bio_add_zone_append_page() instead of bio_add_page(). We need target device
to use bio_add_zone_append_page(), so this co
On 1/15/21 1:53 AM, Naohiro Aota wrote:
The zoned btrfs puts a superblock at the beginning of SB logging zones
if the zone is conventional. This difference causes a chicken-and-egg
problem for emulated zoned mode. Since the device is a regular
(non-zoned) device, we cannot know if the btrfs is re
On 1/15/21 1:53 AM, Naohiro Aota wrote:
From: Johannes Thumshirn
Since we have no write pointer in conventional zones, we cannot determine
the allocation offset from it. Instead, we set the allocation offset after
the highest addressed extent. This is done by reading the extent tree in
btrfs_lo
On Sun, Jan 10, 2021 at 08:55:36PM +0100, Goffredo Baroncelli wrote:
> On 1/9/21 10:23 PM, Zygo Blaxell wrote:
>
> > On a loaded test server, I observed 90th percentile fsync times
> > drop from 7 seconds without preferred_metadata to 0.7 seconds with
> > preferred_metadata when all the metadata i
On Fri, Jan 15, 2021 at 10:32:39AM +0100, waxhead wrote:
> Zygo Blaxell wrote:
> >
> > > > commit
> > > > space_cache / nospace_cache
> > > > sdd / ssd_spread / nossd / no_ssdspread
> >
> > How could those be anything other than filesystem-wide options?
> >
>
> Well being me, I tend to live in
On Sun, Jan 10, 2021 at 10:00:01AM +0100, Andrea Gelmini wrote:
> Il giorno sab 9 gen 2021 alle ore 22:40 Zygo Blaxell
> ha scritto:
> >
> > On Fri, Jan 08, 2021 at 08:29:45PM +0100, Andrea Gelmini wrote:
> > > Il giorno ven 8 gen 2021 alle ore 09:36 ha
> > > scritto:
> > > > What happens when I
David Sterba wrote:
On Fri, Jan 15, 2021 at 01:02:12AM +0100, waxhead wrote:
I don't think the per-subvolume storage options were ever tracked on
wiki, the closest match is per-subvolume mount options that's still
there
https://btrfs.wiki.kernel.org/index.php/Project_ideas#Per-subvolume_moun
Zygo Blaxell wrote:
On Fri, Jan 15, 2021 at 10:32:39AM +0100, waxhead wrote:
Zygo Blaxell wrote:
commit
space_cache / nospace_cache
sdd / ssd_spread / nossd / no_ssdspread
How could those be anything other than filesystem-wide options?
Well being me, I tend to live in a fantasy world
On Sat, Jan 16, 2021 at 02:57:05AM +0100, waxhead wrote:
>
>
> Zygo Blaxell wrote:
> > On Fri, Jan 15, 2021 at 10:32:39AM +0100, waxhead wrote:
> > > Zygo Blaxell wrote:
> > > >
> > > > > > commit
> > > > > > space_cache / nospace_cache
> > > > > > sdd / ssd_spread / nossd / no_ssdspread
> > > >
This patch introduce the following functions to handle btrfs subpage
uptodate status:
- btrfs_subpage_set_uptodate()
- btrfs_subpage_clear_uptodate()
- btrfs_subpage_test_uptodate()
Those helpers can only be called when the range is ensured to be
inside the page.
- btrfs_page_set_uptodate()
-
Patches can be fetched from github:
https://github.com/adam900710/linux/tree/subpage
Currently the branch also contains partial RW data support (still some
ordered extent and data csum mismatch problems)
Great thanks to David/Nikolay/Josef for their effort reviewing and
merging the preparation pat
This patch introduce the following functions to handle btrfs subpage
error status:
- btrfs_subpage_set_error()
- btrfs_subpage_clear_error()
- btrfs_subpage_test_error()
Those helpers can only be called when the range is ensured to be
inside the page.
- btrfs_page_set_error()
- btrfs_page_clea
For those functions, to support subpage size they just need to call
btrfs_page_set/clear_uptodate() wrappers.
Signed-off-by: Qu Wenruo
---
fs/btrfs/extent_io.c | 11 +++
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index 7f94f0
Introduce a new helper, read_extent_buffer_subpage(), to do the subpage
extent buffer read.
The difference between regular and subpage routines are:
- No page locking
Here we completely rely on extent locking.
Page locking can reduce the concurrency greatly, as if we lock one
page to read on
To handle subpage status update, add the following new tricks:
- Use btrfs_page_*() helpers to update page status
Now we can handle both cases well.
- No page unlock for subpage metadata
Since subpage metadata doesn't utilize page locking at all, skip it.
For subpage data locking, it's handl
In btrfs data page read path, the page status update are handled in two
different locations:
btrfs_do_read_page()
{
while (cur <= end) {
/* No need to read from disk */
if (HOLE/PREALLOC/INLINE){
memset();
For subpage metadata validation check, there are some difference:
- Read must finish in one bvec
Since we're just reading one subpage range in one page, it should
never be split into two bios nor two bvecs.
- How to grab the existing eb
Instead of grabbing eb using page->private, we have to
This adds the basic RO mount ability for 4K sector size on 64K page
system.
Currently we only plan to support 4K and 64K page system.
Signed-off-by: Qu Wenruo
---
fs/btrfs/disk-io.c | 24 +---
fs/btrfs/super.c | 7 +++
2 files changed, 28 insertions(+), 3 deletions(-)
For btrfs_clone_extent_buffer(), it's mostly the same code of
__alloc_dummy_extent_buffer(), except it has extra page copy.
So to make it subpage compatible, we only need to:
- Call set_extent_buffer_uptodate() instead of SetPageUptodate()
This will set correct uptodate bit for subpage and regul
Unlike the original try_release_extent_buffer(),
try_release_subpage_extent_buffer() will iterate through all the ebs in
the page, and try to release each eb.
And only if the page and no private attached, which implies we have
released all ebs of the page, then we can release the full page.
Signe
To support subpage sector size, data also need extra info to make sure
which sectors in a page are uptodate/dirty/...
This patch will make pages for data inodes to get btrfs_subpage
structure attached, and detached when the page is freed.
This patch also slightly changes the timing when
set_page_
For btrfs subpage support, we need a structure to record extra info for
the status of each sectors of a page.
This patch will introduce the skeleton structure for future btrfs
subpage support.
All subpage related code would go to subpage.[ch] to avoid populating
the existing code base.
Reviewed-b
For subpage case, we need to allocate new memory for each metadata page.
So we need to:
- Allow attach_extent_buffer_page() to return int
To indicate allocation failure
- Prealloc btrfs_subpage structure for alloc_extent_buffer()
We don't want to call memory allocation with spinlock hold, so
PAGE_CLEAR_DIRTY and PAGE_SET_WRITEBACK are two macros used in
__process_pages_contig(), to inform the function to clear page dirty and
then set page writeback.
However page write back and dirty are two conflict status (at least for
sector size == PAGE_SIZE case), this means those two macros are a
In btrfs_release_extent_buffer_pages(), we need to add extra handling
for subpage.
To do so, introduce a new helper, detach_extent_buffer_page(), to do
different handling for regular and subpage cases.
For subpage case, the new trick is about when to detach the page
private.
For unammped (dummy
When __process_pages_contig() get called for
extent_clear_unlock_delalloc(), if we hit the locked page, only Private2
bit is updated, but dirty/writeback/error bits are all skipped.
There are several call sites call extent_clear_unlock_delalloc() with
@locked_page and PAGE_CLEAR_DIRTY/PAGE_SET_WRI
For subpage case, grab_extent_buffer() can't really get an extent buffer
just from btrfs_subpage.
Thankfully we have radix tree lock protecting us from inserting the same
eb into the tree.
Thus we don't really need to do the extra hassle, just let
alloc_extent_buffer() to handle existing eb in ra
Even for regular btrfs, there are locations where we allocate dummy
extent buffers for temporary usage.
Like tree_mod_log_rewind() and get_old_root().
Those dummy extent buffers will be handled by the same eb accessors, and
if they don't have page::private subpage eb accessors can fail.
To addre
15.01.2021 06:54, Zygo Blaxell пишет:
>
> On the other hand, I'm in favor of deprecating the whole discard option
> and going with fstrim instead. discard in its current form tends to
> increase write wear rather than decrease it, especially on metadata-heavy
> workloads. discard is roughly equi
40 matches
Mail list logo