[PATCH 4/5] swsusp: fix error paths in snapshot_open

Rafael J. Wysocki
2007-03-20T21:27:42Z

From: Rafael J. Wysocki <rjw@sisk.pl>

We forget to increase device_available if there's an error in
snapshot_open(), so the snapshot device cannot be open at all after
snapshot_open() has returned an error.

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Acked-by: Pavel Machek <pavel@ucw.cz>
---
kernel/power/user.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)

Index: linux-2.6.21-rc4-mm1/kernel/power/user.c
===================================================================
--- linux-2.6.21-rc4-mm1.orig/kernel/power/user.c 2007-03-20 21:19:31.000000000 +0100
+++ linux-2.6.21-rc4-mm1/kernel/power/user.c 2007-03-20 21:35:59.000000000 +0100
@@ -49,12 +49,14 @@ static int snapshot_open(struct inode *i
if (!atomic_add_unless(&device_available, -1, 0))
return -EBUSY;

- if ((filp->f_flags & O_ACCMODE) == O_RDWR)
+ if ((filp->f_flags & O_ACCMODE) == O_RDWR) {
+ atomic_inc(&device_available);
return -ENOSYS;
-
- if(create_basic_memory_bitmaps())
+ }
+ if(create_basic_memory_bitmaps()) {
+ atomic_inc(&device_available);
return -ENOMEM;
-
+ }
nonseekable_open(inode, filp);
data = &snapshot_state;
filp->private_data = data;