commit: http://blackfin.uclinux.org/git/?p=linux-kernel;a=commitdiff;h=1a44987eef5e44f41dc72e645c2b2f74f689d60b
branch: http://blackfin.uclinux.org/git/?p=linux-kernel;a=shortlog;h=refs/heads/trunk

Signed-off-by: Steven Miao <[email protected]>
---
 drivers/staging/icc/core/protocol.c |   12 +++++++-----
 1 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/drivers/staging/icc/core/protocol.c b/drivers/staging/icc/core/protocol.c
index b1e134d..1f2951e 100644
--- a/drivers/staging/icc/core/protocol.c
+++ b/drivers/staging/icc/core/protocol.c
@@ -119,10 +119,13 @@ static sm_uint32_t sm_alloc_session(struct sm_session_table *table)
 
 static int sm_free_session(sm_uint32_t slot, struct sm_session_table *table)
 {
-	memset(&table->sessions[slot], 0, sizeof(struct sm_session));
-	__clear_bit((int)slot, (unsigned long *)table->bits);
-	table->nfree++;
-	return 0;
+	if (test_bit((int)slot, (unsigned long *)table->bits)) {
+		memset(&table->sessions[slot], 0, sizeof(struct sm_session));
+		__clear_bit((int)slot, (unsigned long *)table->bits);
+		table->nfree++;
+		return 0;
+	}
+	return -1;
 }
 
 static int
@@ -813,7 +816,6 @@ icc_release(struct inode *inode, struct file *file)
 			sm_free_session(i, table);
 	}
 
-	WARN_ON(table->nfree != MAX_ENDPOINTS);
 	return ret;
 }
 
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits

Reply via email to