Re: [PATCH 2/2] mm: swap: print starting physical block offset in swapon
From: Darrick J. Wong
Date: Wed May 22 2024 - 10:56:50 EST
On Wed, May 22, 2024 at 04:46:58PM +0900, Sukrit Bhatnagar wrote:
> When a swapfile is created for hibernation purposes, we always need
> the starting physical block offset, which is usually determined using
> userspace commands such as filefrag.
If you always need this value, then shouldn't it be exported via sysfs
or somewhere so that you can always get to it? The kernel ringbuffer
can overwrite log messages, swapfiles can get disabled, etc.
> It would be good to have that value printed when we do swapon and get
> that value directly from dmesg.
>
> Signed-off-by: Sukrit Bhatnagar <Sukrit.Bhatnagar@xxxxxxxx>
> ---
> mm/swapfile.c | 3 ++-
> 1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/mm/swapfile.c b/mm/swapfile.c
> index f6ca215fb92f..53c9187d5fbe 100644
> --- a/mm/swapfile.c
> +++ b/mm/swapfile.c
> @@ -3264,8 +3264,9 @@ SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags)
> (swap_flags & SWAP_FLAG_PRIO_MASK) >> SWAP_FLAG_PRIO_SHIFT;
> enable_swap_info(p, prio, swap_map, cluster_info);
>
> - pr_info("Adding %uk swap on %s. Priority:%d extents:%d across:%lluk %s%s%s%s\n",
> + pr_info("Adding %uk swap on %s. Priority:%d extents:%d start:%llu across:%lluk %s%s%s%s\n",
> K(p->pages), name->name, p->prio, nr_extents,
> + (unsigned long long)first_se(p)->start_block,
Last time I looked, start_block was in units of PAGE_SIZE, despite
add_swap_extent confusingly (ab)using the sector_t type. Wherever you
end up reporting this value, it ought to be converted to something more
common (like byte offset or 512b-block offset).
Also ... if this is a swap *file* then reporting the path and the
physical storage device address is not that helpful. Exposing the block
device major/minor and block device address would be much more useful,
wouldn't it?
(Not that I have any idea what the "suspend process" in the cover letter
refers to -- suspend and hibernate have been broken on xfs forever...)
--D
> K((unsigned long long)span),
> (p->flags & SWP_SOLIDSTATE) ? "SS" : "",
> (p->flags & SWP_DISCARDABLE) ? "D" : "",
> --
> 2.34.1
>
>