From 8eee852544cb599aee73b58422265270650201fe Mon Sep 17 00:00:00 2001 From: Kirk McKusick Date: Thu, 10 Jun 1982 19:41:08 -0800 Subject: [PATCH] change iput() to irele() when releasing unlocked inodes SCCS-vsn: sys/kern/kern_resource.c 4.8 SCCS-vsn: sys/ufs/ffs/ffs_inode.c 4.12 SCCS-vsn: sys/ufs/ffs/ufs_inode.c 4.12 SCCS-vsn: sys/ufs/lfs/lfs_inode.c 4.12 SCCS-vsn: sys/ufs/ufs/ufs_inode.c 4.12 SCCS-vsn: sys/kern/vfs_syscalls.c 4.26 SCCS-vsn: sys/ufs/ffs/ffs_vnops.c 4.26 SCCS-vsn: sys/ufs/ffs/ufs_vnops.c 4.26 SCCS-vsn: sys/ufs/lfs/lfs_vnops.c 4.26 SCCS-vsn: sys/ufs/ufs/ufs_vnops.c 4.26 --- usr/src/sys/kern/kern_resource.c | 5 ++--- usr/src/sys/kern/vfs_syscalls.c | 26 +++++++++++++++----------- usr/src/sys/ufs/ffs/ffs_inode.c | 6 +----- usr/src/sys/ufs/ffs/ffs_vnops.c | 26 +++++++++++++++----------- usr/src/sys/ufs/ffs/ufs_inode.c | 6 +----- usr/src/sys/ufs/ffs/ufs_vnops.c | 26 +++++++++++++++----------- usr/src/sys/ufs/lfs/lfs_inode.c | 6 +----- usr/src/sys/ufs/lfs/lfs_vnops.c | 26 +++++++++++++++----------- usr/src/sys/ufs/ufs/ufs_inode.c | 6 +----- usr/src/sys/ufs/ufs/ufs_vnops.c | 26 +++++++++++++++----------- 10 files changed, 81 insertions(+), 78 deletions(-) diff --git a/usr/src/sys/kern/kern_resource.c b/usr/src/sys/kern/kern_resource.c index 70bc347b41..1d5096fd2d 100644 --- a/usr/src/sys/kern/kern_resource.c +++ b/usr/src/sys/kern/kern_resource.c @@ -1,4 +1,4 @@ -/* kern_resource.c 4.7 82/06/07 */ +/* kern_resource.c 4.8 82/06/10 */ #include "../h/param.h" #include "../h/systm.h" @@ -25,8 +25,7 @@ sysacct() if (suser()) { if (uap->fname==NULL) { if (ip = acctp) { - ilock(ip); - iput(ip); + irele(ip); acctp = NULL; } return; diff --git a/usr/src/sys/kern/vfs_syscalls.c b/usr/src/sys/kern/vfs_syscalls.c index 114817657c..4e9b4cd224 100644 --- a/usr/src/sys/kern/vfs_syscalls.c +++ b/usr/src/sys/kern/vfs_syscalls.c @@ -1,4 +1,4 @@ -/* vfs_syscalls.c 4.25 82/06/07 */ +/* vfs_syscalls.c 4.26 82/06/10 */ #ifdef SIMFS #include "../h/sysrenam.h" @@ -46,10 +46,8 @@ register struct inode **ipp; if(access(ip, IEXEC)) goto bad; iunlock(ip); - if (*ipp) { - ilock(*ipp); - iput(*ipp); - } + if (*ipp) + irele(*ipp); *ipp = ip; return; @@ -120,8 +118,10 @@ open1(ip, mode, trf) u.u_error = EISDIR; } } - if (u.u_error) - goto out; + if (u.u_error) { + iput(ip); + return; + } if (trf == 1) itrunc(ip); iunlock(ip); @@ -136,8 +136,7 @@ open1(ip, mode, trf) u.u_ofile[i] = NULL; fp->f_count--; out: - if (ip != NULL) - iput(ip); + irele(ip); } /* @@ -220,7 +219,7 @@ out: ip->i_flag |= ICHG; } out1: - iput(ip); + irele(ip); } /* @@ -281,6 +280,7 @@ unlink() struct fs *fs; struct buf *bp; int lbn, bn, base; + int unlinkingdot = 0; pp = namei(uchar, 2, 0); if(pp == NULL) @@ -292,6 +292,7 @@ unlink() if (pp->i_number == u.u_dent.d_ino) { ip = pp; ip->i_count++; + unlinkingdot++; } else ip = iget(pp->i_dev, pp->i_fs, u.u_dent.d_ino); if(ip == NULL) @@ -343,7 +344,10 @@ unlink() ip->i_flag |= ICHG; out: - iput(ip); + if (unlinkingdot) + irele(ip); + else + iput(ip); out1: iput(pp); } diff --git a/usr/src/sys/ufs/ffs/ffs_inode.c b/usr/src/sys/ufs/ffs/ffs_inode.c index af49fde902..d0d6d012ac 100644 --- a/usr/src/sys/ufs/ffs/ffs_inode.c +++ b/usr/src/sys/ufs/ffs/ffs_inode.c @@ -1,6 +1,4 @@ -/* ffs_inode.c 4.11 82/06/07 */ - -/* merged into kernel: @(#)iget.c 2.2 4/8/82 */ +/* ffs_inode.c 4.12 82/06/10 */ #include "../h/param.h" #include "../h/systm.h" @@ -145,8 +143,6 @@ irele(ip) register struct inode *jp; int mode; - if (ip->i_flag & ILOCK) - panic("irele"); if (ip->i_count == 1) { ip->i_flag |= ILOCK; if (ip->i_nlink <= 0) { diff --git a/usr/src/sys/ufs/ffs/ffs_vnops.c b/usr/src/sys/ufs/ffs/ffs_vnops.c index 89267be701..a6025139fd 100644 --- a/usr/src/sys/ufs/ffs/ffs_vnops.c +++ b/usr/src/sys/ufs/ffs/ffs_vnops.c @@ -1,4 +1,4 @@ -/* ffs_vnops.c 4.25 82/06/07 */ +/* ffs_vnops.c 4.26 82/06/10 */ #ifdef SIMFS #include "../h/sysrenam.h" @@ -46,10 +46,8 @@ register struct inode **ipp; if(access(ip, IEXEC)) goto bad; iunlock(ip); - if (*ipp) { - ilock(*ipp); - iput(*ipp); - } + if (*ipp) + irele(*ipp); *ipp = ip; return; @@ -120,8 +118,10 @@ open1(ip, mode, trf) u.u_error = EISDIR; } } - if (u.u_error) - goto out; + if (u.u_error) { + iput(ip); + return; + } if (trf == 1) itrunc(ip); iunlock(ip); @@ -136,8 +136,7 @@ open1(ip, mode, trf) u.u_ofile[i] = NULL; fp->f_count--; out: - if (ip != NULL) - iput(ip); + irele(ip); } /* @@ -220,7 +219,7 @@ out: ip->i_flag |= ICHG; } out1: - iput(ip); + irele(ip); } /* @@ -281,6 +280,7 @@ unlink() struct fs *fs; struct buf *bp; int lbn, bn, base; + int unlinkingdot = 0; pp = namei(uchar, 2, 0); if(pp == NULL) @@ -292,6 +292,7 @@ unlink() if (pp->i_number == u.u_dent.d_ino) { ip = pp; ip->i_count++; + unlinkingdot++; } else ip = iget(pp->i_dev, pp->i_fs, u.u_dent.d_ino); if(ip == NULL) @@ -343,7 +344,10 @@ unlink() ip->i_flag |= ICHG; out: - iput(ip); + if (unlinkingdot) + irele(ip); + else + iput(ip); out1: iput(pp); } diff --git a/usr/src/sys/ufs/ffs/ufs_inode.c b/usr/src/sys/ufs/ffs/ufs_inode.c index c4822245d2..9eda05132c 100644 --- a/usr/src/sys/ufs/ffs/ufs_inode.c +++ b/usr/src/sys/ufs/ffs/ufs_inode.c @@ -1,6 +1,4 @@ -/* ufs_inode.c 4.11 82/06/07 */ - -/* merged into kernel: @(#)iget.c 2.2 4/8/82 */ +/* ufs_inode.c 4.12 82/06/10 */ #include "../h/param.h" #include "../h/systm.h" @@ -145,8 +143,6 @@ irele(ip) register struct inode *jp; int mode; - if (ip->i_flag & ILOCK) - panic("irele"); if (ip->i_count == 1) { ip->i_flag |= ILOCK; if (ip->i_nlink <= 0) { diff --git a/usr/src/sys/ufs/ffs/ufs_vnops.c b/usr/src/sys/ufs/ffs/ufs_vnops.c index a68de3e031..87b77f8069 100644 --- a/usr/src/sys/ufs/ffs/ufs_vnops.c +++ b/usr/src/sys/ufs/ffs/ufs_vnops.c @@ -1,4 +1,4 @@ -/* ufs_vnops.c 4.25 82/06/07 */ +/* ufs_vnops.c 4.26 82/06/10 */ #ifdef SIMFS #include "../h/sysrenam.h" @@ -46,10 +46,8 @@ register struct inode **ipp; if(access(ip, IEXEC)) goto bad; iunlock(ip); - if (*ipp) { - ilock(*ipp); - iput(*ipp); - } + if (*ipp) + irele(*ipp); *ipp = ip; return; @@ -120,8 +118,10 @@ open1(ip, mode, trf) u.u_error = EISDIR; } } - if (u.u_error) - goto out; + if (u.u_error) { + iput(ip); + return; + } if (trf == 1) itrunc(ip); iunlock(ip); @@ -136,8 +136,7 @@ open1(ip, mode, trf) u.u_ofile[i] = NULL; fp->f_count--; out: - if (ip != NULL) - iput(ip); + irele(ip); } /* @@ -220,7 +219,7 @@ out: ip->i_flag |= ICHG; } out1: - iput(ip); + irele(ip); } /* @@ -281,6 +280,7 @@ unlink() struct fs *fs; struct buf *bp; int lbn, bn, base; + int unlinkingdot = 0; pp = namei(uchar, 2, 0); if(pp == NULL) @@ -292,6 +292,7 @@ unlink() if (pp->i_number == u.u_dent.d_ino) { ip = pp; ip->i_count++; + unlinkingdot++; } else ip = iget(pp->i_dev, pp->i_fs, u.u_dent.d_ino); if(ip == NULL) @@ -343,7 +344,10 @@ unlink() ip->i_flag |= ICHG; out: - iput(ip); + if (unlinkingdot) + irele(ip); + else + iput(ip); out1: iput(pp); } diff --git a/usr/src/sys/ufs/lfs/lfs_inode.c b/usr/src/sys/ufs/lfs/lfs_inode.c index 5eb4c7565a..93c2e309d3 100644 --- a/usr/src/sys/ufs/lfs/lfs_inode.c +++ b/usr/src/sys/ufs/lfs/lfs_inode.c @@ -1,6 +1,4 @@ -/* lfs_inode.c 4.11 82/06/07 */ - -/* merged into kernel: @(#)iget.c 2.2 4/8/82 */ +/* lfs_inode.c 4.12 82/06/10 */ #include "../h/param.h" #include "../h/systm.h" @@ -145,8 +143,6 @@ irele(ip) register struct inode *jp; int mode; - if (ip->i_flag & ILOCK) - panic("irele"); if (ip->i_count == 1) { ip->i_flag |= ILOCK; if (ip->i_nlink <= 0) { diff --git a/usr/src/sys/ufs/lfs/lfs_vnops.c b/usr/src/sys/ufs/lfs/lfs_vnops.c index 91b7994235..cf8768d025 100644 --- a/usr/src/sys/ufs/lfs/lfs_vnops.c +++ b/usr/src/sys/ufs/lfs/lfs_vnops.c @@ -1,4 +1,4 @@ -/* lfs_vnops.c 4.25 82/06/07 */ +/* lfs_vnops.c 4.26 82/06/10 */ #ifdef SIMFS #include "../h/sysrenam.h" @@ -46,10 +46,8 @@ register struct inode **ipp; if(access(ip, IEXEC)) goto bad; iunlock(ip); - if (*ipp) { - ilock(*ipp); - iput(*ipp); - } + if (*ipp) + irele(*ipp); *ipp = ip; return; @@ -120,8 +118,10 @@ open1(ip, mode, trf) u.u_error = EISDIR; } } - if (u.u_error) - goto out; + if (u.u_error) { + iput(ip); + return; + } if (trf == 1) itrunc(ip); iunlock(ip); @@ -136,8 +136,7 @@ open1(ip, mode, trf) u.u_ofile[i] = NULL; fp->f_count--; out: - if (ip != NULL) - iput(ip); + irele(ip); } /* @@ -220,7 +219,7 @@ out: ip->i_flag |= ICHG; } out1: - iput(ip); + irele(ip); } /* @@ -281,6 +280,7 @@ unlink() struct fs *fs; struct buf *bp; int lbn, bn, base; + int unlinkingdot = 0; pp = namei(uchar, 2, 0); if(pp == NULL) @@ -292,6 +292,7 @@ unlink() if (pp->i_number == u.u_dent.d_ino) { ip = pp; ip->i_count++; + unlinkingdot++; } else ip = iget(pp->i_dev, pp->i_fs, u.u_dent.d_ino); if(ip == NULL) @@ -343,7 +344,10 @@ unlink() ip->i_flag |= ICHG; out: - iput(ip); + if (unlinkingdot) + irele(ip); + else + iput(ip); out1: iput(pp); } diff --git a/usr/src/sys/ufs/ufs/ufs_inode.c b/usr/src/sys/ufs/ufs/ufs_inode.c index c4822245d2..9eda05132c 100644 --- a/usr/src/sys/ufs/ufs/ufs_inode.c +++ b/usr/src/sys/ufs/ufs/ufs_inode.c @@ -1,6 +1,4 @@ -/* ufs_inode.c 4.11 82/06/07 */ - -/* merged into kernel: @(#)iget.c 2.2 4/8/82 */ +/* ufs_inode.c 4.12 82/06/10 */ #include "../h/param.h" #include "../h/systm.h" @@ -145,8 +143,6 @@ irele(ip) register struct inode *jp; int mode; - if (ip->i_flag & ILOCK) - panic("irele"); if (ip->i_count == 1) { ip->i_flag |= ILOCK; if (ip->i_nlink <= 0) { diff --git a/usr/src/sys/ufs/ufs/ufs_vnops.c b/usr/src/sys/ufs/ufs/ufs_vnops.c index a68de3e031..87b77f8069 100644 --- a/usr/src/sys/ufs/ufs/ufs_vnops.c +++ b/usr/src/sys/ufs/ufs/ufs_vnops.c @@ -1,4 +1,4 @@ -/* ufs_vnops.c 4.25 82/06/07 */ +/* ufs_vnops.c 4.26 82/06/10 */ #ifdef SIMFS #include "../h/sysrenam.h" @@ -46,10 +46,8 @@ register struct inode **ipp; if(access(ip, IEXEC)) goto bad; iunlock(ip); - if (*ipp) { - ilock(*ipp); - iput(*ipp); - } + if (*ipp) + irele(*ipp); *ipp = ip; return; @@ -120,8 +118,10 @@ open1(ip, mode, trf) u.u_error = EISDIR; } } - if (u.u_error) - goto out; + if (u.u_error) { + iput(ip); + return; + } if (trf == 1) itrunc(ip); iunlock(ip); @@ -136,8 +136,7 @@ open1(ip, mode, trf) u.u_ofile[i] = NULL; fp->f_count--; out: - if (ip != NULL) - iput(ip); + irele(ip); } /* @@ -220,7 +219,7 @@ out: ip->i_flag |= ICHG; } out1: - iput(ip); + irele(ip); } /* @@ -281,6 +280,7 @@ unlink() struct fs *fs; struct buf *bp; int lbn, bn, base; + int unlinkingdot = 0; pp = namei(uchar, 2, 0); if(pp == NULL) @@ -292,6 +292,7 @@ unlink() if (pp->i_number == u.u_dent.d_ino) { ip = pp; ip->i_count++; + unlinkingdot++; } else ip = iget(pp->i_dev, pp->i_fs, u.u_dent.d_ino); if(ip == NULL) @@ -343,7 +344,10 @@ unlink() ip->i_flag |= ICHG; out: - iput(ip); + if (unlinkingdot) + irele(ip); + else + iput(ip); out1: iput(pp); } -- 2.20.1