Chapter 8: The Virtual Filesystem
If the destination mount point is a shared mount, then the new mount and all its submounts need to
become shared as well:fs/namespace.c
if (IS_MNT_SHARED(dest_mnt)) {
for (p = source_mnt; p; p = next_mnt(p, source_mnt))
set_mnt_shared(p);
}
...Finally, the kernel needs to finish the mount process by callingmnt_set_mountpointandcommit_treeto
introduce the changes into the data structures as discussed for regular mounts. Note, however, that
commit_treeneeds to be called for every mount that has been propagated to shared peers or slave
mounts (mnt_set_mountpointfor these mounts has already been called inpropagate_mnt):fs/namespace.c
mnt_set_mountpoint(dest_mnt, dest_dentry, source_mnt);
commit_tree(source_mnt);list_for_each_entry_safe(child, p, &tree_list, mnt_hash) {
list_del_init(&child->mnt_hash);
commit_tree(child);
}return 0;
}TheumountSystem Call
Filesystems are unmounted by theumountsystem call, whose entry point issys_umountfrom
fs/namespace.c. Figure 8-8 shows the associated code flow diagram.return-EBUSYYesNosys_umount__user_walkdo_umountsb->s_op->umount_beginumount_treerelease_mountsMNT_DETACH set or
entry not used anymore?Figure 8-8: Code flow diagram forsys_umount.First,__user_walkfinds thevfsmntinstance and thedentryinstance of the mount point, which are
packed in anameidatastructure.^19(^19) __user_walkinvokes thepath_walkfunction after the pathname has been copied into kernel space.