sbin/hammer: Avoid pfs via pfs on creation, not on status|destroy|upgrade|downgrade...
authorTomohiro Kusumi <kusumi.tomohiro@gmail.com>
Mon, 30 Mar 2015 19:03:26 +0000 (04:03 +0900)
committerTomohiro Kusumi <kusumi.tomohiro@gmail.com>
Wed, 1 Apr 2015 21:09:32 +0000 (06:09 +0900)
commit04a0b05ced614569686b573a192625f3c16205f7
treed5a7cabd9bee4b91a71bf7181cfd5f1d3dc74df0
parentd537df51b4644edb702f35c6cfb09fcd877ae08f
sbin/hammer: Avoid pfs via pfs on creation, not on status|destroy|upgrade|downgrade|update

- According to the getpfs() implementation, hammer command wants to
  avoid users create pfs via pfs (avoid-foot-shooting). However, it
  needs to be done when creating the pfs.

- Currently getpfs() is called by all pfs related commands except for
  creation (pfs-master, pfs-slave). This makes it possible for users
  to create pfs via pfs, but unable to status|destroy|upgrade|downgrade
  |update the once created pfs via pfs. In order to avoid this it should
  avoid pfs via pfs on pfs creation instead of in getpfs(). This also
  ensures other pfs related commands that handle pfs are protected from
  pfs via pfs.

- This commit also allows users to destroy once created pfs via pfs
  (by existing /sbin/hammer) as following examples show.

  ==========
  example1 - using existing /sbin/hammer

  # mount | grep TEST
  TEST on /HAMMER (hammer, local)
  # pwd
  /HAMMER
  # hammer pfs-master test1 > /dev/null
  # mkdir ./mnt1
  # mount_null ./test1 ./mnt1
  # cd ./mnt1
  # hammer pfs-master test2
  Creating PFS #2 succeeded!
  You are attempting to access a PFS softlink from a PFS.  It may not represent the PFS
  on the main filesystem mount that you expect!  You may only access PFS softlinks
  via the main filesystem mount!

  created pfs via pfs, but can't destroy (or any other command) it

  # hammer pfs-destroy ./test2
  You are attempting to access a PFS softlink from a PFS.  It may not represent the PFS
  on the main filesystem mount that you expect!  You may only access PFS softlinks
  via the main filesystem mount!

  ==========
  example2 - using this commit to properly destroy above test2

  # hammer pfs-destroy ./test2
  You have requested that PFS#2 () be destroyed
  This will irrevocably destroy all data on this PFS!!!!!
  Do you really want to do this? y
  This PFS is currently setup as a MASTER!
  Are you absolutely sure you want to destroy it? y
  Destroying PFS #2 () in  5 4 3 2 1.. starting destruction pass
  pfs-destroy of PFS#2 succeeded!

  pfs via pfs should be avoided on creation, but not after that.

  # hammer pfs-master test2
  You are attempting to access a PFS softlink from a PFS.  It may not represent the PFS
  on the main filesystem mount that you expect!  You may only access PFS softlinks
  via the main filesystem mount!
sbin/hammer/cmd_pseudofs.c