| Message ID | 20260512053625.2950900-8-hch@lst.de |
|---|---|
| State | Not Applicable |
| Headers | show |
| Series | [01/12] swap: remove the maxpages variable in sys_swapon | expand |
On 5/12/26 14:35, Christoph Hellwig wrote: > Don't blindly pass the value from the swap header to swap_add_extent, > but instead the device size rounded down to page granularity. This > activated the sanity checking in the core code that catches a too large > value in the swap header. > > Signed-off-by: Christoph Hellwig <hch@lst.de> Looks OK to me, though this maybe could be folded in the previous patch ? Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
On Tue, May 12, 2026 at 04:21:47PM +0900, Damien Le Moal wrote: > On 5/12/26 14:35, Christoph Hellwig wrote: > > Don't blindly pass the value from the swap header to swap_add_extent, > > but instead the device size rounded down to page granularity. This > > activated the sanity checking in the core code that catches a too large > > value in the swap header. > > > > Signed-off-by: Christoph Hellwig <hch@lst.de> > > Looks OK to me, though this maybe could be folded in the previous patch ? I prefer to keep behavior changes as isolated as possible.
On Tue, May 12, 2026 at 07:35:23AM +0200, Christoph Hellwig wrote: > Don't blindly pass the value from the swap header to swap_add_extent, > but instead the device size rounded down to page granularity. This > activated the sanity checking in the core code that catches a too large > value in the swap header. > > Signed-off-by: Christoph Hellwig <hch@lst.de> > --- > block/fops.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-) > > diff --git a/block/fops.c b/block/fops.c > index 453141801684..067e46299666 100644 > --- a/block/fops.c > +++ b/block/fops.c > @@ -951,7 +951,9 @@ static int blkdev_mmap_prepare(struct vm_area_desc *desc) > > static int blkdev_swap_activate(struct file *file, struct swap_info_struct *sis) > { > - return add_swap_extent(sis, sis->max, 0); > + loff_t isize = i_size_read(bdev_file_inode(file)); Good catch! Reviewed-by: "Darrick J. Wong" <djwong@kernel.org> --D > + > + return add_swap_extent(sis, div_u64(isize, PAGE_SIZE), 0); > } > > const struct file_operations def_blk_fops = { > -- > 2.53.0 > >
diff --git a/block/fops.c b/block/fops.c index 453141801684..067e46299666 100644 --- a/block/fops.c +++ b/block/fops.c @@ -951,7 +951,9 @@ static int blkdev_mmap_prepare(struct vm_area_desc *desc) static int blkdev_swap_activate(struct file *file, struct swap_info_struct *sis) { - return add_swap_extent(sis, sis->max, 0); + loff_t isize = i_size_read(bdev_file_inode(file)); + + return add_swap_extent(sis, div_u64(isize, PAGE_SIZE), 0); } const struct file_operations def_blk_fops = {
Don't blindly pass the value from the swap header to swap_add_extent, but instead the device size rounded down to page granularity. This activated the sanity checking in the core code that catches a too large value in the swap header. Signed-off-by: Christoph Hellwig <hch@lst.de> --- block/fops.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)