diff options
author | Andrew Morton <akpm@osdl.org> | 2006-01-06 03:09:50 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-06 11:33:21 -0500 |
commit | a576219aca70e6700705a9836e098dbecd25fb56 (patch) | |
tree | 1388f5fceb79d42c019443a527b311cf6497e3bd /kernel | |
parent | 817c41d76e9eaf72044268b0e545a547abadc0bb (diff) |
[PATCH] swsusp: resume_store() retval fix
- This function returns -EINVAL all the time. Fix.
- Decruftify it a bit too.
- Writing to it doesn't seem to do what it's suppoed to do.
Cc: Pavel Machek <pavel@ucw.cz>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/power/disk.c | 34 |
1 files changed, 16 insertions, 18 deletions
diff --git a/kernel/power/disk.c b/kernel/power/disk.c index 027322a564f4..4d944b281b28 100644 --- a/kernel/power/disk.c +++ b/kernel/power/disk.c | |||
@@ -363,30 +363,28 @@ static ssize_t resume_show(struct subsystem * subsys, char *buf) | |||
363 | MINOR(swsusp_resume_device)); | 363 | MINOR(swsusp_resume_device)); |
364 | } | 364 | } |
365 | 365 | ||
366 | static ssize_t resume_store(struct subsystem * subsys, const char * buf, size_t n) | 366 | static ssize_t resume_store(struct subsystem *subsys, const char *buf, size_t n) |
367 | { | 367 | { |
368 | int len; | ||
369 | char *p; | ||
370 | unsigned int maj, min; | 368 | unsigned int maj, min; |
371 | int error = -EINVAL; | ||
372 | dev_t res; | 369 | dev_t res; |
370 | int ret = -EINVAL; | ||
373 | 371 | ||
374 | p = memchr(buf, '\n', n); | 372 | if (sscanf(buf, "%u:%u", &maj, &min) != 2) |
375 | len = p ? p - buf : n; | 373 | goto out; |
376 | 374 | ||
377 | if (sscanf(buf, "%u:%u", &maj, &min) == 2) { | 375 | res = MKDEV(maj,min); |
378 | res = MKDEV(maj,min); | 376 | if (maj != MAJOR(res) || min != MINOR(res)) |
379 | if (maj == MAJOR(res) && min == MINOR(res)) { | 377 | goto out; |
380 | down(&pm_sem); | ||
381 | swsusp_resume_device = res; | ||
382 | up(&pm_sem); | ||
383 | printk("Attempting manual resume\n"); | ||
384 | noresume = 0; | ||
385 | software_resume(); | ||
386 | } | ||
387 | } | ||
388 | 378 | ||
389 | return error >= 0 ? n : error; | 379 | down(&pm_sem); |
380 | swsusp_resume_device = res; | ||
381 | up(&pm_sem); | ||
382 | printk("Attempting manual resume\n"); | ||
383 | noresume = 0; | ||
384 | software_resume(); | ||
385 | ret = n; | ||
386 | out: | ||
387 | return ret; | ||
390 | } | 388 | } |
391 | 389 | ||
392 | power_attr(resume); | 390 | power_attr(resume); |