patch-2.4.0-test11 linux/fs/proc/inode.c

Next file: linux/fs/proc/proc_misc.c
Previous file: linux/fs/proc/generic.c
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.4.0-test10/linux/fs/proc/inode.c linux/fs/proc/inode.c
@@ -25,7 +25,7 @@
 struct proc_dir_entry * de_get(struct proc_dir_entry *de)
 {
 	if (de)
-		de->count++;
+		atomic_inc(&de->count);
 	return de;
 }
 
@@ -34,20 +34,21 @@
  */
 void de_put(struct proc_dir_entry *de)
 {
-	if (de) {
-		lock_kernel(); /* FIXME: count should be atomic_t */
-		if (!de->count) {
+	if (de) {	
+		lock_kernel();		
+		if (!atomic_read(&de->count)) {
 			printk("de_put: entry %s already free!\n", de->name);
+			unlock_kernel();
 			return;
 		}
 
-		if (!--de->count) {
+		if (atomic_dec_and_test(&de->count)) {
 			if (de->deleted) {
 				printk("de_put: deferred delete of %s\n",
 					de->name);
 				free_proc_entry(de);
 			}
-		}
+		}		
 		unlock_kernel();
 	}
 }
@@ -139,7 +140,7 @@
 #if 1
 /* shouldn't ever happen */
 if (de && de->deleted)
-printk("proc_iget: using deleted entry %s, count=%d\n", de->name, de->count);
+printk("proc_iget: using deleted entry %s, count=%d\n", de->name, atomic_read(&de->count));
 #endif
 
 	inode = iget(sb, ino);

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)