f (!nilfs->ns_writer)
> return -ENOMEM;
>
> - inode_attach_wb(nilfs->ns_bdev->bd_inode, NULL);
> + bdev_attach_wb(nilfs->ns_bdev);
>
> err = nilfs_segctor_start_thread(nilfs->ns_writer);
> if (unlikely(err))
> --
> 2.39.2
>
Acked-by: Ryusuke Konishi
Thanks,
Ryusuke Konishi
pages(void)
>
> extern void blk_io_schedule(void);
>
> -#define BLKDEV_DISCARD_SECURE (1 << 0)/* issue a secure erase */
> -
> -extern int blkdev_issue_discard(struct block_device *bdev, sector_t sector,
> - sector_t nr_sects, gfp_t gfp_mask, unsigned long flags);
> -extern int __blkdev_issue_discard(struct block_device *bdev, sector_t sector,
> - sector_t nr_sects, gfp_t gfp_mask, int flags,
> - struct bio **biop);
> +int blkdev_issue_discard(struct block_device *bdev, sector_t sector,
> + sector_t nr_sects, gfp_t gfp_mask);
> +int __blkdev_issue_discard(struct block_device *bdev, sector_t sector,
> + sector_t nr_sects, gfp_t gfp_mask, struct bio **biop);
> +int blkdev_issue_secure_erase(struct block_device *bdev, sector_t sector,
> + sector_t nr_sects, gfp_t gfp);
>
> #define BLKDEV_ZERO_NOUNMAP(1 << 0) /* do not free blocks */
> #define BLKDEV_ZERO_NOFALLBACK (1 << 1) /* don't write explicit zeroes */
> @@ -1112,7 +,7 @@ static inline int sb_issue_discard(struct super_block
> *sb, sector_t block,
> SECTOR_SHIFT),
> nr_blocks << (sb->s_blocksize_bits -
> SECTOR_SHIFT),
> - gfp_mask, flags);
> + gfp_mask);
> }
> static inline int sb_issue_zeroout(struct super_block *sb, sector_t block,
> sector_t nr_blocks, gfp_t gfp_mask)
> @@ -1262,6 +1261,12 @@ static inline unsigned int
> bdev_discard_granularity(struct block_device *bdev)
> return bdev_get_queue(bdev)->limits.discard_granularity;
> }
>
> +static inline unsigned int
> +bdev_max_secure_erase_sectors(struct block_device *bdev)
> +{
> + return bdev_get_queue(bdev)->limits.max_secure_erase_sectors;
> +}
> +
> static inline unsigned int bdev_write_zeroes_sectors(struct block_device
> *bdev)
> {
> struct request_queue *q = bdev_get_queue(bdev);
> diff --git a/mm/swapfile.c b/mm/swapfile.c
> index 5d9cedf9e7b84..a2b31fea0c42e 100644
> --- a/mm/swapfile.c
> +++ b/mm/swapfile.c
> @@ -179,7 +179,7 @@ static int discard_swap(struct swap_info_struct *si)
> nr_blocks = ((sector_t)se->nr_pages - 1) << (PAGE_SHIFT - 9);
> if (nr_blocks) {
> err = blkdev_issue_discard(si->bdev, start_block,
> - nr_blocks, GFP_KERNEL, 0);
> + nr_blocks, GFP_KERNEL);
> if (err)
> return err;
> cond_resched();
> @@ -190,7 +190,7 @@ static int discard_swap(struct swap_info_struct *si)
> nr_blocks = (sector_t)se->nr_pages << (PAGE_SHIFT - 9);
>
> err = blkdev_issue_discard(si->bdev, start_block,
> - nr_blocks, GFP_KERNEL, 0);
> + nr_blocks, GFP_KERNEL);
> if (err)
> break;
>
> @@ -254,7 +254,7 @@ static void discard_swap_cluster(struct swap_info_struct
> *si,
> start_block <<= PAGE_SHIFT - 9;
> nr_blocks <<= PAGE_SHIFT - 9;
> if (blkdev_issue_discard(si->bdev, start_block,
> - nr_blocks, GFP_NOIO, 0))
> + nr_blocks, GFP_NOIO))
> break;
>
> se = next_se(se);
> --
> 2.30.2
>
For nilfs2 pieces,
Acked-by: Ryusuke Konishi
Thanks,
Ryusuke Konishi
ge.minlen = max_t(u64,
> bdev_discard_granularity(sb->s_bdev),
> range.minlen);
> ret = ocfs2_trim_fs(sb, );
> if (ret < 0)
> diff --git a/fs/xfs/xfs_discard.c b/fs/xfs/xfs_discard.c
> index a4e6609d616b7..e2ada115c23f9 100644
> --- a/fs/xfs/xfs_discard.c
> +++ b/fs/xfs/xfs_discard.c
> @@ -152,8 +152,8 @@ xfs_ioc_trim(
> struct xfs_mount*mp,
> struct fstrim_range __user *urange)
> {
> - struct request_queue*q =
> bdev_get_queue(mp->m_ddev_targp->bt_bdev);
> - unsigned intgranularity = q->limits.discard_granularity;
> + unsigned intgranularity =
> + bdev_discard_granularity(mp->m_ddev_targp->bt_bdev);
> struct fstrim_range range;
> xfs_daddr_t start, end, minlen;
> xfs_agnumber_t start_agno, end_agno, agno;
> diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h
> index ce16247d3afab..7b9c0cf95d2d5 100644
> --- a/include/linux/blkdev.h
> +++ b/include/linux/blkdev.h
> @@ -1259,6 +1259,11 @@ static inline unsigned int
> bdev_max_discard_sectors(struct block_device *bdev)
> return bdev_get_queue(bdev)->limits.max_discard_sectors;
> }
>
> +static inline unsigned int bdev_discard_granularity(struct block_device
> *bdev)
> +{
> + return bdev_get_queue(bdev)->limits.discard_granularity;
> +}
> +
> static inline unsigned int bdev_write_zeroes_sectors(struct block_device
> *bdev)
> {
> struct request_queue *q = bdev_get_queue(bdev);
> --
> 2.30.2
>
I got the following checkpatch warning:
WARNING: 'retreive' may be misspelled - perhaps 'retrieve'?
#101:
block_device based helper to retreive the discard granularity.
total: 0 errors, 1 warnings, 294 lines checked
The changes themselves look good.
Acked-by: Ryusuke Konishi
Thanks,
Ryusuke Konishi
eading things, could you please document that
> bdev_max_discard_sectors() != 0 implies that discard is supported?
I got the same impression. Checking the discard support with
bdev_max_discard_sectors() != 0 seems a bit unclear than before.
Thanks,
Ryusuke Konishi
On Wed, Mar 23, 2022 at 3:42 PM Christoph Hellwig wrote:
>
> On Wed, Mar 23, 2022 at 06:38:22AM +0900, Ryusuke Konishi wrote:
> > This looks because the mask of GFP_KERNEL is removed along with
> > the removal of mpage_alloc().
> >
>
> > The def
t;is_readahead) {
op |= REQ_RAHEAD;
gfp = readahead_gfp_mask(page->mapping);
} else {
gfp = mapping_gfp_constraint(page->mapping, GFP_KERNEL);
}
The default value of the gfp flag is set to GFP_HIGHUSER_MOVABLE by
inode_init_alway
/nilfs2/segbuf.c | 31 ---
> 1 file changed, 4 insertions(+), 27 deletions(-)
Acked-by: Ryusuke Konishi
Thanks!
Ryusuke Konishi