diff --git a/kernel/power/user.c b/kernel/power/user.c
index 845acd84cb236292fa82b771da1efe7ccad14d2c..bd1771f7a64ee141a2770fe202e7c724923010fd 100644
--- a/kernel/power/user.c
+++ b/kernel/power/user.c
@@ -49,12 +49,14 @@ static int snapshot_open(struct inode *inode, struct file *filp)
 	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;