aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2011-01-16 16:32:11 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2011-01-16 17:59:45 -0500
commit7e3d0eb0b028ed9e9384e6afcae2f22993bbdf25 (patch)
tree37bbffdfc6d380d04c294fa43d75697694f44d4d
parentf8b18087fd3277e424a24e13ce0edf30abe97ce0 (diff)
VFS: Fix UP compile error in fs/namespace.c
mnt_longterm is there only on SMP Reported-and-tested-by: Joachim Eastwood <manabian@gmail.com> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--fs/namespace.c31
1 files changed, 24 insertions, 7 deletions
diff --git a/fs/namespace.c b/fs/namespace.c
index 48809e21f270..9f544f35ed34 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -611,6 +611,21 @@ static void attach_mnt(struct vfsmount *mnt, struct path *path)
611 list_add_tail(&mnt->mnt_child, &path->mnt->mnt_mounts); 611 list_add_tail(&mnt->mnt_child, &path->mnt->mnt_mounts);
612} 612}
613 613
614static inline void __mnt_make_longterm(struct vfsmount *mnt)
615{
616#ifdef CONFIG_SMP
617 atomic_inc(&mnt->mnt_longterm);
618#endif
619}
620
621/* needs vfsmount lock for write */
622static inline void __mnt_make_shortterm(struct vfsmount *mnt)
623{
624#ifdef CONFIG_SMP
625 atomic_dec(&mnt->mnt_longterm);
626#endif
627}
628
614/* 629/*
615 * vfsmount lock must be held for write 630 * vfsmount lock must be held for write
616 */ 631 */
@@ -626,7 +641,7 @@ static void commit_tree(struct vfsmount *mnt)
626 list_add_tail(&head, &mnt->mnt_list); 641 list_add_tail(&head, &mnt->mnt_list);
627 list_for_each_entry(m, &head, mnt_list) { 642 list_for_each_entry(m, &head, mnt_list) {
628 m->mnt_ns = n; 643 m->mnt_ns = n;
629 atomic_inc(&m->mnt_longterm); 644 __mnt_make_longterm(m);
630 } 645 }
631 646
632 list_splice(&head, n->list.prev); 647 list_splice(&head, n->list.prev);
@@ -1189,7 +1204,7 @@ void umount_tree(struct vfsmount *mnt, int propagate, struct list_head *kill)
1189 list_del_init(&p->mnt_list); 1204 list_del_init(&p->mnt_list);
1190 __touch_mnt_namespace(p->mnt_ns); 1205 __touch_mnt_namespace(p->mnt_ns);
1191 p->mnt_ns = NULL; 1206 p->mnt_ns = NULL;
1192 atomic_dec(&p->mnt_longterm); 1207 __mnt_make_shortterm(p);
1193 list_del_init(&p->mnt_child); 1208 list_del_init(&p->mnt_child);
1194 if (p->mnt_parent != p) { 1209 if (p->mnt_parent != p) {
1195 p->mnt_parent->mnt_ghosts++; 1210 p->mnt_parent->mnt_ghosts++;
@@ -2243,16 +2258,18 @@ static struct mnt_namespace *alloc_mnt_ns(void)
2243 2258
2244void mnt_make_longterm(struct vfsmount *mnt) 2259void mnt_make_longterm(struct vfsmount *mnt)
2245{ 2260{
2246 atomic_inc(&mnt->mnt_longterm); 2261 __mnt_make_longterm(mnt);
2247} 2262}
2248 2263
2249void mnt_make_shortterm(struct vfsmount *mnt) 2264void mnt_make_shortterm(struct vfsmount *mnt)
2250{ 2265{
2266#ifdef CONFIG_SMP
2251 if (atomic_add_unless(&mnt->mnt_longterm, -1, 1)) 2267 if (atomic_add_unless(&mnt->mnt_longterm, -1, 1))
2252 return; 2268 return;
2253 br_write_lock(vfsmount_lock); 2269 br_write_lock(vfsmount_lock);
2254 atomic_dec(&mnt->mnt_longterm); 2270 atomic_dec(&mnt->mnt_longterm);
2255 br_write_unlock(vfsmount_lock); 2271 br_write_unlock(vfsmount_lock);
2272#endif
2256} 2273}
2257 2274
2258/* 2275/*
@@ -2292,17 +2309,17 @@ static struct mnt_namespace *dup_mnt_ns(struct mnt_namespace *mnt_ns,
2292 q = new_ns->root; 2309 q = new_ns->root;
2293 while (p) { 2310 while (p) {
2294 q->mnt_ns = new_ns; 2311 q->mnt_ns = new_ns;
2295 atomic_inc(&q->mnt_longterm); 2312 __mnt_make_longterm(q);
2296 if (fs) { 2313 if (fs) {
2297 if (p == fs->root.mnt) { 2314 if (p == fs->root.mnt) {
2298 fs->root.mnt = mntget(q); 2315 fs->root.mnt = mntget(q);
2299 atomic_inc(&q->mnt_longterm); 2316 __mnt_make_longterm(q);
2300 mnt_make_shortterm(p); 2317 mnt_make_shortterm(p);
2301 rootmnt = p; 2318 rootmnt = p;
2302 } 2319 }
2303 if (p == fs->pwd.mnt) { 2320 if (p == fs->pwd.mnt) {
2304 fs->pwd.mnt = mntget(q); 2321 fs->pwd.mnt = mntget(q);
2305 atomic_inc(&q->mnt_longterm); 2322 __mnt_make_longterm(q);
2306 mnt_make_shortterm(p); 2323 mnt_make_shortterm(p);
2307 pwdmnt = p; 2324 pwdmnt = p;
2308 } 2325 }
@@ -2348,7 +2365,7 @@ struct mnt_namespace *create_mnt_ns(struct vfsmount *mnt)
2348 new_ns = alloc_mnt_ns(); 2365 new_ns = alloc_mnt_ns();
2349 if (!IS_ERR(new_ns)) { 2366 if (!IS_ERR(new_ns)) {
2350 mnt->mnt_ns = new_ns; 2367 mnt->mnt_ns = new_ns;
2351 atomic_inc(&mnt->mnt_longterm); 2368 __mnt_make_longterm(mnt);
2352 new_ns->root = mnt; 2369 new_ns->root = mnt;
2353 list_add(&new_ns->list, &new_ns->root->mnt_list); 2370 list_add(&new_ns->list, &new_ns->root->mnt_list);
2354 } 2371 }