Source-Changes-HG archive

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

[src/trunk]: src More lfs superblock accessors.



details:   https://anonhg.NetBSD.org/src/rev/e3b42e3eaccf
branches:  trunk
changeset: 339478:e3b42e3eaccf
user:      dholland <dholland%NetBSD.org@localhost>
date:      Fri Jul 24 06:59:31 2015 +0000

description:
More lfs superblock accessors.
(This changes the rest of the code over; all the accessors were
already added.)

The difference between this commit and the previous one is arbitrary,
but the previous one passed the regression tests on its own so I'm
keeping it separate to help with any bisections that might be needed
in the future.

diffstat:

 libexec/lfs_cleanerd/cleaner.h      |   38 ++++++++-
 libexec/lfs_cleanerd/coalesce.c     |   19 ++--
 libexec/lfs_cleanerd/lfs_cleanerd.c |  108 +++++++++++++------------
 sbin/dump_lfs/lfs_inode.c           |   38 ++++----
 sbin/fsck_lfs/inode.c               |    6 +-
 sbin/fsck_lfs/lfs.c                 |   87 ++++++++++----------
 sbin/fsck_lfs/main.c                |    4 +-
 sbin/fsck_lfs/pass1.c               |    6 +-
 sbin/fsck_lfs/pass5.c               |   38 ++++----
 sbin/fsck_lfs/pass6.c               |   62 +++++++-------
 sbin/fsck_lfs/segwrite.c            |   32 +++---
 sbin/fsck_lfs/setup.c               |   82 ++++++++++---------
 sbin/fsck_lfs/utilities.c           |   12 +-
 sbin/newfs_lfs/make_lfs.c           |  150 ++++++++++++++++++------------------
 sbin/resize_lfs/resize_lfs.c        |   12 +-
 sbin/scan_ffs/scan_ffs.c            |   18 ++-
 sys/ufs/lfs/lfs.h                   |  114 +++++++++++++--------------
 sys/ufs/lfs/lfs_alloc.c             |   12 +-
 sys/ufs/lfs/lfs_balloc.c            |   12 +-
 sys/ufs/lfs/lfs_bio.c               |    8 +-
 sys/ufs/lfs/lfs_inode.c             |   20 ++--
 sys/ufs/lfs/lfs_pages.c             |   12 +-
 sys/ufs/lfs/lfs_rfw.c               |   38 ++++----
 sys/ufs/lfs/lfs_segment.c           |   88 ++++++++++----------
 sys/ufs/lfs/lfs_subr.c              |   14 +-
 sys/ufs/lfs/lfs_syscalls.c          |   14 +-
 sys/ufs/lfs/lfs_vfsops.c            |  116 ++++++++++++++-------------
 sys/ufs/lfs/lfs_vnops.c             |   12 +-
 sys/ufs/lfs/ulfs_inode.h            |    8 +-
 sys/ufs/lfs/ulfs_quota2.c           |    6 +-
 sys/ufs/lfs/ulfs_readwrite.c        |   14 +-
 usr.sbin/dumplfs/dumplfs.c          |   40 ++++----
 32 files changed, 646 insertions(+), 594 deletions(-)

diffs (truncated from 3667 to 300 lines):

diff -r 87b3c8dbddd8 -r e3b42e3eaccf libexec/lfs_cleanerd/cleaner.h
--- a/libexec/lfs_cleanerd/cleaner.h    Fri Jul 24 06:56:41 2015 +0000
+++ b/libexec/lfs_cleanerd/cleaner.h    Fri Jul 24 06:59:31 2015 +0000
@@ -52,7 +52,8 @@
        static __unused inline void                             \
        clfs_sb_add##field(struct clfs *fs, type val)           \
        {                                                       \
-               fs->lfs_dlfs.dlfs_##field += val;               \
+               type *p = &fs->lfs_dlfs.dlfs_##field;           \
+               *p += val;                                      \
        }
 
 /* more ugh... */
@@ -61,22 +62,57 @@
 CLFS_DEF_SB_ACCESSOR(u_int32_t, fsize);
 CLFS_DEF_SB_ACCESSOR(u_int32_t, frag);
 CLFS_DEF_SB_ACCESSOR(u_int32_t, ifile);
+CLFS_DEF_SB_ACCESSOR(u_int32_t, inopb);
 CLFS_DEF_SB_ACCESSOR(u_int32_t, ifpb);
 CLFS_DEF_SB_ACCESSOR(u_int32_t, sepb);
 CLFS_DEF_SB_ACCESSOR(u_int32_t, nseg);
 CLFS_DEF_SB_ACCESSOR(u_int32_t, cleansz);
 CLFS_DEF_SB_ACCESSOR(u_int32_t, segtabsz);
+CLFS_DEF_SB_ACCESSOR(u_int64_t, bmask);
+CLFS_DEF_SB_ACCESSOR(u_int32_t, bshift);
+CLFS_DEF_SB_ACCESSOR(u_int64_t, ffmask);
+CLFS_DEF_SB_ACCESSOR(u_int32_t, ffshift);
+CLFS_DEF_SB_ACCESSOR(u_int32_t, fbshift);
+CLFS_DEF_SB_ACCESSOR(u_int32_t, blktodb);
+CLFS_DEF_SB_ACCESSOR(u_int32_t, minfreeseg);
+CLFS_DEF_SB_ACCESSOR(u_int32_t, sumsize);
+CLFS_DEF_SB_ACCESSOR(u_int32_t, ibsize);
+CLFS_DEF_SB_ACCESSOR(int32_t, s0addr);
+static __unused inline int32_t
+clfs_sb_getsboff(struct clfs *fs, unsigned n)
+{
+       assert(n < LFS_MAXNUMSB);
+       return fs->lfs_dlfs.dlfs_sboffs[n];
+}
+static __unused inline const char *
+clfs_sb_getfsmnt(struct clfs *fs)
+{
+       return (const char *)fs->lfs_dlfs.dlfs_fsmnt;
+}
 
 /* still more ugh... */
 #define lfs_sb_getssize(fs) clfs_sb_getssize(fs)
 #define lfs_sb_getbsize(fs) clfs_sb_getbsize(fs)
 #define lfs_sb_getfsize(fs) clfs_sb_getfsize(fs)
 #define lfs_sb_getfrag(fs) clfs_sb_getfrag(fs)
+#define lfs_sb_getinopb(fs) clfs_sb_getinopb(fs)
 #define lfs_sb_getifpb(fs) clfs_sb_getifpb(fs)
 #define lfs_sb_getsepb(fs) clfs_sb_getsepb(fs)
 #define lfs_sb_getnseg(fs) clfs_sb_getnseg(fs)
 #define lfs_sb_getcleansz(fs) clfs_sb_getcleansz(fs)
 #define lfs_sb_getsegtabsz(fs) clfs_sb_getsegtabsz(fs)
+#define lfs_sb_getbmask(fs) clfs_sb_getbmask(fs)
+#define lfs_sb_getbshift(fs) clfs_sb_getbshift(fs)
+#define lfs_sb_getffmask(fs) clfs_sb_getffmask(fs)
+#define lfs_sb_getffshift(fs) clfs_sb_getffshift(fs)
+#define lfs_sb_getfbshift(fs) clfs_sb_getfbshift(fs)
+#define lfs_sb_getblktodb(fs) clfs_sb_getblktodb(fs)
+#define lfs_sb_getminfreeseg(fs) clfs_sb_getminfreeseg(fs)
+#define lfs_sb_getsumsize(fs) clfs_sb_getsumsize(fs)
+#define lfs_sb_getibsize(fs) clfs_sb_getibsize(fs)
+#define lfs_sb_gets0addr(fs) clfs_sb_gets0addr(fs)
+#define lfs_sb_getsboff(fs, n) clfs_sb_getsboff(fs, n)
+#define lfs_sb_getfsmnt(fs) clfs_sb_getfsmnt(fs)
 
 /*
  * Fraction of the could-be-clean segments required to be clean.
diff -r 87b3c8dbddd8 -r e3b42e3eaccf libexec/lfs_cleanerd/coalesce.c
--- a/libexec/lfs_cleanerd/coalesce.c   Fri Jul 24 06:56:41 2015 +0000
+++ b/libexec/lfs_cleanerd/coalesce.c   Fri Jul 24 06:59:31 2015 +0000
@@ -1,4 +1,4 @@
-/*      $NetBSD: coalesce.c,v 1.25 2015/07/24 06:56:41 dholland Exp $  */
+/*      $NetBSD: coalesce.c,v 1.26 2015/07/24 06:59:31 dholland Exp $  */
 
 /*-
  * Copyright (c) 2002, 2005 The NetBSD Foundation, Inc.
@@ -49,6 +49,7 @@
 #include <util.h>
 #include <errno.h>
 #include <err.h>
+#include <assert.h>
 
 #include <syslog.h>
 
@@ -118,9 +119,9 @@
        if (daddr == 0x0)
                return NULL;
 
-       bread(fs->clfs_devvp, daddr, fs->lfs_ibsize, 0, &bp);
+       bread(fs->clfs_devvp, daddr, lfs_sb_getibsize(fs), 0, &bp);
        for (dip = (struct ulfs1_dinode *)bp->b_data;
-            dip < (struct ulfs1_dinode *)(bp->b_data + fs->lfs_ibsize); dip++)
+            dip < (struct ulfs1_dinode *)(bp->b_data + lfs_sb_getibsize(fs)); dip++)
                if (dip->di_inumber == ino) {
                        r = (struct ulfs1_dinode *)malloc(sizeof(*r));
                        if (r == NULL)
@@ -201,7 +202,7 @@
        lim.blkcnt = nb;
        if (kops.ko_fcntl(fs->clfs_ifilefd, LFCNBMAPV, &lim) < 0) { 
                syslog(LOG_WARNING, "%s: coalesce: LFCNBMAPV: %m",
-                      fs->lfs_fsmnt);
+                      lfs_sb_getfsmnt(fs));
                retval = COALESCE_BADBMAPV;
                goto out;
        }
@@ -218,7 +219,7 @@
                if (bip[i].bi_daddr != bip[i - 1].bi_daddr + clfs_sb_getfrag(fs))
                        ++noff;
                toff += abs(bip[i].bi_daddr - bip[i - 1].bi_daddr
-                   - clfs_sb_getfrag(fs)) >> fs->lfs_fbshift;
+                   - clfs_sb_getfrag(fs)) >> lfs_sb_getfbshift(fs);
        }
 
        /*
@@ -339,7 +340,7 @@
        memset(totals, 0, sizeof(totals));
 
        fstat(fs->clfs_ifilefd, &st);
-       maxino = lfs_sb_getifpb(fs) * (st.st_size >> fs->lfs_bshift) -
+       maxino = lfs_sb_getifpb(fs) * (st.st_size >> lfs_sb_getbshift(fs)) -
                lfs_sb_getsegtabsz(fs) - lfs_sb_getcleansz(fs);
 
        for (i = 0; i < maxino; i++) {
@@ -383,14 +384,14 @@
         */
        childpid = fork();
        if (childpid < 0) {
-               syslog(LOG_ERR, "%s: fork to coaleasce: %m", fs->lfs_fsmnt);
+               syslog(LOG_ERR, "%s: fork to coaleasce: %m", lfs_sb_getfsmnt(fs));
                return 0;
        } else if (childpid == 0) {
                syslog(LOG_NOTICE, "%s: new coalescing process, pid %d",
-                      fs->lfs_fsmnt, getpid());
+                      lfs_sb_getfsmnt(fs), getpid());
                num = clean_all_inodes(fs);
                syslog(LOG_NOTICE, "%s: coalesced %d discontiguous inodes",
-                      fs->lfs_fsmnt, num);
+                      lfs_sb_getfsmnt(fs), num);
                exit(0);
        }
 
diff -r 87b3c8dbddd8 -r e3b42e3eaccf libexec/lfs_cleanerd/lfs_cleanerd.c
--- a/libexec/lfs_cleanerd/lfs_cleanerd.c       Fri Jul 24 06:56:41 2015 +0000
+++ b/libexec/lfs_cleanerd/lfs_cleanerd.c       Fri Jul 24 06:59:31 2015 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: lfs_cleanerd.c,v 1.39 2015/07/24 06:56:41 dholland Exp $    */
+/* $NetBSD: lfs_cleanerd.c,v 1.40 2015/07/24 06:59:31 dholland Exp $    */
 
 /*-
  * Copyright (c) 2005 The NetBSD Foundation, Inc.
@@ -120,7 +120,7 @@
 void
 handle_error(struct clfs **cfsp, int n)
 {
-       syslog(LOG_NOTICE, "%s: detaching cleaner", cfsp[n]->lfs_fsmnt);
+       syslog(LOG_NOTICE, "%s: detaching cleaner", lfs_sb_getfsmnt(cfsp[n]));
        free(cfsp[n]);
        if (n != nfss - 1)
                cfsp[n] = cfsp[nfss - 1];
@@ -133,9 +133,11 @@
 int
 reinit_fs(struct clfs *fs)
 {
-       char fsname[MNAMELEN];
+       char fsname[sizeof(fs->lfs_dlfs.dlfs_fsmnt)];
 
-       strncpy(fsname, (char *)fs->lfs_fsmnt, MNAMELEN);
+       memcpy(fsname, fs->lfs_dlfs.dlfs_fsmnt, sizeof(fsname));
+       fsname[sizeof(fsname) - 1] = '\0';
+
        kops.ko_close(fs->clfs_ifilefd);
        kops.ko_close(fs->clfs_devfd);
        fd_reclaim(fs->clfs_devvp);
@@ -174,11 +176,11 @@
                                 atatime);
 
        /* Allocate and clear segtab */
-       fs->clfs_segtab = (struct clfs_seguse *)malloc(fs->lfs_nseg *
+       fs->clfs_segtab = (struct clfs_seguse *)malloc(lfs_sb_getnseg(fs) *
                                                sizeof(*fs->clfs_segtab));
-       fs->clfs_segtabp = (struct clfs_seguse **)malloc(fs->lfs_nseg *
+       fs->clfs_segtabp = (struct clfs_seguse **)malloc(lfs_sb_getnseg(fs) *
                                                sizeof(*fs->clfs_segtabp));
-       for (i = 0; i < fs->lfs_nseg; i++) {
+       for (i = 0; i < lfs_sb_getnseg(fs); i++) {
                fs->clfs_segtabp[i] = &(fs->clfs_segtab[i]);
                fs->clfs_segtab[i].flags = 0x0;
        }
@@ -200,6 +202,7 @@
 int
 init_fs(struct clfs *fs, char *fsname)
 {
+       char mnttmp[sizeof(fs->lfs_dlfs.dlfs_fsmnt)];
        struct statvfs sf;
        int rootfd;
        int i;
@@ -261,7 +264,9 @@
        }
 
        /* Assume fsname is the mounted name */
-       strncpy((char *)fs->lfs_fsmnt, fsname, MNAMELEN);
+       strncpy(mnttmp, fsname, sizeof(mnttmp));
+       mnttmp[sizeof(mnttmp) - 1] = '\0';
+       memcpy(fs->lfs_dlfs.dlfs_fsmnt, mnttmp, sizeof(mnttmp));
 
        /* Set up vnodes for Ifile and raw device */
        fs->lfs_ivnode = fd_vget(fs->clfs_ifilefd, clfs_sb_getbsize(fs), 0, 0);
@@ -269,9 +274,9 @@
                                 atatime);
 
        /* Allocate and clear segtab */
-       fs->clfs_segtab = (struct clfs_seguse *)malloc(fs->lfs_nseg *
+       fs->clfs_segtab = (struct clfs_seguse *)malloc(lfs_sb_getnseg(fs) *
                                                sizeof(*fs->clfs_segtab));
-       fs->clfs_segtabp = (struct clfs_seguse **)malloc(fs->lfs_nseg *
+       fs->clfs_segtabp = (struct clfs_seguse **)malloc(lfs_sb_getnseg(fs) *
                                                sizeof(*fs->clfs_segtabp));
        if (fs->clfs_segtab == NULL || fs->clfs_segtabp == NULL) {
                syslog(LOG_ERR, "%s: couldn't malloc segment table: %m",
@@ -279,7 +284,7 @@
                return -1;
        }
 
-       for (i = 0; i < fs->lfs_nseg; i++) {
+       for (i = 0; i < lfs_sb_getnseg(fs); i++) {
                fs->clfs_segtabp[i] = &(fs->clfs_segtab[i]);
                fs->clfs_segtab[i].flags = 0x0;
        }
@@ -316,7 +321,7 @@
                ohashmax = hashmax;
                bufrehash(st.st_size / clfs_sb_getbsize(fs));
                dlog("%s: resized buffer hash from %d to %d",
-                    fs->lfs_fsmnt, ohashmax, hashmax);
+                    lfs_sb_getfsmnt(fs), ohashmax, hashmax);
        }
 }
 
@@ -335,7 +340,7 @@
                      lfs_sb_getsegtabsz(fs), clfs_sb_getbsize(fs), 0, bpp);
        if (error)
                syslog(LOG_ERR, "%s: ientry failed for ino %d",
-                       fs->lfs_fsmnt, (int)ino);
+                       lfs_sb_getfsmnt(fs), (int)ino);
        *ifpp = (IFILE *)(*bpp)->b_data + ino % lfs_sb_getifpb(fs);
        return;
 }
@@ -400,7 +405,7 @@
         */
        cp = fd_ptrget(fs->clfs_devvp, daddr);
        ssp = (SEGSUM *)cp;
-       iaddrp = ((int32_t *)(cp + fs->lfs_ibsize)) - 1;
+       iaddrp = ((int32_t *)(cp + lfs_sb_getibsize(fs))) - 1;
        fip = (FINFO *)(cp + sizeof(SEGSUM));
 
        /*
@@ -408,14 +413,14 @@
         */
        if (ssp->ss_magic != SS_MAGIC) {
                syslog(LOG_WARNING, "%s: sumsum magic number bad at 0x%x:"
-                      " read 0x%x, expected 0x%x", fs->lfs_fsmnt,
+                      " read 0x%x, expected 0x%x", lfs_sb_getfsmnt(fs),
                       (int32_t)daddr, ssp->ss_magic, SS_MAGIC);
                return 0x0;
        }
-       ck = cksum(&ssp->ss_datasum, fs->lfs_sumsize - sizeof(ssp->ss_sumsum));
+       ck = cksum(&ssp->ss_datasum, lfs_sb_getsumsize(fs) - sizeof(ssp->ss_sumsum));
        if (ck != ssp->ss_sumsum) {
                syslog(LOG_WARNING, "%s: sumsum checksum mismatch at 0x%x:"
-                      " read 0x%x, computed 0x%x", fs->lfs_fsmnt,
+                      " read 0x%x, computed 0x%x", lfs_sb_getfsmnt(fs),
                       (int32_t)daddr, ssp->ss_sumsum, ck);
                return 0x0;
        }
@@ -439,7 +444,7 @@
                 */
                if (fic >= ssp->ss_nfinfo && *iaddrp != daddr) {
                        syslog(LOG_WARNING, "%s: bad pseg at %x (seg %d)",
-                              fs->lfs_fsmnt, odaddr, lfs_dtosn(fs, odaddr));
+                              lfs_sb_getfsmnt(fs), odaddr, lfs_dtosn(fs, odaddr));
                        *bipp = bip;
                        return 0x0;
                }
@@ -451,7 +456,7 @@
                        cp = fd_ptrget(fs->clfs_devvp, daddr);
                        ck = lfs_cksum_part(cp, sizeof(u_int32_t), ck);
                        dip = (struct ulfs1_dinode *)cp;
-                       for (i = 0; i < fs->lfs_inopb; i++) {
+                       for (i = 0; i < lfs_sb_getinopb(fs); i++) {
                                if (dip[i].di_inumber == 0)
                                        break;
 
@@ -488,7 +493,7 @@
                                bip[*bic - 1].bi_size = LFS_DINODE1_SIZE;
                        }
                        inoc += i;
-                       daddr += lfs_btofsb(fs, fs->lfs_ibsize);



Home | Main Index | Thread Index | Old Index