Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/bouyer-quota2]: src/sbin/fsck_ffs Snapshot inode doesn't count for block...



details:   https://anonhg.NetBSD.org/src/rev/0c5192d411cc
branches:  bouyer-quota2
changeset: 761168:0c5192d411cc
user:      bouyer <bouyer%NetBSD.org@localhost>
date:      Sat Feb 12 19:53:32 2011 +0000

description:
Snapshot inode doesn't count for block quotas.

diffstat:

 sbin/fsck_ffs/inode.c |  10 +++++++---
 sbin/fsck_ffs/pass1.c |   6 +++---
 sbin/fsck_ffs/pass4.c |  13 +++++++++----
 3 files changed, 19 insertions(+), 10 deletions(-)

diffs (121 lines):

diff -r f2c0ca5f0501 -r 0c5192d411cc sbin/fsck_ffs/inode.c
--- a/sbin/fsck_ffs/inode.c     Sat Feb 12 19:52:39 2011 +0000
+++ b/sbin/fsck_ffs/inode.c     Sat Feb 12 19:53:32 2011 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: inode.c,v 1.63.2.1 2011/01/20 14:24:53 bouyer Exp $    */
+/*     $NetBSD: inode.c,v 1.63.2.2 2011/02/12 19:53:32 bouyer Exp $    */
 
 /*
  * Copyright (c) 1980, 1986, 1993
@@ -34,12 +34,13 @@
 #if 0
 static char sccsid[] = "@(#)inode.c    8.8 (Berkeley) 4/28/95";
 #else
-__RCSID("$NetBSD: inode.c,v 1.63.2.1 2011/01/20 14:24:53 bouyer Exp $");
+__RCSID("$NetBSD: inode.c,v 1.63.2.2 2011/02/12 19:53:32 bouyer Exp $");
 #endif
 #endif /* not lint */
 
 #include <sys/param.h>
 #include <sys/time.h>
+#include <sys/stat.h>
 
 #include <ufs/ufs/dinode.h>
 #include <ufs/ufs/dir.h>
@@ -830,12 +831,15 @@
        }
 
        memset(&idesc, 0, sizeof(struct inodesc));
-       idesc.id_type = ADDR;
        idesc.id_func = pass4check;
        idesc.id_number = ino;
        dp = ginode(ino);
        idesc.id_uid = iswap32(DIP(dp, uid));
        idesc.id_gid = iswap32(DIP(dp, gid));
+       if (iswap32(DIP(dp, flags)) & SF_SNAPSHOT)
+               idesc.id_type = SNAP;
+       else
+               idesc.id_type = ADDR;
        (void)ckinode(dp, &idesc);
        clearinode(dp);
        inodirty();
diff -r f2c0ca5f0501 -r 0c5192d411cc sbin/fsck_ffs/pass1.c
--- a/sbin/fsck_ffs/pass1.c     Sat Feb 12 19:52:39 2011 +0000
+++ b/sbin/fsck_ffs/pass1.c     Sat Feb 12 19:53:32 2011 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: pass1.c,v 1.46.14.1 2011/01/20 14:24:53 bouyer Exp $   */
+/*     $NetBSD: pass1.c,v 1.46.14.2 2011/02/12 19:53:32 bouyer Exp $   */
 
 /*
  * Copyright (c) 1980, 1986, 1993
@@ -34,7 +34,7 @@
 #if 0
 static char sccsid[] = "@(#)pass1.c    8.6 (Berkeley) 4/28/95";
 #else
-__RCSID("$NetBSD: pass1.c,v 1.46.14.1 2011/01/20 14:24:53 bouyer Exp $");
+__RCSID("$NetBSD: pass1.c,v 1.46.14.2 2011/02/12 19:53:32 bouyer Exp $");
 #endif
 #endif /* not lint */
 
@@ -467,7 +467,7 @@
                inodirty();
        }
        update_uquot(inumber, idesc->id_uid, idesc->id_gid,
-           idesc->id_entryno, 1);
+           (idesc->id_type == SNAP) ? 0 : idesc->id_entryno, 1);
        return;
 unknown:
        pfatal("UNKNOWN FILE TYPE I=%llu", (unsigned long long)inumber);
diff -r f2c0ca5f0501 -r 0c5192d411cc sbin/fsck_ffs/pass4.c
--- a/sbin/fsck_ffs/pass4.c     Sat Feb 12 19:52:39 2011 +0000
+++ b/sbin/fsck_ffs/pass4.c     Sat Feb 12 19:53:32 2011 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: pass4.c,v 1.25.14.1 2011/01/20 14:24:54 bouyer Exp $   */
+/*     $NetBSD: pass4.c,v 1.25.14.2 2011/02/12 19:53:32 bouyer Exp $   */
 
 /*
  * Copyright (c) 1980, 1986, 1993
@@ -34,12 +34,13 @@
 #if 0
 static char sccsid[] = "@(#)pass4.c    8.4 (Berkeley) 4/28/95";
 #else
-__RCSID("$NetBSD: pass4.c,v 1.25.14.1 2011/01/20 14:24:54 bouyer Exp $");
+__RCSID("$NetBSD: pass4.c,v 1.25.14.2 2011/02/12 19:53:32 bouyer Exp $");
 #endif
 #endif /* not lint */
 
 #include <sys/param.h>
 #include <sys/time.h>
+#include <sys/stat.h>
 
 #include <ufs/ufs/ufs_bswap.h>
 #include <ufs/ufs/dinode.h>
@@ -65,7 +66,6 @@
        struct inostat *info;
 
        memset(&idesc, 0, sizeof(struct inodesc));
-       idesc.id_type = ADDR;
        idesc.id_func = pass4check;
 
        for (cg = 0; cg < sblock->fs_ncg; cg++) {
@@ -89,6 +89,10 @@
                        idesc.id_number = inumber;
                        idesc.id_uid = iswap32(DIP(dp, uid));
                        idesc.id_gid = iswap32(DIP(dp, gid));
+                       if (iswap32(DIP(dp, flags)) & SF_SNAPSHOT)
+                               idesc.id_type = SNAP;
+                       else
+                               idesc.id_type = ADDR;
                        switch (info->ino_state) {
                        case FSTATE:
                        case DFOUND:
@@ -189,7 +193,8 @@
 
                                n_blks--;
                                update_uquot(idesc->id_number, idesc->id_uid,
-                                   idesc->id_gid, -btodb(sblock->fs_fsize), 0);
+                                   idesc->id_gid, (idesc->id_type == SNAP) ?
+                                   0 : -btodb(sblock->fs_fsize), 0);
                                if (idesc->id_numfrags != sblock->fs_frag &&
                                    cgp) {
                                        cgp->cg_cs.cs_nffree ++;



Home | Main Index | Thread Index | Old Index