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
___
linux-um mailing list
linux-um@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-um
return -EFAULT;
>
> - range.minlen = max_t(u64, q->limits.discard_granularity,
> + range.minlen = max_t(u64,
> bdev_discard_granularity(sb->s_bdev),
> range.minlen);
> ret = ocfs2_trim_fs(sb
misreading 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
___