]> git.ipfire.org Git - thirdparty/util-linux.git/commit
libmount: allow to use propagation flags in fstab
authorKarel Zak <kzak@redhat.com>
Tue, 15 Jan 2013 12:55:29 +0000 (13:55 +0100)
committerKarel Zak <kzak@redhat.com>
Tue, 15 Jan 2013 12:55:29 +0000 (13:55 +0100)
commit6498ece0e777ae1aeab1319a21abec7457fb940f
tree52269349b81bcf2c37ed0e97603cb4b8dcb49d9f
parent741587f3e97ee8b610c54860ccc40b351aef14ee
libmount: allow to use propagation flags in fstab

Linux kernel does not allow to change more than one propagation flag
by one mount(2) syscall. The flags also cannot be mixed with another
mount options. It means that the propagation flags cannot be stored in
/etc/fstab, manual "mount --make-* <mountpoint>" is always necessary
after successful mount. Painful...

This patch implements additional mount(2) after previous successful
mount(2) (or exec /sbin/mount.<type>).

For example:

  mount /dev/sda1 /A -o private,unbindable,ro

or fstab entry:

  /dev/sda1   /A  auto  ro,private,unbindable

is implemented by three mount(2) calls:

- 1st mounts /dev/sda1 with MS_RDONLY
- 2nd sets MS_PRIVATE flag
        - 3rd sets MS_UNBINDABLE flag.

It's the same as as to manually call:

  mount /dev/sda1 /A -o ro
  mount --make-private /A
  mount --make-unbindable /A

This solution is not atomic, and umount(2) is not called if
propagation flags are not successfully applied, only error is
returned.

This change does not affect libmount API, so one beautiful day when
mount(2) syscall will be improved we can drop this nasty patch.

Signed-off-by: Karel Zak <kzak@redhat.com>
libmount/src/context.c
libmount/src/context_loopdev.c
libmount/src/context_mount.c
libmount/src/libmount.h.in
libmount/src/mountP.h
libmount/src/optmap.c