btrfs: zoned: only allow one process to add pages to a relocation inode
Don't allow more than one process to add pages to a relocation inode on a zoned filesystem, otherwise we cannot guarantee the sequential write rule once we're filling preallocated extents on a zoned filesystem. Signed-off-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
c2707a2556
commit
35156d8527
1 changed files with 11 additions and 0 deletions
|
@ -5132,6 +5132,9 @@ int extent_write_locked_range(struct inode *inode, u64 start, u64 end,
|
||||||
int extent_writepages(struct address_space *mapping,
|
int extent_writepages(struct address_space *mapping,
|
||||||
struct writeback_control *wbc)
|
struct writeback_control *wbc)
|
||||||
{
|
{
|
||||||
|
struct inode *inode = mapping->host;
|
||||||
|
const bool data_reloc = btrfs_is_data_reloc_root(BTRFS_I(inode)->root);
|
||||||
|
const bool zoned = btrfs_is_zoned(BTRFS_I(inode)->root->fs_info);
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
struct extent_page_data epd = {
|
struct extent_page_data epd = {
|
||||||
.bio_ctrl = { 0 },
|
.bio_ctrl = { 0 },
|
||||||
|
@ -5139,7 +5142,15 @@ int extent_writepages(struct address_space *mapping,
|
||||||
.sync_io = wbc->sync_mode == WB_SYNC_ALL,
|
.sync_io = wbc->sync_mode == WB_SYNC_ALL,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Allow only a single thread to do the reloc work in zoned mode to
|
||||||
|
* protect the write pointer updates.
|
||||||
|
*/
|
||||||
|
if (data_reloc && zoned)
|
||||||
|
btrfs_inode_lock(inode, 0);
|
||||||
ret = extent_write_cache_pages(mapping, wbc, &epd);
|
ret = extent_write_cache_pages(mapping, wbc, &epd);
|
||||||
|
if (data_reloc && zoned)
|
||||||
|
btrfs_inode_unlock(inode, 0);
|
||||||
ASSERT(ret <= 0);
|
ASSERT(ret <= 0);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
end_write_bio(&epd, ret);
|
end_write_bio(&epd, ret);
|
||||||
|
|
Loading…
Add table
Reference in a new issue