Author: mckusick
Date: Sun Jul 24 18:27:09 2011
New Revision: 224294
URL: http://svn.freebsd.org/changeset/base/224294

Log:
  Move the MNTK_SUJ flag in mnt_kern_flag to MNT_SUJ in mnt_flag
  so that it is visible to userland programs. This change enables
  the `mount' command with no arguments to be able to show if a
  filesystem is mounted using journaled soft updates as opposed
  to just normal soft updates.
  
  Approved by: re (bz)

Modified:
  head/sbin/mount/mount.c
  head/sys/kern/vfs_subr.c
  head/sys/sys/mount.h
  head/sys/ufs/ffs/ffs_softdep.c
  head/sys/ufs/ffs/ffs_vfsops.c
  head/sys/ufs/ufs/inode.h

Modified: head/sbin/mount/mount.c
==============================================================================
--- head/sbin/mount/mount.c     Sun Jul 24 18:16:14 2011        (r224293)
+++ head/sbin/mount/mount.c     Sun Jul 24 18:27:09 2011        (r224294)
@@ -109,6 +109,7 @@ static struct opt {
        { MNT_NOCLUSTERW,       "noclusterw" },
        { MNT_SUIDDIR,          "suiddir" },
        { MNT_SOFTDEP,          "soft-updates" },
+       { MNT_SUJ,              "journaled soft-updates" },
        { MNT_MULTILABEL,       "multilabel" },
        { MNT_ACLS,             "acls" },
        { MNT_NFS4ACLS,         "nfsv4acls" },
@@ -316,7 +317,7 @@ main(int argc, char *argv[])
        rval = 0;
        switch (argc) {
        case 0:
-               if ((mntsize = getmntinfo(&mntbuf, MNT_NOWAIT)) == 0)
+               if ((mntsize = getmntinfo(&mntbuf, MNT_WAIT)) == 0)
                        err(1, "getmntinfo");
                if (all) {
                        while ((fs = getfsent()) != NULL) {
@@ -665,7 +666,7 @@ getmntpt(const char *name)
        struct statfs *mntbuf;
        int i, mntsize;
 
-       mntsize = getmntinfo(&mntbuf, MNT_NOWAIT);
+       mntsize = getmntinfo(&mntbuf, MNT_WAIT);
        for (i = mntsize - 1; i >= 0; i--) {
                if (strcmp(mntbuf[i].f_mntfromname, name) == 0 ||
                    strcmp(mntbuf[i].f_mntonname, name) == 0)

Modified: head/sys/kern/vfs_subr.c
==============================================================================
--- head/sys/kern/vfs_subr.c    Sun Jul 24 18:16:14 2011        (r224293)
+++ head/sys/kern/vfs_subr.c    Sun Jul 24 18:27:09 2011        (r224294)
@@ -2841,6 +2841,7 @@ DB_SHOW_COMMAND(mount, db_show_mount)
        MNT_FLAG(MNT_ASYNC);
        MNT_FLAG(MNT_SUIDDIR);
        MNT_FLAG(MNT_SOFTDEP);
+       MNT_FLAG(MNT_SUJ);
        MNT_FLAG(MNT_NOSYMFOLLOW);
        MNT_FLAG(MNT_GJOURNAL);
        MNT_FLAG(MNT_MULTILABEL);
@@ -2866,7 +2867,6 @@ DB_SHOW_COMMAND(mount, db_show_mount)
        MNT_FLAG(MNT_FORCE);
        MNT_FLAG(MNT_SNAPSHOT);
        MNT_FLAG(MNT_BYFSID);
-       MNT_FLAG(MNT_SOFTDEP);
 #undef MNT_FLAG
        if (flags != 0) {
                if (buf[0] != '\0')
@@ -2894,7 +2894,6 @@ DB_SHOW_COMMAND(mount, db_show_mount)
        MNT_KERN_FLAG(MNTK_REFEXPIRE);
        MNT_KERN_FLAG(MNTK_EXTENDED_SHARED);
        MNT_KERN_FLAG(MNTK_SHARED_WRITES);
-       MNT_KERN_FLAG(MNTK_SUJ);
        MNT_KERN_FLAG(MNTK_UNMOUNT);
        MNT_KERN_FLAG(MNTK_MWAIT);
        MNT_KERN_FLAG(MNTK_SUSPEND);

Modified: head/sys/sys/mount.h
==============================================================================
--- head/sys/sys/mount.h        Sun Jul 24 18:16:14 2011        (r224293)
+++ head/sys/sys/mount.h        Sun Jul 24 18:27:09 2011        (r224294)
@@ -239,6 +239,7 @@ void          __mnt_vnode_markerfree(str
 #define        MNT_NOATIME     0x0000000010000000ULL /* dont update file 
access time */
 #define        MNT_NOCLUSTERR  0x0000000040000000ULL /* disable cluster read */
 #define        MNT_NOCLUSTERW  0x0000000080000000ULL /* disable cluster write 
*/
+#define        MNT_SUJ         0x0000000100000000ULL /* using journaled soft 
updates */
 
 /*
  * NFS export related mount flags.
@@ -267,7 +268,7 @@ void          __mnt_vnode_markerfree(str
  * but the 'mount' program may need changing to handle this.
  */
 #define        MNT_VISFLAGMASK (MNT_RDONLY     | MNT_SYNCHRONOUS | MNT_NOEXEC  
| \
-                       MNT_NOSUID      | MNT_UNION     | \
+                       MNT_NOSUID      | MNT_UNION     | MNT_SUJ       | \
                        MNT_ASYNC       | MNT_EXRDONLY  | MNT_EXPORTED  | \
                        MNT_DEFEXPORTED | MNT_EXPORTANON| MNT_EXKERB    | \
                        MNT_LOCAL       | MNT_USER      | MNT_QUOTA     | \
@@ -324,7 +325,6 @@ void          __mnt_vnode_markerfree(str
 #define        MNTK_REFEXPIRE  0x00000020      /* refcount expiring is 
happening */
 #define MNTK_EXTENDED_SHARED   0x00000040 /* Allow shared locking for more ops 
*/
 #define        MNTK_SHARED_WRITES      0x00000080 /* Allow shared locking for 
writes */
-#define        MNTK_SUJ        0x00000100      /* Softdep journaling enabled */
 #define MNTK_UNMOUNT   0x01000000      /* unmount in progress */
 #define        MNTK_MWAIT      0x02000000      /* waiting for unmount to 
finish */
 #define        MNTK_SUSPEND    0x08000000      /* request write suspension */

Modified: head/sys/ufs/ffs/ffs_softdep.c
==============================================================================
--- head/sys/ufs/ffs/ffs_softdep.c      Sun Jul 24 18:16:14 2011        
(r224293)
+++ head/sys/ufs/ffs/ffs_softdep.c      Sun Jul 24 18:27:09 2011        
(r224294)
@@ -2423,11 +2423,11 @@ softdep_unmount(mp)
 
        MNT_ILOCK(mp);
        mp->mnt_flag &= ~MNT_SOFTDEP;
-       if ((mp->mnt_kern_flag & MNTK_SUJ) == 0) {
+       if ((mp->mnt_flag & MNT_SUJ) == 0) {
                MNT_IUNLOCK(mp);
                return;
        }
-       mp->mnt_kern_flag &= ~MNTK_SUJ;
+       mp->mnt_flag &= ~MNT_SUJ;
        MNT_IUNLOCK(mp);
        journal_unmount(mp);
 }
@@ -2637,7 +2637,7 @@ journal_mount(mp, fs, cred)
 out:
        if (error == 0) {
                MNT_ILOCK(mp);
-               mp->mnt_kern_flag |= MNTK_SUJ;
+               mp->mnt_flag |= MNT_SUJ;
                MNT_IUNLOCK(mp);
                /*
                 * Only validate the journal contents if the
@@ -3060,7 +3060,7 @@ softdep_flushjournal(mp)
        struct jblocks *jblocks;
        struct ufsmount *ump;
 
-       if ((mp->mnt_kern_flag & MNTK_SUJ) == 0)
+       if ((mp->mnt_flag & MNT_SUJ) == 0)
                return;
        ump = VFSTOUFS(mp);
        jblocks = ump->softdep_jblocks;
@@ -3096,7 +3096,7 @@ softdep_process_journal(mp, needwk, flag
        int off;
        int devbsize;
 
-       if ((mp->mnt_kern_flag & MNTK_SUJ) == 0)
+       if ((mp->mnt_flag & MNT_SUJ) == 0)
                return;
        ump = VFSTOUFS(mp);
        fs = ump->um_fs;
@@ -3827,7 +3827,7 @@ newfreework(ump, freeblks, parent, lbn, 
        freework->fw_blkno = nb;
        freework->fw_frags = frags;
        freework->fw_indir = NULL;
-       freework->fw_ref = ((UFSTOVFS(ump)->mnt_kern_flag & MNTK_SUJ) == 0 ||
+       freework->fw_ref = ((UFSTOVFS(ump)->mnt_flag & MNT_SUJ) == 0 ||
            lbn >= -NXADDR) ? 0 : NINDIR(ump->um_fs) + 1;
        freework->fw_start = freework->fw_off = off;
        if (journal)
@@ -4681,7 +4681,7 @@ softdep_setup_inomapdep(bp, ip, newinum,
         * Allocate the journal reference add structure so that the bitmap
         * can be dependent on it.
         */
-       if (mp->mnt_kern_flag & MNTK_SUJ) {
+       if (mp->mnt_flag & MNT_SUJ) {
                jaddref = newjaddref(ip, newinum, 0, 0, mode);
                jaddref->ja_state |= NEWBLOCK;
        }
@@ -4734,7 +4734,7 @@ softdep_setup_blkmapdep(bp, mp, newblkno
         * Add it to the dependency list for the buffer holding
         * the cylinder group map from which it was allocated.
         */
-       if (mp->mnt_kern_flag & MNTK_SUJ) {
+       if (mp->mnt_flag & MNT_SUJ) {
                jnewblk = malloc(sizeof(*jnewblk), M_JNEWBLK, M_SOFTDEP_FLAGS);
                workitem_alloc(&jnewblk->jn_list, D_JNEWBLK, mp);
                jnewblk->jn_jsegdep = newjsegdep(&jnewblk->jn_list);
@@ -5199,7 +5199,7 @@ newfreefrag(ip, blkno, size, lbn)
        freefrag->ff_blkno = blkno;
        freefrag->ff_fragsize = size;
 
-       if ((ip->i_ump->um_mountp->mnt_kern_flag & MNTK_SUJ) != 0) {
+       if ((ip->i_ump->um_mountp->mnt_flag & MNT_SUJ) != 0) {
                freefrag->ff_jdep = (struct worklist *)
                    newjfreefrag(freefrag, ip, blkno, size, lbn);
        } else {
@@ -7254,7 +7254,7 @@ freework_freeblock(freework)
        freeblks = freework->fw_freeblks;
        ump = VFSTOUFS(freeblks->fb_list.wk_mp);
        fs = ump->um_fs;
-       needj = freeblks->fb_list.wk_mp->mnt_kern_flag & MNTK_SUJ;
+       needj = (freeblks->fb_list.wk_mp->mnt_flag & MNT_SUJ) != 0;
        bsize = lfragtosize(fs, freework->fw_frags);
        LIST_INIT(&wkhd);
        /*
@@ -7674,7 +7674,7 @@ indir_trunc(freework, dbn, lbn)
                ufs1fmt = 0;
        }
        level = lbn_level(lbn);
-       needj = UFSTOVFS(ump)->mnt_kern_flag & MNTK_SUJ;
+       needj = (UFSTOVFS(ump)->mnt_flag & MNT_SUJ) != 0;
        lbnadd = lbn_offset(fs, level);
        nblocks = btodb(fs->fs_bsize);
        nfreework = freework;
@@ -7860,7 +7860,7 @@ setup_newdir(dap, newinum, dinum, newdir
        mkdir2->md_state = ATTACHED | MKDIR_PARENT;
        mkdir2->md_diradd = dap;
        mkdir2->md_jaddref = NULL;
-       if ((mp->mnt_kern_flag & MNTK_SUJ) == 0) {
+       if ((mp->mnt_flag & MNT_SUJ) == 0) {
                mkdir1->md_state |= DEPCOMPLETE;
                mkdir2->md_state |= DEPCOMPLETE;
        }
@@ -7900,7 +7900,7 @@ setup_newdir(dap, newinum, dinum, newdir
         * been satisfied and mkdir2 can be freed.
         */
        inodedep_lookup(mp, dinum, 0, &inodedep);
-       if (mp->mnt_kern_flag & MNTK_SUJ) {
+       if (mp->mnt_flag & MNT_SUJ) {
                if (inodedep == NULL)
                        panic("setup_newdir: Lost parent.");
                jaddref = (struct jaddref *)TAILQ_LAST(&inodedep->id_inoreflst,
@@ -8031,7 +8031,7 @@ softdep_setup_directory_add(bp, dp, diro
         * written place it on the bufwait list, otherwise do the post-inode
         * write processing to put it on the id_pendinghd list.
         */
-       if (mp->mnt_kern_flag & MNTK_SUJ) {
+       if (mp->mnt_flag & MNT_SUJ) {
                jaddref = (struct jaddref *)TAILQ_LAST(&inodedep->id_inoreflst,
                    inoreflst);
                KASSERT(jaddref != NULL && jaddref->ja_parent == dp->i_number,
@@ -8047,7 +8047,7 @@ softdep_setup_directory_add(bp, dp, diro
         * Add the journal entries for . and .. links now that the primary
         * link is written.
         */
-       if (mkdir1 != NULL && mp->mnt_kern_flag & MNTK_SUJ) {
+       if (mkdir1 != NULL && (mp->mnt_flag & MNT_SUJ)) {
                jaddref = (struct jaddref *)TAILQ_PREV(&jaddref->ja_ref,
                    inoreflst, if_deps);
                KASSERT(jaddref != NULL &&
@@ -8144,7 +8144,7 @@ softdep_change_directoryentry_offset(bp,
         * determine if any affected adds or removes are present in the
         * journal.
         */
-       if (mp->mnt_kern_flag & MNTK_SUJ)  {
+       if (mp->mnt_flag & MNT_SUJ)  {
                flags = DEPALLOC;
                jmvref = newjmvref(dp, de->d_ino,
                    dp->i_offset + (oldloc - base),
@@ -8865,7 +8865,7 @@ softdep_setup_directory_change(bp, dp, i
         * processing to put it on the id_pendinghd list.
         */
        inodedep_lookup(mp, newinum, DEPALLOC, &inodedep);
-       if (mp->mnt_kern_flag & MNTK_SUJ) {
+       if (mp->mnt_flag & MNT_SUJ) {
                jaddref = (struct jaddref *)TAILQ_LAST(&inodedep->id_inoreflst,
                    inoreflst);
                KASSERT(jaddref != NULL && jaddref->ja_parent == dp->i_number,
@@ -8928,7 +8928,7 @@ softdep_setup_sbupdate(ump, fs, bp)
        struct sbdep *sbdep;
        struct worklist *wk;
 
-       if ((ump->um_mountp->mnt_kern_flag & MNTK_SUJ) == 0)
+       if ((ump->um_mountp->mnt_flag & MNT_SUJ) == 0)
                return;
        LIST_FOREACH(wk, &bp->b_dep, wk_list)
                if (wk->wk_type == D_SBDEP)
@@ -9046,7 +9046,7 @@ unlinked_inodedep(mp, inodedep)
 {
        struct ufsmount *ump;
 
-       if ((mp->mnt_kern_flag & MNTK_SUJ) == 0)
+       if ((mp->mnt_flag & MNT_SUJ) == 0)
                return;
        ump = VFSTOUFS(mp);
        ump->um_fs->fs_fmod = 1;

Modified: head/sys/ufs/ffs/ffs_vfsops.c
==============================================================================
--- head/sys/ufs/ffs/ffs_vfsops.c       Sun Jul 24 18:16:14 2011        
(r224293)
+++ head/sys/ufs/ffs/ffs_vfsops.c       Sun Jul 24 18:27:09 2011        
(r224294)
@@ -1389,6 +1389,9 @@ ffs_statfs(mp, sbp)
        fs = ump->um_fs;
        if (fs->fs_magic != FS_UFS1_MAGIC && fs->fs_magic != FS_UFS2_MAGIC)
                panic("ffs_statfs");
+       /* Don't export MNT_SOFTDEP when MNT_SUJ is in use */
+       if ((sbp->f_flags & (MNT_SOFTDEP | MNT_SUJ)) == (MNT_SOFTDEP | MNT_SUJ))
+               sbp->f_flags &= ~MNT_SOFTDEP;
        sbp->f_version = STATFS_VERSION;
        sbp->f_bsize = fs->fs_fsize;
        sbp->f_iosize = fs->fs_bsize;

Modified: head/sys/ufs/ufs/inode.h
==============================================================================
--- head/sys/ufs/ufs/inode.h    Sun Jul 24 18:16:14 2011        (r224293)
+++ head/sys/ufs/ufs/inode.h    Sun Jul 24 18:27:09 2011        (r224294)
@@ -176,7 +176,7 @@ struct indir {
 /* Determine if soft dependencies are being done */
 #define DOINGSOFTDEP(vp)       ((vp)->v_mount->mnt_flag & MNT_SOFTDEP)
 #define DOINGASYNC(vp)         ((vp)->v_mount->mnt_kern_flag & MNTK_ASYNC)
-#define DOINGSUJ(vp)           ((vp)->v_mount->mnt_kern_flag & MNTK_SUJ)
+#define DOINGSUJ(vp)           ((vp)->v_mount->mnt_flag & MNT_SUJ)
 
 /* This overlays the fid structure (see mount.h). */
 struct ufid {
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to