@@ -67,49 +67,47 @@ int get_dominating_id(struct mount *mnt, const struct path *root)
67
67
68
68
static int do_make_slave (struct mount * mnt )
69
69
{
70
- struct mount * peer_mnt = mnt , * master = mnt -> mnt_master ;
71
- struct mount * slave_mnt ;
70
+ struct mount * master , * slave_mnt ;
72
71
73
- /*
74
- * slave 'mnt' to a peer mount that has the
75
- * same root dentry. If none is available then
76
- * slave it to anything that is available.
77
- */
78
- while ((peer_mnt = next_peer (peer_mnt )) != mnt &&
79
- peer_mnt -> mnt .mnt_root != mnt -> mnt .mnt_root ) ;
80
-
81
- if (peer_mnt == mnt ) {
82
- peer_mnt = next_peer (mnt );
83
- if (peer_mnt == mnt )
84
- peer_mnt = NULL ;
85
- }
86
- if (mnt -> mnt_group_id && IS_MNT_SHARED (mnt ) &&
87
- list_empty (& mnt -> mnt_share ))
88
- mnt_release_group_id (mnt );
89
-
90
- list_del_init (& mnt -> mnt_share );
91
- mnt -> mnt_group_id = 0 ;
92
-
93
- if (peer_mnt )
94
- master = peer_mnt ;
95
-
96
- if (master ) {
97
- list_for_each_entry (slave_mnt , & mnt -> mnt_slave_list , mnt_slave )
98
- slave_mnt -> mnt_master = master ;
99
- list_move (& mnt -> mnt_slave , & master -> mnt_slave_list );
100
- list_splice (& mnt -> mnt_slave_list , master -> mnt_slave_list .prev );
101
- INIT_LIST_HEAD (& mnt -> mnt_slave_list );
72
+ if (list_empty (& mnt -> mnt_share )) {
73
+ if (IS_MNT_SHARED (mnt )) {
74
+ mnt_release_group_id (mnt );
75
+ CLEAR_MNT_SHARED (mnt );
76
+ }
77
+ master = mnt -> mnt_master ;
78
+ if (!master ) {
79
+ struct list_head * p = & mnt -> mnt_slave_list ;
80
+ while (!list_empty (p )) {
81
+ slave_mnt = list_first_entry (p ,
82
+ struct mount , mnt_slave );
83
+ list_del_init (& slave_mnt -> mnt_slave );
84
+ slave_mnt -> mnt_master = NULL ;
85
+ }
86
+ return 0 ;
87
+ }
102
88
} else {
103
- struct list_head * p = & mnt -> mnt_slave_list ;
104
- while (!list_empty (p )) {
105
- slave_mnt = list_first_entry (p ,
106
- struct mount , mnt_slave );
107
- list_del_init (& slave_mnt -> mnt_slave );
108
- slave_mnt -> mnt_master = NULL ;
89
+ struct mount * m ;
90
+ /*
91
+ * slave 'mnt' to a peer mount that has the
92
+ * same root dentry. If none is available then
93
+ * slave it to anything that is available.
94
+ */
95
+ for (m = master = next_peer (mnt ); m != mnt ; m = next_peer (m )) {
96
+ if (m -> mnt .mnt_root == mnt -> mnt .mnt_root ) {
97
+ master = m ;
98
+ break ;
99
+ }
109
100
}
101
+ list_del_init (& mnt -> mnt_share );
102
+ mnt -> mnt_group_id = 0 ;
103
+ CLEAR_MNT_SHARED (mnt );
110
104
}
105
+ list_for_each_entry (slave_mnt , & mnt -> mnt_slave_list , mnt_slave )
106
+ slave_mnt -> mnt_master = master ;
107
+ list_move (& mnt -> mnt_slave , & master -> mnt_slave_list );
108
+ list_splice (& mnt -> mnt_slave_list , master -> mnt_slave_list .prev );
109
+ INIT_LIST_HEAD (& mnt -> mnt_slave_list );
111
110
mnt -> mnt_master = master ;
112
- CLEAR_MNT_SHARED (mnt );
113
111
return 0 ;
114
112
}
115
113
0 commit comments