drop #ifdef SIMFS for /etc/config's sake
[unix-history] / usr / src / sys / ufs / ffs / ufs_vnops.c
index 9344822..580ac39 100644 (file)
@@ -1,8 +1,5 @@
-/*     ufs_vnops.c     4.24    82/06/04        */
+/*     ufs_vnops.c     4.27    82/06/25        */
 
 
-#ifdef SIMFS
-#include "../h/sysrenam.h"
-#endif
 #include "../h/param.h"
 #include "../h/systm.h"
 #include "../h/dir.h"
 #include "../h/param.h"
 #include "../h/systm.h"
 #include "../h/dir.h"
@@ -45,11 +42,9 @@ register struct inode **ipp;
        }
        if(access(ip, IEXEC))
                goto bad;
        }
        if(access(ip, IEXEC))
                goto bad;
-       irele(ip);
-       if (*ipp) {
-               ilock(*ipp);
-               iput(*ipp);
-       }
+       iunlock(ip);
+       if (*ipp)
+               irele(*ipp);
        *ipp = ip;
        return;
 
        *ipp = ip;
        return;
 
@@ -120,11 +115,13 @@ open1(ip, mode, trf)
                                u.u_error = EISDIR;
                }
        }
                                u.u_error = EISDIR;
                }
        }
-       if (u.u_error)
-               goto out;
+       if (u.u_error) {
+               iput(ip);
+               return;
+       }
        if (trf == 1)
                itrunc(ip);
        if (trf == 1)
                itrunc(ip);
-       irele(ip);
+       iunlock(ip);
        if ((fp = falloc()) == NULL)
                goto out;
        fp->f_flag = mode&(FREAD|FWRITE);
        if ((fp = falloc()) == NULL)
                goto out;
        fp->f_flag = mode&(FREAD|FWRITE);
@@ -136,8 +133,7 @@ open1(ip, mode, trf)
        u.u_ofile[i] = NULL;
        fp->f_count--;
 out:
        u.u_ofile[i] = NULL;
        fp->f_count--;
 out:
-       if (ip != NULL)
-               iput(ip);
+       irele(ip);
 }
 
 /*
 }
 
 /*
@@ -198,7 +194,7 @@ link()
        ip->i_nlink++;
        ip->i_flag |= ICHG;
        iupdat(ip, &time, &time, 1);
        ip->i_nlink++;
        ip->i_flag |= ICHG;
        iupdat(ip, &time, &time, 1);
-       irele(ip);
+       iunlock(ip);
        u.u_dirp = (caddr_t)uap->linkname;
        xp = namei(uchar, 1, 0);
        if (xp != NULL) {
        u.u_dirp = (caddr_t)uap->linkname;
        xp = namei(uchar, 1, 0);
        if (xp != NULL) {
@@ -220,7 +216,7 @@ out:
                ip->i_flag |= ICHG;
        }
 out1:
                ip->i_flag |= ICHG;
        }
 out1:
-       iput(ip);
+       irele(ip);
 }
 
 /*
 }
 
 /*
@@ -281,6 +277,7 @@ unlink()
        struct fs *fs;
        struct buf *bp;
        int lbn, bn, base;
        struct fs *fs;
        struct buf *bp;
        int lbn, bn, base;
+       int unlinkingdot = 0;
 
        pp = namei(uchar, 2, 0);
        if(pp == NULL)
 
        pp = namei(uchar, 2, 0);
        if(pp == NULL)
@@ -292,6 +289,7 @@ unlink()
        if (pp->i_number == u.u_dent.d_ino) {
                ip = pp;
                ip->i_count++;
        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)
        } else
                ip = iget(pp->i_dev, pp->i_fs, u.u_dent.d_ino);
        if(ip == NULL)
@@ -343,7 +341,10 @@ unlink()
        ip->i_flag |= ICHG;
 
 out:
        ip->i_flag |= ICHG;
 
 out:
-       iput(ip);
+       if (unlinkingdot)
+               irele(ip);
+       else
+               iput(ip);
 out1:
        iput(pp);
 }
 out1:
        iput(pp);
 }