2015-05-03 15:54:51

by Chen Yu

[permalink] [raw]
Subject: [4.1-rc1][Hibernation failed] bisect result included

Hi,all,
When we are doing QA test, a hibernation failor was found on latest kernel 4.1-rc1,
resume from hibernation failed with the following error:

PM: Hibernation image not present or could not be loaded.

Bisect shows following commit might trigger this problem:
commit 283e7ad0241155710f99a9f39d13313a53336926

The reason for failor is that, some distribution use klibc in initrd
to restore the image, and klibc will provide kernel with the device
format of major:minor:offset,
for example, 8:3:0 represents a swap partition, and klibc will
echo 8:3:0 > /sys/power/resume to resume the system manually.
However in current implementation, format of 8:3:0 will be regarded
as an invalid device, so restoring from hibernation failed.

Do we need to add support for device format like 8:3:0?
I'm happy to debug more specifically if you can let me know what
would be of use, and I've also attached a temporary patch
for this problem, not sure if it is suitable, thanks.




Best Regards,
Yu


Attachments:
0001-init-support-device-of-major-minor-offset-format.patch (1.56 kB)
0001-init-support-device-of-major-minor-offset-format.patch

2015-05-03 18:24:15

by Martin Steigerwald

[permalink] [raw]
Subject: Re: [4.1-rc1][Hibernation failed] bisect result included

Am Sonntag, 3. Mai 2015, 15:54:39 schrieb Chen, Yu C:
> Hi,all,

Hello!

> When we are doing QA test, a hibernation failor was found on latest kernel 4.1-rc1,
> resume from hibernation failed with the following error:
>
> PM: Hibernation image not present or could not be loaded.
>
> Bisect shows following commit might trigger this problem:
> commit 283e7ad0241155710f99a9f39d13313a53336926
>
> The reason for failor is that, some distribution use klibc in initrd
> to restore the image, and klibc will provide kernel with the device
> format of major:minor:offset,
> for example, 8:3:0 represents a swap partition, and klibc will
> echo 8:3:0 > /sys/power/resume to resume the system manually.
> However in current implementation, format of 8:3:0 will be regarded
> as an invalid device, so restoring from hibernation failed.
>
> Do we need to add support for device format like 8:3:0?
> I'm happy to debug more specifically if you can let me know what
> would be of use, and I've also attached a temporary patch
> for this problem, not sure if it is suitable, thanks.

Wow, great.

I just reported this as well, but you bisected it already.

So seems Debian?s initramfs uses klibc. Appears so:

https://wiki.debian.org/initramfs

merkaba:/boot> lsinitramfs -l initrd.img-4.0.1-tp520-btrfs-trim-norace+ | egrep "klibc|libc.so"
-rwxr-xr-x 1 root root 1729984 Apr 15 02:01 lib/x86_64-linux-gnu/libc.so.6
-rwxr-xr-x 1 root root 71416 Oct 5 2014 lib/klibc-IpHGKKbZiB_yZ7GPagmQz2GwVAQ.so

It seems to contain a glibc as well.

Ciao,
--
Martin 'Helios' Steigerwald - http://www.Lichtvoll.de
GPG: 03B0 0D6C 0040 0710 4AFA B82F 991B EAAC A599 84C7

2015-05-04 07:46:29

by Chen Yu

[permalink] [raw]
Subject: Re: [4.1-rc1][Hibernation failed] bisect result included

On 05/04/2015 02:24 AM, Martin Steigerwald wrote:
> Am Sonntag, 3. Mai 2015, 15:54:39 schrieb Chen, Yu C:
>> Hi,all,
>
> Hello!
>
>> When we are doing QA test, a hibernation failor was found on latest kernel 4.1-rc1,
>> resume from hibernation failed with the following error:
>>
>> PM: Hibernation image not present or could not be loaded.
>>
>> Bisect shows following commit might trigger this problem:
>> commit 283e7ad0241155710f99a9f39d13313a53336926
>>
>> The reason for failor is that, some distribution use klibc in initrd
>> to restore the image, and klibc will provide kernel with the device
>> format of major:minor:offset,
>> for example, 8:3:0 represents a swap partition, and klibc will
>> echo 8:3:0 > /sys/power/resume to resume the system manually.
>> However in current implementation, format of 8:3:0 will be regarded
>> as an invalid device, so restoring from hibernation failed.
>>
>> Do we need to add support for device format like 8:3:0?
>> I'm happy to debug more specifically if you can let me know what
>> would be of use, and I've also attached a temporary patch
>> for this problem, not sure if it is suitable, thanks.
>
> Wow, great.
>
> I just reported this as well, but you bisected it already.
>
Oh, I saw your thread :)
> So seems Debian?s initramfs uses klibc. Appears so:
>
The place where klibc stores the major:minor:offset to sysfs is:
klibc/usr/kinit/resume/resumelib.c: resume

> https://wiki.debian.org/initramfs
>
> merkaba:/boot> lsinitramfs -l initrd.img-4.0.1-tp520-btrfs-trim-norace+ | egrep "klibc|libc.so"
> -rwxr-xr-x 1 root root 1729984 Apr 15 02:01 lib/x86_64-linux-gnu/libc.so.6
> -rwxr-xr-x 1 root root 71416 Oct 5 2014 lib/klibc-IpHGKKbZiB_yZ7GPagmQz2GwVAQ.so
>
> It seems to contain a glibc as well.
>
> Ciao,
>

2015-05-04 13:43:34

by Rafael J. Wysocki

[permalink] [raw]
Subject: Re: [4.1-rc1][Hibernation failed] bisect result included

On Sunday, May 03, 2015 03:54:39 PM Chen, Yu C wrote:
> Hi,all,
> When we are doing QA test, a hibernation failor was found on latest kernel 4.1-rc1,
> resume from hibernation failed with the following error:
>
> PM: Hibernation image not present or could not be loaded.
>
> Bisect shows following commit might trigger this problem:
> commit 283e7ad0241155710f99a9f39d13313a53336926
>
> The reason for failor is that, some distribution use klibc in initrd
> to restore the image, and klibc will provide kernel with the device
> format of major:minor:offset,
> for example, 8:3:0 represents a swap partition, and klibc will
> echo 8:3:0 > /sys/power/resume to resume the system manually.
> However in current implementation, format of 8:3:0 will be regarded
> as an invalid device, so restoring from hibernation failed.
>
> Do we need to add support for device format like 8:3:0?
> I'm happy to debug more specifically if you can let me know what
> would be of use, and I've also attached a temporary patch
> for this problem, not sure if it is suitable, thanks.

It'd be better to send the patch inline so it is not lost in replies.
Reproduced below.

Dan, Mike, any chance to look at this? It is a functional regression for
some people.


---
>From a65d76c143b315c322b5c7a9fb365703c9f32798 Mon Sep 17 00:00:00 2001
From: Chen Yu <[email protected]>
Date: Sun, 3 May 2015 22:35:05 +0800
Subject: [RFC] init: support device of major:minor:offset format

Distribution like Ubuntu uses klibc rather than uswsusp to resume
system from hibernation, which will treat swap partition/file in
the form of major:minor:offset. For example, 8:3:0 represents a
swap partition in klibc, and klibc's resume process in initrd will
finally echo 8:3:0 to /sys/power/resume for manually restoring.
However in current implementation, 8:3:0 will be treated as an invalid
device format, and it is found that manual resumming from hibernation
will fail on lastest kernel.

This patch adds support for device with major:minor:offset format
when resumming from hibernation.

Reported-by: Prigent, Christophe <[email protected]>

Signed-off-by: Chen Yu <[email protected]>
---
init/do_mounts.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/init/do_mounts.c b/init/do_mounts.c
index 8369ffa..2d36bf1 100644
--- a/init/do_mounts.c
+++ b/init/do_mounts.c
@@ -225,10 +225,12 @@ dev_t name_to_dev_t(const char *name)
#endif

if (strncmp(name, "/dev/", 5) != 0) {
- unsigned maj, min;
+ unsigned maj, min, offset;
char dummy;

- if (sscanf(name, "%u:%u%c", &maj, &min, &dummy) == 2) {
+ if ((sscanf(name, "%u:%u%c", &maj, &min, &dummy) == 2) ||
+ (sscanf(name, "%u:%u:%u:%c", &maj, &min, &offset,
+ &dummy) == 3)) {
res = MKDEV(maj, min);
if (maj != MAJOR(res) || min != MINOR(res))
goto fail;
--
1.9.1

2015-05-04 14:27:02

by Mike Snitzer

[permalink] [raw]
Subject: Re: [4.1-rc1][Hibernation failed] bisect result included

On Mon, May 04 2015 at 10:08am -0400,
Rafael J. Wysocki <[email protected]> wrote:

> On Sunday, May 03, 2015 03:54:39 PM Chen, Yu C wrote:
> > Hi,all,
> > When we are doing QA test, a hibernation failor was found on latest kernel 4.1-rc1,
> > resume from hibernation failed with the following error:
> >
> > PM: Hibernation image not present or could not be loaded.
> >
> > Bisect shows following commit might trigger this problem:
> > commit 283e7ad0241155710f99a9f39d13313a53336926
> >
> > The reason for failor is that, some distribution use klibc in initrd
> > to restore the image, and klibc will provide kernel with the device
> > format of major:minor:offset,
> > for example, 8:3:0 represents a swap partition, and klibc will
> > echo 8:3:0 > /sys/power/resume to resume the system manually.
> > However in current implementation, format of 8:3:0 will be regarded
> > as an invalid device, so restoring from hibernation failed.
> >
> > Do we need to add support for device format like 8:3:0?
> > I'm happy to debug more specifically if you can let me know what
> > would be of use, and I've also attached a temporary patch
> > for this problem, not sure if it is suitable, thanks.
>
> It'd be better to send the patch inline so it is not lost in replies.
> Reproduced below.
>
> Dan, Mike, any chance to look at this? It is a functional regression for
> some people.

Sorry about this. Wasn't aware that such a strange format was being
used. The proposed patch looks good to me (formatting is a bit weird
though, the last "&dummy) == 3)) {" line shouldnt be needed if previous
line isn't indented so far.

Unless other more official init maintainer(s) want to pick this fix up:
since I committed the commit that caused this regression I can pick this
patch up and get it to Linus for 4.1-rc3 inclussion via linux-dm.git.
Please just let me know, thanks!

> ---
> From a65d76c143b315c322b5c7a9fb365703c9f32798 Mon Sep 17 00:00:00 2001
> From: Chen Yu <[email protected]>
> Date: Sun, 3 May 2015 22:35:05 +0800
> Subject: [RFC] init: support device of major:minor:offset format
>
> Distribution like Ubuntu uses klibc rather than uswsusp to resume
> system from hibernation, which will treat swap partition/file in
> the form of major:minor:offset. For example, 8:3:0 represents a
> swap partition in klibc, and klibc's resume process in initrd will
> finally echo 8:3:0 to /sys/power/resume for manually restoring.
> However in current implementation, 8:3:0 will be treated as an invalid
> device format, and it is found that manual resumming from hibernation
> will fail on lastest kernel.
>
> This patch adds support for device with major:minor:offset format
> when resumming from hibernation.
>
> Reported-by: Prigent, Christophe <[email protected]>
>
> Signed-off-by: Chen Yu <[email protected]>
> ---
> init/do_mounts.c | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/init/do_mounts.c b/init/do_mounts.c
> index 8369ffa..2d36bf1 100644
> --- a/init/do_mounts.c
> +++ b/init/do_mounts.c
> @@ -225,10 +225,12 @@ dev_t name_to_dev_t(const char *name)
> #endif
>
> if (strncmp(name, "/dev/", 5) != 0) {
> - unsigned maj, min;
> + unsigned maj, min, offset;
> char dummy;
>
> - if (sscanf(name, "%u:%u%c", &maj, &min, &dummy) == 2) {
> + if ((sscanf(name, "%u:%u%c", &maj, &min, &dummy) == 2) ||
> + (sscanf(name, "%u:%u:%u:%c", &maj, &min, &offset,
> + &dummy) == 3)) {
> res = MKDEV(maj, min);
> if (maj != MAJOR(res) || min != MINOR(res))
> goto fail;
> --
> 1.9.1
>
>

2015-05-04 21:01:13

by Rafael J. Wysocki

[permalink] [raw]
Subject: Re: [4.1-rc1][Hibernation failed] bisect result included

On Monday, May 04, 2015 10:26:54 AM Mike Snitzer wrote:
> On Mon, May 04 2015 at 10:08am -0400,
> Rafael J. Wysocki <[email protected]> wrote:
>
> > On Sunday, May 03, 2015 03:54:39 PM Chen, Yu C wrote:
> > > Hi,all,
> > > When we are doing QA test, a hibernation failor was found on latest kernel 4.1-rc1,
> > > resume from hibernation failed with the following error:
> > >
> > > PM: Hibernation image not present or could not be loaded.
> > >
> > > Bisect shows following commit might trigger this problem:
> > > commit 283e7ad0241155710f99a9f39d13313a53336926
> > >
> > > The reason for failor is that, some distribution use klibc in initrd
> > > to restore the image, and klibc will provide kernel with the device
> > > format of major:minor:offset,
> > > for example, 8:3:0 represents a swap partition, and klibc will
> > > echo 8:3:0 > /sys/power/resume to resume the system manually.
> > > However in current implementation, format of 8:3:0 will be regarded
> > > as an invalid device, so restoring from hibernation failed.
> > >
> > > Do we need to add support for device format like 8:3:0?
> > > I'm happy to debug more specifically if you can let me know what
> > > would be of use, and I've also attached a temporary patch
> > > for this problem, not sure if it is suitable, thanks.
> >
> > It'd be better to send the patch inline so it is not lost in replies.
> > Reproduced below.
> >
> > Dan, Mike, any chance to look at this? It is a functional regression for
> > some people.
>
> Sorry about this. Wasn't aware that such a strange format was being
> used. The proposed patch looks good to me (formatting is a bit weird
> though, the last "&dummy) == 3)) {" line shouldnt be needed if previous
> line isn't indented so far.
>
> Unless other more official init maintainer(s) want to pick this fix up:
> since I committed the commit that caused this regression I can pick this
> patch up and get it to Linus for 4.1-rc3 inclussion via linux-dm.git.
> Please just let me know, thanks!

Please pick it up if you can. I won't bet any amount of money on anyone
else doing that ...


--
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.

2015-05-05 02:27:58

by Chen Yu

[permalink] [raw]
Subject: Re: [4.1-rc1][Hibernation failed] bisect result included

On 05/04/2015 10:26 PM, Mike Snitzer wrote:
> On Mon, May 04 2015 at 10:08am -0400,
> Rafael J. Wysocki <[email protected]> wrote:
>
>> On Sunday, May 03, 2015 03:54:39 PM Chen, Yu C wrote:
>>> Hi,all,
>>> When we are doing QA test, a hibernation failor was found on latest kernel 4.1-rc1,
>>> resume from hibernation failed with the following error:
>>>
>>> PM: Hibernation image not present or could not be loaded.
>>>
>>> Bisect shows following commit might trigger this problem:
>>> commit 283e7ad0241155710f99a9f39d13313a53336926
>>>
>>> The reason for failor is that, some distribution use klibc in initrd
>>> to restore the image, and klibc will provide kernel with the device
>>> format of major:minor:offset,
>>> for example, 8:3:0 represents a swap partition, and klibc will
>>> echo 8:3:0 > /sys/power/resume to resume the system manually.
>>> However in current implementation, format of 8:3:0 will be regarded
>>> as an invalid device, so restoring from hibernation failed.
>>>
>>> Do we need to add support for device format like 8:3:0?
>>> I'm happy to debug more specifically if you can let me know what
>>> would be of use, and I've also attached a temporary patch
>>> for this problem, not sure if it is suitable, thanks.
>>
>> It'd be better to send the patch inline so it is not lost in replies.
>> Reproduced below.
>>
>> Dan, Mike, any chance to look at this? It is a functional regression for
>> some people.
>
> Sorry about this. Wasn't aware that such a strange format was being
> used. The proposed patch looks good to me (formatting is a bit weird
> though, the last "&dummy) == 3)) {" line shouldnt be needed if previous
> line isn't indented so far.
>

Thank you very much, Mike and Rafeal,
I'll send another version titled with V2 for review.

Best Regards,
Yu

> Unless other more official init maintainer(s) want to pick this fix up:
> since I committed the commit that caused this regression I can pick this
> patch up and get it to Linus for 4.1-rc3 inclussion via linux-dm.git.
> Please just let me know, thanks!
>
>> ---
>> From a65d76c143b315c322b5c7a9fb365703c9f32798 Mon Sep 17 00:00:00 2001
>> From: Chen Yu <[email protected]>
>> Date: Sun, 3 May 2015 22:35:05 +0800
>> Subject: [RFC] init: support device of major:minor:offset format
>>
>> Distribution like Ubuntu uses klibc rather than uswsusp to resume
>> system from hibernation, which will treat swap partition/file in
>> the form of major:minor:offset. For example, 8:3:0 represents a
>> swap partition in klibc, and klibc's resume process in initrd will
>> finally echo 8:3:0 to /sys/power/resume for manually restoring.
>> However in current implementation, 8:3:0 will be treated as an invalid
>> device format, and it is found that manual resumming from hibernation
>> will fail on lastest kernel.
>>
>> This patch adds support for device with major:minor:offset format
>> when resumming from hibernation.
>>
>> Reported-by: Prigent, Christophe <[email protected]>
>>
>> Signed-off-by: Chen Yu <[email protected]>
>> ---
>> init/do_mounts.c | 6 ++++--
>> 1 file changed, 4 insertions(+), 2 deletions(-)
>>
>> diff --git a/init/do_mounts.c b/init/do_mounts.c
>> index 8369ffa..2d36bf1 100644
>> --- a/init/do_mounts.c
>> +++ b/init/do_mounts.c
>> @@ -225,10 +225,12 @@ dev_t name_to_dev_t(const char *name)
>> #endif
>>
>> if (strncmp(name, "/dev/", 5) != 0) {
>> - unsigned maj, min;
>> + unsigned maj, min, offset;
>> char dummy;
>>
>> - if (sscanf(name, "%u:%u%c", &maj, &min, &dummy) == 2) {
>> + if ((sscanf(name, "%u:%u%c", &maj, &min, &dummy) == 2) ||
>> + (sscanf(name, "%u:%u:%u:%c", &maj, &min, &offset,
>> + &dummy) == 3)) {
>> res = MKDEV(maj, min);
>> if (maj != MAJOR(res) || min != MINOR(res))
>> goto fail;
>> --
>> 1.9.1
>>
>>

2015-05-05 20:23:05

by Rafael J. Wysocki

[permalink] [raw]
Subject: Re: [4.1-rc1][Hibernation failed] bisect result included

On Tuesday, May 05, 2015 10:30:28 AM Yu Chen wrote:
> On 05/04/2015 10:26 PM, Mike Snitzer wrote:
> > On Mon, May 04 2015 at 10:08am -0400,
> > Rafael J. Wysocki <[email protected]> wrote:
> >
> >> On Sunday, May 03, 2015 03:54:39 PM Chen, Yu C wrote:
> >>> Hi,all,
> >>> When we are doing QA test, a hibernation failor was found on latest kernel 4.1-rc1,
> >>> resume from hibernation failed with the following error:
> >>>
> >>> PM: Hibernation image not present or could not be loaded.
> >>>
> >>> Bisect shows following commit might trigger this problem:
> >>> commit 283e7ad0241155710f99a9f39d13313a53336926
> >>>
> >>> The reason for failor is that, some distribution use klibc in initrd
> >>> to restore the image, and klibc will provide kernel with the device
> >>> format of major:minor:offset,
> >>> for example, 8:3:0 represents a swap partition, and klibc will
> >>> echo 8:3:0 > /sys/power/resume to resume the system manually.
> >>> However in current implementation, format of 8:3:0 will be regarded
> >>> as an invalid device, so restoring from hibernation failed.
> >>>
> >>> Do we need to add support for device format like 8:3:0?
> >>> I'm happy to debug more specifically if you can let me know what
> >>> would be of use, and I've also attached a temporary patch
> >>> for this problem, not sure if it is suitable, thanks.
> >>
> >> It'd be better to send the patch inline so it is not lost in replies.
> >> Reproduced below.
> >>
> >> Dan, Mike, any chance to look at this? It is a functional regression for
> >> some people.
> >
> > Sorry about this. Wasn't aware that such a strange format was being
> > used. The proposed patch looks good to me (formatting is a bit weird
> > though, the last "&dummy) == 3)) {" line shouldnt be needed if previous
> > line isn't indented so far.
> >
>
> Thank you very much, Mike and Rafeal,
> I'll send another version titled with V2 for review.

Have you sent it already? Where is it if so?


--
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.

2015-05-06 02:01:51

by Mike Snitzer

[permalink] [raw]
Subject: Re: [4.1-rc1][Hibernation failed] bisect result included

On Tue, May 05 2015 at 4:48pm -0400,
Rafael J. Wysocki <[email protected]> wrote:

> On Tuesday, May 05, 2015 10:30:28 AM Yu Chen wrote:
> >
> > Thank you very much, Mike and Rafeal,
> > I'll send another version titled with V2 for review.
>
> Have you sent it already? Where is it if so?

I staged what I was expecting v2 to be in linux-dm.git's 'for-next'
earlier today. I am planning to send it to Linus on Thursday, see:

https://git.kernel.org/cgit/linux/kernel/git/device-mapper/linux-dm.git/commit/?h=for-next&id=cb31ef485dd4c6a205d1064b42027f82076d00c8

2015-05-06 02:55:02

by Chen Yu

[permalink] [raw]
Subject: Re: [4.1-rc1][Hibernation failed] bisect result included

On 05/06/2015 10:01 AM, Mike Snitzer wrote:
> On Tue, May 05 2015 at 4:48pm -0400,
> Rafael J. Wysocki <[email protected]> wrote:
>
>> On Tuesday, May 05, 2015 10:30:28 AM Yu Chen wrote:
>>>
>>> Thank you very much, Mike and Rafeal,
>>> I'll send another version titled with V2 for review.
>>
>> Have you sent it already? Where is it if so?
>
> I staged what I was expecting v2 to be in linux-dm.git's 'for-next'
> earlier today. I am planning to send it to Linus on Thursday, see:
>
> https://git.kernel.org/cgit/linux/kernel/git/device-mapper/linux-dm.git/commit/?h=for-next&id=cb31ef485dd4c6a205d1064b42027f82076d00c8
>
Thanks, Mike