From d80b06a1e0232f4c5e9b9c8ff635e4022e13667c Mon Sep 17 00:00:00 2001
From: rsc <rsc>
Date: Wed, 8 Aug 2007 09:30:42 +0000
Subject: [PATCH] iincref returns new ref

---
 defs.h |  2 +-
 fs.c   | 10 +++++-----
 proc.c |  3 +--
 3 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/defs.h b/defs.h
index 8b2aac5..3c176b5 100644
--- a/defs.h
+++ b/defs.h
@@ -128,7 +128,7 @@ void ilock(struct inode*);
 void iunlock(struct inode*);
 void itrunc(struct inode*);
 void idecref(struct inode*);
-void iincref(struct inode*);
+struct inode* iincref(struct inode*);
 void iput(struct inode*);
 struct inode* namei(char*, int, uint*, char**, struct inode**);
 void stati(struct inode*, struct stat*);
diff --git a/fs.c b/fs.c
index 8f7b872..9e9626e 100644
--- a/fs.c
+++ b/fs.c
@@ -266,8 +266,7 @@ iunlock(struct inode *ip)
 uint
 bmap(struct inode *ip, uint bn)
 {
-  unsigned x;
-  uint *a;
+  uint *a, x;
   struct buf *inbp;
 
   if(bn >= MAXFILE)
@@ -350,12 +349,14 @@ idecref(struct inode *ip)
 }
 
 // Increment reference count for ip.
-void
+// Returns ip to enable ip = iincref(ip1) idiom.
+struct inode*
 iincref(struct inode *ip)
 {
   ilock(ip);
   ip->ref++;
   iunlock(ip);
+  return ip;
 }
 
 // Copy stat information from inode.
@@ -511,8 +512,7 @@ namei(char *path, int mode, uint *ret_off,
   if(*cp == '/')
     dp = iget(rootdev, 1);
   else {
-    dp = p->cwd;
-    iincref(dp);
+    dp = iincref(p->cwd);
     ilock(dp);
   }
 
diff --git a/proc.c b/proc.c
index a71aa2f..54b6c3d 100644
--- a/proc.c
+++ b/proc.c
@@ -150,8 +150,7 @@ copyproc(struct proc *p)
       fileincref(np->ofile[i]);
   }
 
-  np->cwd = p->cwd;
-  iincref(p->cwd);
+  np->cwd = iincref(p->cwd);
 
   return np;
 }
-- 
GitLab