Lines Matching full:a

23 A process wants to clone its own namespace, but still wants to access the CD
37 a) A **shared mount** can be replicated to as many mountpoints and all the
42 Let's say /mnt has a mount that is shared::
61 a b c
64 a b c
66 Now let's say we mount a device at /tmp/a::
68 # mount /dev/sd0 /tmp/a
70 # ls /tmp/a
73 # ls /mnt/a
78 And the same is true even when /dev/sd0 is mounted on /mnt/a. The
79 contents will be visible under /tmp/a too.
82 b) A **slave mount** is like a shared mount except that mount and umount events
85 All slave mounts have a master mount which is a shared.
89 Let's say /mnt has a mount which is shared::
97 the new mount at /tmp becomes a shared mount and it is a replica of
100 Now let's make the mount at /tmp; a slave of /mnt::
104 let's mount /dev/sd0 on /mnt/a::
106 # mount /dev/sd0 /mnt/a
108 # ls /mnt/a
111 # ls /tmp/a
130 c) A **private mount** does not forward or receive propagation.
138 let's say we have a mount at /mnt and we make it unbindable::
147 Binding a unbindable mount is a invalid operation.
165 A) A process wants to clone its own namespace, but still wants to
175 Now any process that clones off a new namespace will have a
176 mount at /cdrom which is a replica of the same mount in the
179 So when a CD is inserted and mounted at /cdrom that mount gets
183 B) A process wants its mounts invisible to any other process, but
193 A new process can clone off a new namespace. And mark some part
209 The above semantics allows a way to share mounts across
212 associate/disassociate a namespace with userid, then each user
231 and if /usr has a versioning filesystem mounted, then that
235 A user can request v3 version of the file /usr/fs/namespace.c
250 a) Mount states
252 A **propagation event** is defined as event generated on a vfsmount
255 A **peer group** is defined as a group of vfsmounts that propagate
258 A given mount can be in one of the following states:
262 A **shared mount** is defined as a vfsmount that belongs to a
278 A **slave mount** is defined as a vfsmount that receives
281 A slave mount as the name implies has a master mount from which
283 the slave mount to the master. Only a shared mount can be made
284 a slave by executing the following command::
288 A shared mount that is made as a slave is no more shared unless
293 A vfsmount can be both **shared** as well as **slave**. This state
294 indicates that the mount is a slave of some vfsmount, and
300 peer group, and this peer-group is a slave of some other
303 Only a slave vfsmount can be made as 'shared and slave' by
308 or by moving the slave vfsmount under a shared vfsmount.
312 A **private mount** is defined as vfsmount that does not
317 A **unbindable mount** is defined as vfsmount that does not
324 The state diagram below explains the state transition of a mount,
348 ** slaving a non-shared mount has no effect on the mount.
351 the state of a mount depending on type of the destination mount. Its
358 mount --bind A/a B/b
360 where 'A' is the source mount, 'a' is the dentry in the mount 'A', 'B'
363 The outcome depends on the type of mount of 'A' and 'B'. The table
369 |source(A)->| shared | private | slave | unbindable |
381 1. 'A' is a shared mount and 'B' is a shared mount. A new mount 'C'
382 which is clone of 'A', is created. Its root dentry is 'a' . 'C' is
385 propagates to. A new propagation tree containing 'C1',..,'Cn' is
388 of 'A'.
390 2. 'A' is a private mount and 'B' is a shared mount. A new mount 'C'
391 which is clone of 'A', is created. Its root dentry is 'a'. 'C' is
394 propagates to. A new propagation tree is set containing all new mounts
398 3. 'A' is a slave mount of mount 'Z' and 'B' is a shared mount. A new
399 mount 'C' which is clone of 'A', is created. Its root dentry is 'a' .
402 'B' propagates to. A new propagation tree containing the new mounts
408 4. 'A' is a unbindable mount and 'B' is a shared mount. This is a
411 5. 'A' is a private mount and 'B' is a non-shared(private or slave or
412 unbindable) mount. A new mount 'C' which is clone of 'A', is created.
413 Its root dentry is 'a'. 'C' is mounted on mount 'B' at dentry 'b'.
415 6. 'A' is a shared mount and 'B' is a non-shared mount. A new mount 'C'
416 which is a clone of 'A' is created. Its root dentry is 'a'. 'C' is
417 mounted on mount 'B' at dentry 'b'. 'C' is made a member of the
418 peer-group of 'A'.
420 7. 'A' is a slave mount of mount 'Z' and 'B' is a non-shared mount. A
421 new mount 'C' which is a clone of 'A' is created. Its root dentry is
422 'a'. 'C' is mounted on mount 'B' at dentry 'b'. Also 'C' is set as a
423 slave mount of 'Z'. In other words 'A' and 'C' are both slave mounts of
424 'Z'. All mount/unmount events on 'Z' propagates to 'A' and 'C'. But
425 mount/unmount on 'A' do not propagate anywhere else. Similarly
428 8. 'A' is a unbindable mount and 'B' is a non-shared mount. This is a
429 invalid operation. A unbindable mount cannot be bind mounted.
445 A
452 of a type other than unbindable.
460 A'
472 mount --move A B/b
474 where 'A' is the source mount, 'B' is the destination mount and 'b' is
477 The outcome depends on the type of the mount of 'A' and 'B'. The table
478 below is a quick reference::
483 | source(A)->| shared | private | slave | unbindable |
493 .. Note:: moving a mount residing under a shared mount is invalid.
497 1. 'A' is a shared mount and 'B' is a shared mount. The mount 'A' is
500 propagation from mount 'B'. A new propagation tree is created in the
504 of 'A'.
506 2. 'A' is a private mount and 'B' is a shared mount. The mount 'A' is
509 propagation from mount 'B'. The mount 'A' becomes a shared mount and a
514 3. 'A' is a slave mount of mount 'Z' and 'B' is a shared mount. The
515 mount 'A' is mounted on mount 'B' at dentry 'b'. Also new mounts 'A1',
517 receive propagation from mount 'B'. A new propagation tree is created
521 'A'. Mount 'A' continues to be the slave mount of 'Z' but it also
524 4. 'A' is a unbindable mount and 'B' is a shared mount. The operation
527 propagation from 'B'. And since the mount 'A' is unbindable, cloning
530 5. 'A' is a private mount and 'B' is a non-shared(private or slave or
531 unbindable) mount. The mount 'A' is mounted on mount 'B' at dentry 'b'.
533 6. 'A' is a shared mount and 'B' is a non-shared mount. The mount 'A'
534 is mounted on mount 'B' at dentry 'b'. Mount 'A' continues to be a
537 7. 'A' is a slave mount of mount 'Z' and 'B' is a non-shared mount.
538 The mount 'A' is mounted on mount 'B' at dentry 'b'. Mount 'A'
539 continues to be a slave mount of mount 'Z'.
541 8. 'A' is a unbindable mount and 'B' is a non-shared mount. The mount
542 'A' is mounted on mount 'B' at dentry 'b'. Mount 'A' continues to be a
555 that the source mount is always a private mount.
562 umount A
564 where 'A' is a mount mounted on mount 'B' at dentry 'b'.
594 A cloned namespace contains all the mounts as that of the parent
597 Let's say 'A' and 'B' are the corresponding mounts in the parent and the
600 If 'A' is shared, then 'B' is also shared and 'A' and 'B' propagate to
603 If 'A' is a slave mount of 'Z', then 'B' is also the slave mount of
606 If 'A' is a private mount, then 'B' is a private mount too.
608 If 'A' is unbindable mount, then 'B' is a unbindable mount too.
614 A. What is the result of the following command sequence?
653 its root dentry is 1. Let's call this mount 'A'
654 And then we have a second mount at /tmp1 with root
656 Next we have a third mount at /mnt with root dentry
659 'B' is the slave of 'A' and 'C' is a slave of 'B'
660 A -> B -> C
666 The mount is attempted on 'A'
684 exportfs is a heavyweight way of accomplishing part of what
685 shared subtree can do. I cannot imagine a way to implement the
693 if one rbind mounts a tree within the same subtree 'n' times
774 One could use a series of umount at each step to prune
775 out the unneeded mounts. But there is a better solution.
847 A) Datastructure
869 the vfsmount. MNT_SHARE indicates that the vfsmount is a shared
873 All the shared vfsmounts in a peer group form a cyclic list through
876 All vfsmounts with the same ->mnt_master form on a cyclic list anchored
880 of master peer group. To find all immediate slaves of a peer group
882 Conceptually it's just a single set - distribution among the
886 All vfsmounts in a peer group have the same ->mnt_master. If it is
887 non-NULL, they form a contiguous (ordered) segment of slave list.
889 A example propagation tree looks as shown in the figure below.
892 Though it looks like a forest, if we consider all the shared
893 mounts as a conceptual entity called 'pnode', it becomes a tree.
898 A <--> B <--> C <---> D
906 In the above figure A,B,C and D all are shared and propagate to each
907 other. 'A' has got 3 slave mounts 'E' 'F' and 'G' 'C' has got 2 slave
912 A's ->mnt_share links with the ->mnt_share of 'B' 'C' and 'D'
914 A's ->mnt_slave_list links with ->mnt_slave of 'E', 'K', 'F' and 'G'
918 'E', 'K', 'F', 'G' have their ->mnt_master point to struct vfsmount of 'A'
942 The former modifies a vfsmount that has not been visible in any shared
958 a) Create the necessary number of mount trees to
963 c) Link all the new mounts to form a propagation tree that