[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID:
<TYAPR01MB40481A5A5DC3FA97917404E2F6F02@TYAPR01MB4048.jpnprd01.prod.outlook.com>
Date: Mon, 27 May 2024 12:51:07 +0000
From: "Sukrit.Bhatnagar@...y.com" <Sukrit.Bhatnagar@...y.com>
To: Christoph Hellwig <hch@...radead.org>
CC: Pavel Machek <pavel@....cz>, "Rafael J. Wysocki" <rafael@...nel.org>,
Christian Brauner <brauner@...nel.org>,
"Darrick J. Wong"
<djwong@...nel.org>,
Andrew Morton <akpm@...ux-foundation.org>,
"linux-xfs@...r.kernel.org" <linux-xfs@...r.kernel.org>,
"linux-pm@...r.kernel.org" <linux-pm@...r.kernel.org>,
"linux-fsdevel@...r.kernel.org" <linux-fsdevel@...r.kernel.org>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
"linux-mm@...ck.org" <linux-mm@...ck.org>
Subject: RE: [PATCH 0/2] Improve dmesg output for swapfile+hibernation
Hi Christoph,
On 2024-05-27 20:20, Christoph Hellwig wrote:
> On Mon, May 27, 2024 at 11:06:11AM +0000, Sukrit.Bhatnagar@...y.com wrote:
>> We can pass the starting physical block offset of a swapfile into
>> /sys/power/resume_offset, and hibernate can directly read/write
>> into it using the swap extents information created by iomap during
>> swapon. On resume, the kernel would read this offset value from
>> the commandline parameters, and then access the swapfile.
>
> Reading a physical address from userspace is not a proper interface.
> What is this code even trying to do with it?
I understand your point. Ideally, the low-level stuff such as finding
the physical block offset should not be handled in the userspace.
In my understanding, the resume offset in hibernate is used as follows.
Suspend
- Hibernate looks up the swap/swapfile using the details we pass in the
sysfs entries, in the function swsusp_swap_check():
* /sys/power/resume - path/uuid/major:minor of the swap partition (or
non-swap partition for swapfile)
* /sys/power/resume_offset - physical offset of the swapfile in that
partition
* If no resume device is specified, it just uses the first available swap!
- It then proceeds to write the image to the specified swap.
(The allocation of swap pages is done by the swapfile code internally.)
- When writing is finished, the swap header needs to be updated with some
metadata, in the function mark_swapfiles().
* Hibernate creates bio requests to read/write the header (which is the
first page of swap) using that physical block offset.
Resume
- Hibernate gets the partition and offset values from kernel command-line
parameters "resume" and "resume_offset" (which must be set from
userspace, not ideal).
- It checks for valid hibernate swap signature by reading the swap header.
* Hibernate creates bio requests again, using the physical block offset,
but the one from kernel command-line this time.
- Then it restores image and resumes into the previously saved kernel.
--
Sukrit
Powered by blists - more mailing lists