purge vnode type when unneeded and returned to the free list so that
authorKirk McKusick <mckusick@ucbvax.Berkeley.EDU>
Fri, 11 Aug 1989 08:08:30 +0000 (00:08 -0800)
committerKirk McKusick <mckusick@ucbvax.Berkeley.EDU>
Fri, 11 Aug 1989 08:08:30 +0000 (00:08 -0800)
getnewino does not try to delete it from block device list more than once.

SCCS-vsn: sys/ufs/ffs/ffs_inode.c 7.11
SCCS-vsn: sys/ufs/ffs/ufs_inode.c 7.11
SCCS-vsn: sys/ufs/lfs/lfs_inode.c 7.11
SCCS-vsn: sys/ufs/ufs/ufs_inode.c 7.11

usr/src/sys/ufs/ffs/ffs_inode.c
usr/src/sys/ufs/ffs/ufs_inode.c
usr/src/sys/ufs/lfs/lfs_inode.c
usr/src/sys/ufs/ufs/ufs_inode.c

index de94d4f..df6de48 100644 (file)
@@ -14,7 +14,7 @@
  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  *
  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  *
- *     @(#)ffs_inode.c 7.10 (Berkeley) %G%
+ *     @(#)ffs_inode.c 7.11 (Berkeley) %G%
  */
 
 #include "param.h"
  */
 
 #include "param.h"
@@ -169,6 +169,7 @@ loop:
                ip->i_forw = ip;
                ip->i_back = ip;
                ip->i_number = 0;
                ip->i_forw = ip;
                ip->i_back = ip;
                ip->i_number = 0;
+               ITOV(ip)->v_type = VNON;
                INSFREE(ip);
                iunlock(ip);
                ip->i_flag = 0;
                INSFREE(ip);
                iunlock(ip);
                ip->i_flag = 0;
@@ -193,10 +194,11 @@ loop:
        } else {
 again:
                for (iq = bdevlisth; iq; iq = iq->i_devlst) {
        } else {
 again:
                for (iq = bdevlisth; iq; iq = iq->i_devlst) {
-                       if (dp->di_rdev != ITOV(iq)->v_rdev)
+                       vp = ITOV(iq);
+                       if (dp->di_rdev != vp->v_rdev)
                                continue;
                        igrab(iq);
                                continue;
                        igrab(iq);
-                       if (dp->di_rdev != ITOV(iq)->v_rdev) {
+                       if (dp->di_rdev != vp->v_rdev) {
                                iput(iq);
                                goto again;
                        }
                                iput(iq);
                                goto again;
                        }
@@ -207,6 +209,7 @@ again:
                        ip->i_forw = ip;
                        ip->i_back = ip;
                        ip->i_number = 0;
                        ip->i_forw = ip;
                        ip->i_back = ip;
                        ip->i_number = 0;
+                       ITOV(ip)->v_type = VNON;
                        INSFREE(ip);
                        iunlock(ip);
                        ip->i_flag = 0;
                        INSFREE(ip);
                        iunlock(ip);
                        ip->i_flag = 0;
@@ -218,7 +221,6 @@ again:
                         * disk block.
                         */
                        ip = iq;
                         * disk block.
                         */
                        ip = iq;
-                       vp = ITOV(iq);
                        tdip.di_ic = dp->di_ic;
                        brelse(bp);
                        error = iupdat(ip, &time, &time, 1);
                        tdip.di_ic = dp->di_ic;
                        brelse(bp);
                        error = iupdat(ip, &time, &time, 1);
index f758ff6..7c3bc9d 100644 (file)
@@ -14,7 +14,7 @@
  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  *
  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  *
- *     @(#)ufs_inode.c 7.10 (Berkeley) %G%
+ *     @(#)ufs_inode.c 7.11 (Berkeley) %G%
  */
 
 #include "param.h"
  */
 
 #include "param.h"
@@ -169,6 +169,7 @@ loop:
                ip->i_forw = ip;
                ip->i_back = ip;
                ip->i_number = 0;
                ip->i_forw = ip;
                ip->i_back = ip;
                ip->i_number = 0;
+               ITOV(ip)->v_type = VNON;
                INSFREE(ip);
                iunlock(ip);
                ip->i_flag = 0;
                INSFREE(ip);
                iunlock(ip);
                ip->i_flag = 0;
@@ -193,10 +194,11 @@ loop:
        } else {
 again:
                for (iq = bdevlisth; iq; iq = iq->i_devlst) {
        } else {
 again:
                for (iq = bdevlisth; iq; iq = iq->i_devlst) {
-                       if (dp->di_rdev != ITOV(iq)->v_rdev)
+                       vp = ITOV(iq);
+                       if (dp->di_rdev != vp->v_rdev)
                                continue;
                        igrab(iq);
                                continue;
                        igrab(iq);
-                       if (dp->di_rdev != ITOV(iq)->v_rdev) {
+                       if (dp->di_rdev != vp->v_rdev) {
                                iput(iq);
                                goto again;
                        }
                                iput(iq);
                                goto again;
                        }
@@ -207,6 +209,7 @@ again:
                        ip->i_forw = ip;
                        ip->i_back = ip;
                        ip->i_number = 0;
                        ip->i_forw = ip;
                        ip->i_back = ip;
                        ip->i_number = 0;
+                       ITOV(ip)->v_type = VNON;
                        INSFREE(ip);
                        iunlock(ip);
                        ip->i_flag = 0;
                        INSFREE(ip);
                        iunlock(ip);
                        ip->i_flag = 0;
@@ -218,7 +221,6 @@ again:
                         * disk block.
                         */
                        ip = iq;
                         * disk block.
                         */
                        ip = iq;
-                       vp = ITOV(iq);
                        tdip.di_ic = dp->di_ic;
                        brelse(bp);
                        error = iupdat(ip, &time, &time, 1);
                        tdip.di_ic = dp->di_ic;
                        brelse(bp);
                        error = iupdat(ip, &time, &time, 1);
index 3341694..4d389ff 100644 (file)
@@ -14,7 +14,7 @@
  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  *
  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  *
- *     @(#)lfs_inode.c 7.10 (Berkeley) %G%
+ *     @(#)lfs_inode.c 7.11 (Berkeley) %G%
  */
 
 #include "param.h"
  */
 
 #include "param.h"
@@ -169,6 +169,7 @@ loop:
                ip->i_forw = ip;
                ip->i_back = ip;
                ip->i_number = 0;
                ip->i_forw = ip;
                ip->i_back = ip;
                ip->i_number = 0;
+               ITOV(ip)->v_type = VNON;
                INSFREE(ip);
                iunlock(ip);
                ip->i_flag = 0;
                INSFREE(ip);
                iunlock(ip);
                ip->i_flag = 0;
@@ -193,10 +194,11 @@ loop:
        } else {
 again:
                for (iq = bdevlisth; iq; iq = iq->i_devlst) {
        } else {
 again:
                for (iq = bdevlisth; iq; iq = iq->i_devlst) {
-                       if (dp->di_rdev != ITOV(iq)->v_rdev)
+                       vp = ITOV(iq);
+                       if (dp->di_rdev != vp->v_rdev)
                                continue;
                        igrab(iq);
                                continue;
                        igrab(iq);
-                       if (dp->di_rdev != ITOV(iq)->v_rdev) {
+                       if (dp->di_rdev != vp->v_rdev) {
                                iput(iq);
                                goto again;
                        }
                                iput(iq);
                                goto again;
                        }
@@ -207,6 +209,7 @@ again:
                        ip->i_forw = ip;
                        ip->i_back = ip;
                        ip->i_number = 0;
                        ip->i_forw = ip;
                        ip->i_back = ip;
                        ip->i_number = 0;
+                       ITOV(ip)->v_type = VNON;
                        INSFREE(ip);
                        iunlock(ip);
                        ip->i_flag = 0;
                        INSFREE(ip);
                        iunlock(ip);
                        ip->i_flag = 0;
@@ -218,7 +221,6 @@ again:
                         * disk block.
                         */
                        ip = iq;
                         * disk block.
                         */
                        ip = iq;
-                       vp = ITOV(iq);
                        tdip.di_ic = dp->di_ic;
                        brelse(bp);
                        error = iupdat(ip, &time, &time, 1);
                        tdip.di_ic = dp->di_ic;
                        brelse(bp);
                        error = iupdat(ip, &time, &time, 1);
index f758ff6..7c3bc9d 100644 (file)
@@ -14,7 +14,7 @@
  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  *
  * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
  * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  *
- *     @(#)ufs_inode.c 7.10 (Berkeley) %G%
+ *     @(#)ufs_inode.c 7.11 (Berkeley) %G%
  */
 
 #include "param.h"
  */
 
 #include "param.h"
@@ -169,6 +169,7 @@ loop:
                ip->i_forw = ip;
                ip->i_back = ip;
                ip->i_number = 0;
                ip->i_forw = ip;
                ip->i_back = ip;
                ip->i_number = 0;
+               ITOV(ip)->v_type = VNON;
                INSFREE(ip);
                iunlock(ip);
                ip->i_flag = 0;
                INSFREE(ip);
                iunlock(ip);
                ip->i_flag = 0;
@@ -193,10 +194,11 @@ loop:
        } else {
 again:
                for (iq = bdevlisth; iq; iq = iq->i_devlst) {
        } else {
 again:
                for (iq = bdevlisth; iq; iq = iq->i_devlst) {
-                       if (dp->di_rdev != ITOV(iq)->v_rdev)
+                       vp = ITOV(iq);
+                       if (dp->di_rdev != vp->v_rdev)
                                continue;
                        igrab(iq);
                                continue;
                        igrab(iq);
-                       if (dp->di_rdev != ITOV(iq)->v_rdev) {
+                       if (dp->di_rdev != vp->v_rdev) {
                                iput(iq);
                                goto again;
                        }
                                iput(iq);
                                goto again;
                        }
@@ -207,6 +209,7 @@ again:
                        ip->i_forw = ip;
                        ip->i_back = ip;
                        ip->i_number = 0;
                        ip->i_forw = ip;
                        ip->i_back = ip;
                        ip->i_number = 0;
+                       ITOV(ip)->v_type = VNON;
                        INSFREE(ip);
                        iunlock(ip);
                        ip->i_flag = 0;
                        INSFREE(ip);
                        iunlock(ip);
                        ip->i_flag = 0;
@@ -218,7 +221,6 @@ again:
                         * disk block.
                         */
                        ip = iq;
                         * disk block.
                         */
                        ip = iq;
-                       vp = ITOV(iq);
                        tdip.di_ic = dp->di_ic;
                        brelse(bp);
                        error = iupdat(ip, &time, &time, 1);
                        tdip.di_ic = dp->di_ic;
                        brelse(bp);
                        error = iupdat(ip, &time, &time, 1);