drop #ifdef SIMFS for /etc/config's sake
[unix-history] / usr / src / sys / ufs / ffs / ufs_vnops.c
index 8850d68..580ac39 100644 (file)
@@ -1,10 +1,5 @@
-/*     ufs_vnops.c     4.23    82/04/19        */
+/*     ufs_vnops.c     4.27    82/06/25        */
 
 
-/* merged into kernel: @(#)sys3.c 2.2 4/8/82 */
-
-#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"
@@ -47,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;
 
@@ -122,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);
@@ -138,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);
 }
 
 /*
 }
 
 /*
@@ -200,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) {
@@ -222,7 +216,7 @@ out:
                ip->i_flag |= ICHG;
        }
 out1:
                ip->i_flag |= ICHG;
        }
 out1:
-       iput(ip);
+       irele(ip);
 }
 
 /*
 }
 
 /*
@@ -283,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)
@@ -294,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)
@@ -345,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);
 }
@@ -480,7 +479,7 @@ stat1(ip, ub)
 
        IUPDAT(ip, &time, &time, 0);
        /*
 
        IUPDAT(ip, &time, &time, 0);
        /*
-        * First copy from inode table
+        * Copy from inode table
         */
        ds.st_dev = ip->i_dev;
        ds.st_ino = ip->i_number;
         */
        ds.st_dev = ip->i_dev;
        ds.st_ino = ip->i_number;
@@ -493,6 +492,7 @@ stat1(ip, ub)
        ds.st_atime = ip->i_atime;
        ds.st_mtime = ip->i_mtime;
        ds.st_ctime = ip->i_ctime;
        ds.st_atime = ip->i_atime;
        ds.st_mtime = ip->i_mtime;
        ds.st_ctime = ip->i_ctime;
+       ds.st_blksize = ip->i_fs->fs_bsize;
        if (copyout((caddr_t)&ds, (caddr_t)ub, sizeof(ds)) < 0)
                u.u_error = EFAULT;
 }
        if (copyout((caddr_t)&ds, (caddr_t)ub, sizeof(ds)) < 0)
                u.u_error = EFAULT;
 }