|
@@ -1653,16 +1653,14 @@ static int attach_recursive_mnt(struct mount *source_mnt,
|
|
|
err = invent_group_ids(source_mnt, true);
|
|
|
if (err)
|
|
|
goto out;
|
|
|
- }
|
|
|
- err = propagate_mnt(dest_mnt, dest_mp, source_mnt, &tree_list);
|
|
|
- if (err)
|
|
|
- goto out_cleanup_ids;
|
|
|
-
|
|
|
- lock_mount_hash();
|
|
|
-
|
|
|
- if (IS_MNT_SHARED(dest_mnt)) {
|
|
|
+ err = propagate_mnt(dest_mnt, dest_mp, source_mnt, &tree_list);
|
|
|
+ if (err)
|
|
|
+ goto out_cleanup_ids;
|
|
|
+ lock_mount_hash();
|
|
|
for (p = source_mnt; p; p = next_mnt(p, source_mnt))
|
|
|
set_mnt_shared(p);
|
|
|
+ } else {
|
|
|
+ lock_mount_hash();
|
|
|
}
|
|
|
if (parent_path) {
|
|
|
detach_mnt(source_mnt, parent_path);
|
|
@@ -1685,8 +1683,7 @@ static int attach_recursive_mnt(struct mount *source_mnt,
|
|
|
return 0;
|
|
|
|
|
|
out_cleanup_ids:
|
|
|
- if (IS_MNT_SHARED(dest_mnt))
|
|
|
- cleanup_group_ids(source_mnt, NULL);
|
|
|
+ cleanup_group_ids(source_mnt, NULL);
|
|
|
out:
|
|
|
return err;
|
|
|
}
|