commit: http://blackfin.uclinux.org/git/?p=linux-kernel;a=commitdiff;h=0854ae37bcafc8af421099057f578a525d75bde1
branch: http://blackfin.uclinux.org/git/?p=linux-kernel;a=shortlog;h=refs/heads/2011R1

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

diff --git a/drivers/staging/icc/core/protocol.c b/drivers/staging/icc/core/protocol.c
index 5455f69..6b99dec 100644
--- a/drivers/staging/icc/core/protocol.c
+++ b/drivers/staging/icc/core/protocol.c
@@ -794,7 +794,8 @@ static int
 icc_open(struct inode *inode, struct file *file)
 {
 	int ret = 0;
-
+	struct sm_session_table *table = icc_info->sessions_table;
+	table->refcnt++;
 	return ret;
 }
 
@@ -805,9 +806,12 @@ icc_release(struct inode *inode, struct file *file)
 	struct sm_session_table *table = icc_info->sessions_table;
 	int used;
 	int i;
-	used = MAX_ENDPOINTS - table->nfree;
-	for (i = 0; i < used; i++)
-		sm_free_session(i, table);
+	table->refcnt--;
+	if (table->refcnt == 0) {
+		used = MAX_ENDPOINTS - table->nfree;
+		for (i = 0; i < used; i++)
+			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