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; }