diff --git a/defs.h b/defs.h
index 8b2aac5083c4d066b93fee440301dce123ce2855..3c176b5fd8c663b844be6a8c5b95df46ec589036 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 8f7b8721dd686a7285216d89e2ebedb27d41ff6f..9e9626e35fc89b9e6047aa1463bb8387bda31a9b 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 a71aa2f5857a859eae97236773606cb28029662c..54b6c3dfc09c4875064a01c4ad56afba7d52a6ba 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;
 }