Commit 421a5fa1a6cfc037a21220b638d4def6da7cbabe
Committed by
Rafael J. Wysocki
1 parent
6c5be29165
Exists in
master
and in
13 other branches
PM / hibernate: use name_to_dev_t to parse resume
Use the name_to_dev_t call to parse the device name echo'd to to /sys/power/resume. This imitates the method used in hibernate.c in software_resume, and allows the resume partition to be specified using other equivalent device formats as well. By allowing /sys/debug/resume to accept the same syntax as the resume=device parameter, we can parse the resume=device in the init script and use the resume device directly from the kernel command line. Signed-off-by: Sebastian Capella <sebastian.capella@linaro.org> Acked-by: Pavel Machek <pavel@ucw.cz> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Showing 1 changed file with 12 additions and 10 deletions Side-by-side Diff
kernel/power/hibernate.c
... | ... | @@ -973,16 +973,20 @@ |
973 | 973 | static ssize_t resume_store(struct kobject *kobj, struct kobj_attribute *attr, |
974 | 974 | const char *buf, size_t n) |
975 | 975 | { |
976 | - unsigned int maj, min; | |
977 | 976 | dev_t res; |
978 | - int ret = -EINVAL; | |
977 | + int len = n; | |
978 | + char *name; | |
979 | 979 | |
980 | - if (sscanf(buf, "%u:%u", &maj, &min) != 2) | |
981 | - goto out; | |
980 | + if (len && buf[len-1] == '\n') | |
981 | + len--; | |
982 | + name = kstrndup(buf, len, GFP_KERNEL); | |
983 | + if (!name) | |
984 | + return -ENOMEM; | |
982 | 985 | |
983 | - res = MKDEV(maj,min); | |
984 | - if (maj != MAJOR(res) || min != MINOR(res)) | |
985 | - goto out; | |
986 | + res = name_to_dev_t(name); | |
987 | + kfree(name); | |
988 | + if (!res) | |
989 | + return -EINVAL; | |
986 | 990 | |
987 | 991 | lock_system_sleep(); |
988 | 992 | swsusp_resume_device = res; |
... | ... | @@ -990,9 +994,7 @@ |
990 | 994 | printk(KERN_INFO "PM: Starting manual resume from disk\n"); |
991 | 995 | noresume = 0; |
992 | 996 | software_resume(); |
993 | - ret = n; | |
994 | - out: | |
995 | - return ret; | |
997 | + return n; | |
996 | 998 | } |
997 | 999 | |
998 | 1000 | power_attr(resume); |