sharedsubtree_linux.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. // +build linux
  2. package mount
  3. func MakeShared(mountPoint string) error {
  4. return ensureMountedAs(mountPoint, "shared")
  5. }
  6. func MakeRShared(mountPoint string) error {
  7. return ensureMountedAs(mountPoint, "rshared")
  8. }
  9. func MakePrivate(mountPoint string) error {
  10. return ensureMountedAs(mountPoint, "private")
  11. }
  12. func MakeRPrivate(mountPoint string) error {
  13. return ensureMountedAs(mountPoint, "rprivate")
  14. }
  15. func MakeSlave(mountPoint string) error {
  16. return ensureMountedAs(mountPoint, "slave")
  17. }
  18. func MakeRSlave(mountPoint string) error {
  19. return ensureMountedAs(mountPoint, "rslave")
  20. }
  21. func MakeUnbindable(mountPoint string) error {
  22. return ensureMountedAs(mountPoint, "unbindable")
  23. }
  24. func MakeRUnbindable(mountPoint string) error {
  25. return ensureMountedAs(mountPoint, "runbindable")
  26. }
  27. func ensureMountedAs(mountPoint, options string) error {
  28. mounted, err := Mounted(mountPoint)
  29. if err != nil {
  30. return err
  31. }
  32. if !mounted {
  33. if err := Mount(mountPoint, mountPoint, "none", "bind,rw"); err != nil {
  34. return err
  35. }
  36. }
  37. mounted, err = Mounted(mountPoint)
  38. if err != nil {
  39. return err
  40. }
  41. return ForceMount("", mountPoint, "none", options)
  42. }