git: sys/vfs/hammer: Fix incomplete mountctl(2) vop behavior

Tomohiro Kusumi tkusumi at crater.dragonflybsd.org
Thu Sep 24 07:46:35 PDT 2015


commit 87b8f936e9f58031ae638e720361f548bcb9e121
Author: Tomohiro Kusumi <kusumi.tomohiro at gmail.com>
Date:   Thu Sep 17 19:31:56 2015 +0900

    sys/vfs/hammer: Fix incomplete mountctl(2) vop behavior
    
    mount(8) is unable to print nomirror mount option while other
    two (nohistory, master=) are properly printed. This is because
    hammer's mountctl and mount flags aren't implemented the way
    vfs expects them to be. mount(8) generates option strings by
    mountctl(2).
    
    ===== missing nomirror string
      # mount_hammer -o nohistory -o master=5 -o nomirror /dev/da1:/dev/da2:/dev/da3 /HAMMER
      # mount | grep /HAMMER
      TEST on /HAMMER (hammer, local, nohistory, master)
    
    ===== using this commit
      # mount_hammer -o nohistory -o master=5 -o nomirror /dev/da1:/dev/da2:/dev/da3 /HAMMER
      # mount | grep /HAMMER
      TEST on /HAMMER (hammer, local, nohistory, master, nomirror)
    
    This commit adds HMNT_NOMIRROR using a reserved HMNT_RESERVED
    and assigns HMNT_NOMIRROR to nomirror. This is necessary since
    two options (master=, nomirror) using the same HMNT_MASTERID
    is the root cause of above behavior.
    
    This change would affect userspace in theory, however the only
    userspace that would actually use these mount option flags is
    mount command itself (for inbox userspace programs at least).
    It's more important that hammer properly handles mount(8).
    
    This commit also adds a missing nomirror mountctl element in
    hammer_vop_mountctl() using HMNT_NOMIRROR so mountctl becomes
    aware of nomirror option.
    
    The reason nomirror needs to use HMNT_NOMIRROR instead of
    HMNT_MASTERID is because vfs_flagstostr() assumes each option
    has an unique flag (see vfs_flagstostr() where it does the
    following).
      flags &= ~optp->o_opt;
    
    This could have been fixed by changing above vfs code, but
    fixing hammer code is probably the right approach. Also note
    that master= and nomirror options aren't alias of each other.
    These two are similar but they do have different purpose, which
    should make sense to have independent flags, and that's what
    vfs expects.

Summary of changes:
 sbin/mount_hammer/mount_hammer.c | 4 +++-
 sys/vfs/hammer/hammer_mount.h    | 4 ++--
 sys/vfs/hammer/hammer_vfsops.c   | 2 +-
 sys/vfs/hammer/hammer_vnops.c    | 1 +
 4 files changed, 7 insertions(+), 4 deletions(-)

http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/87b8f936e9f58031ae638e720361f548bcb9e121


-- 
DragonFly BSD source repository



More information about the Commits mailing list