mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-25 11:55:37 +00:00
btrfs: zoned: call blkdev_zone_mgmt in nofs scope
Add a memalloc_nofs scope around all calls to blkdev_zone_mgmt(). This allows us to further get rid of the GFP_NOFS argument for blkdev_zone_mgmt(). Signed-off-by: Johannes Thumshirn <johannes.thumshirn@wdc.com> Reviewed-by: Damien Le Moal <dlemoal@kernel.org> Reviewed-by: David Sterba <dsterba@suse.com> Link: https://lore.kernel.org/r/20240128-zonefs_nofs-v3-3-ae3b7c8def61@wdc.com Signed-off-by: Jens Axboe <axboe@kernel.dk>
This commit is contained in:
parent
218082010a
commit
d9d556755f
1 changed files with 26 additions and 7 deletions
|
@ -824,11 +824,15 @@ static int sb_log_location(struct block_device *bdev, struct blk_zone *zones,
|
|||
reset = &zones[1];
|
||||
|
||||
if (reset && reset->cond != BLK_ZONE_COND_EMPTY) {
|
||||
unsigned int nofs_flags;
|
||||
|
||||
ASSERT(sb_zone_is_full(reset));
|
||||
|
||||
nofs_flags = memalloc_nofs_save();
|
||||
ret = blkdev_zone_mgmt(bdev, REQ_OP_ZONE_RESET,
|
||||
reset->start, reset->len,
|
||||
GFP_NOFS);
|
||||
GFP_KERNEL);
|
||||
memalloc_nofs_restore(nofs_flags);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
@ -974,11 +978,14 @@ int btrfs_advance_sb_log(struct btrfs_device *device, int mirror)
|
|||
* explicit ZONE_FINISH is not necessary.
|
||||
*/
|
||||
if (zone->wp != zone->start + zone->capacity) {
|
||||
unsigned int nofs_flags;
|
||||
int ret;
|
||||
|
||||
nofs_flags = memalloc_nofs_save();
|
||||
ret = blkdev_zone_mgmt(device->bdev,
|
||||
REQ_OP_ZONE_FINISH, zone->start,
|
||||
zone->len, GFP_NOFS);
|
||||
zone->len, GFP_KERNEL);
|
||||
memalloc_nofs_restore(nofs_flags);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
|
@ -996,11 +1003,13 @@ int btrfs_advance_sb_log(struct btrfs_device *device, int mirror)
|
|||
|
||||
int btrfs_reset_sb_log_zones(struct block_device *bdev, int mirror)
|
||||
{
|
||||
unsigned int nofs_flags;
|
||||
sector_t zone_sectors;
|
||||
sector_t nr_sectors;
|
||||
u8 zone_sectors_shift;
|
||||
u32 sb_zone;
|
||||
u32 nr_zones;
|
||||
int ret;
|
||||
|
||||
zone_sectors = bdev_zone_sectors(bdev);
|
||||
zone_sectors_shift = ilog2(zone_sectors);
|
||||
|
@ -1011,9 +1020,13 @@ int btrfs_reset_sb_log_zones(struct block_device *bdev, int mirror)
|
|||
if (sb_zone + 1 >= nr_zones)
|
||||
return -ENOENT;
|
||||
|
||||
return blkdev_zone_mgmt(bdev, REQ_OP_ZONE_RESET,
|
||||
zone_start_sector(sb_zone, bdev),
|
||||
zone_sectors * BTRFS_NR_SB_LOG_ZONES, GFP_NOFS);
|
||||
nofs_flags = memalloc_nofs_save();
|
||||
ret = blkdev_zone_mgmt(bdev, REQ_OP_ZONE_RESET,
|
||||
zone_start_sector(sb_zone, bdev),
|
||||
zone_sectors * BTRFS_NR_SB_LOG_ZONES,
|
||||
GFP_KERNEL);
|
||||
memalloc_nofs_restore(nofs_flags);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1124,12 +1137,15 @@ static void btrfs_dev_clear_active_zone(struct btrfs_device *device, u64 pos)
|
|||
int btrfs_reset_device_zone(struct btrfs_device *device, u64 physical,
|
||||
u64 length, u64 *bytes)
|
||||
{
|
||||
unsigned int nofs_flags;
|
||||
int ret;
|
||||
|
||||
*bytes = 0;
|
||||
nofs_flags = memalloc_nofs_save();
|
||||
ret = blkdev_zone_mgmt(device->bdev, REQ_OP_ZONE_RESET,
|
||||
physical >> SECTOR_SHIFT, length >> SECTOR_SHIFT,
|
||||
GFP_NOFS);
|
||||
GFP_KERNEL);
|
||||
memalloc_nofs_restore(nofs_flags);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
@ -2234,14 +2250,17 @@ static int do_zone_finish(struct btrfs_block_group *block_group, bool fully_writ
|
|||
struct btrfs_device *device = map->stripes[i].dev;
|
||||
const u64 physical = map->stripes[i].physical;
|
||||
struct btrfs_zoned_device_info *zinfo = device->zone_info;
|
||||
unsigned int nofs_flags;
|
||||
|
||||
if (zinfo->max_active_zones == 0)
|
||||
continue;
|
||||
|
||||
nofs_flags = memalloc_nofs_save();
|
||||
ret = blkdev_zone_mgmt(device->bdev, REQ_OP_ZONE_FINISH,
|
||||
physical >> SECTOR_SHIFT,
|
||||
zinfo->zone_size >> SECTOR_SHIFT,
|
||||
GFP_NOFS);
|
||||
GFP_KERNEL);
|
||||
memalloc_nofs_restore(nofs_flags);
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
|
|
Loading…
Reference in a new issue