Fix possible filp_cachep memory corruption
[linux-2.6-block.git] / fs / super.c
CommitLineData
1da177e4
LT
1/*
2 * linux/fs/super.c
3 *
4 * Copyright (C) 1991, 1992 Linus Torvalds
5 *
6 * super.c contains code to handle: - mount structures
7 * - super-block tables
8 * - filesystem drivers list
9 * - mount system call
10 * - umount system call
11 * - ustat system call
12 *
13 * GK 2/5/95 - Changed to support mounting the root fs via NFS
14 *
15 * Added kerneld support: Jacques Gelinas and Bjorn Ekwall
16 * Added change_root: Werner Almesberger & Hans Lermen, Feb '96
17 * Added options to /proc/mounts:
96de0e25 18 * Torbjörn Lindh (torbjorn.lindh@gopta.se), April 14, 1996.
1da177e4
LT
19 * Added devfs support: Richard Gooch <rgooch@atnf.csiro.au>, 13-JAN-1998
20 * Heavily rewritten for 'one fs - one tree' dcache architecture. AV, Mar 2000
21 */
22
1da177e4
LT
23#include <linux/module.h>
24#include <linux/slab.h>
1da177e4
LT
25#include <linux/acct.h>
26#include <linux/blkdev.h>
1da177e4
LT
27#include <linux/mount.h>
28#include <linux/security.h>
1da177e4
LT
29#include <linux/writeback.h> /* for the emergency remount stuff */
30#include <linux/idr.h>
353ab6e9 31#include <linux/mutex.h>
5477d0fa 32#include <linux/backing-dev.h>
ceb5bdc2 33#include <linux/rculist_bl.h>
6d59e7f5 34#include "internal.h"
1da177e4
LT
35
36
1da177e4
LT
37LIST_HEAD(super_blocks);
38DEFINE_SPINLOCK(sb_lock);
39
40/**
41 * alloc_super - create new superblock
fe2bbc48 42 * @type: filesystem type superblock should belong to
1da177e4
LT
43 *
44 * Allocates and initializes a new &struct super_block. alloc_super()
45 * returns a pointer new superblock or %NULL if allocation had failed.
46 */
cf516249 47static struct super_block *alloc_super(struct file_system_type *type)
1da177e4 48{
11b0b5ab 49 struct super_block *s = kzalloc(sizeof(struct super_block), GFP_USER);
b87221de 50 static const struct super_operations default_op;
1da177e4
LT
51
52 if (s) {
1da177e4
LT
53 if (security_sb_alloc(s)) {
54 kfree(s);
55 s = NULL;
56 goto out;
57 }
6416ccb7
NP
58#ifdef CONFIG_SMP
59 s->s_files = alloc_percpu(struct list_head);
60 if (!s->s_files) {
61 security_sb_free(s);
62 kfree(s);
63 s = NULL;
64 goto out;
65 } else {
66 int i;
67
68 for_each_possible_cpu(i)
69 INIT_LIST_HEAD(per_cpu_ptr(s->s_files, i));
70 }
71#else
1da177e4 72 INIT_LIST_HEAD(&s->s_files);
6416ccb7 73#endif
1da177e4 74 INIT_LIST_HEAD(&s->s_instances);
ceb5bdc2 75 INIT_HLIST_BL_HEAD(&s->s_anon);
1da177e4 76 INIT_LIST_HEAD(&s->s_inodes);
da3bbdd4 77 INIT_LIST_HEAD(&s->s_dentry_lru);
1da177e4 78 init_rwsem(&s->s_umount);
7892f2f4 79 mutex_init(&s->s_lock);
897c6ff9 80 lockdep_set_class(&s->s_umount, &type->s_umount_key);
cf516249
IM
81 /*
82 * The locking rules for s_lock are up to the
83 * filesystem. For example ext3fs has different
84 * lock ordering than usbfs:
85 */
86 lockdep_set_class(&s->s_lock, &type->s_lock_key);
ada723dc
PZ
87 /*
88 * sget() can have s_umount recursion.
89 *
90 * When it cannot find a suitable sb, it allocates a new
91 * one (this one), and tries again to find a suitable old
92 * one.
93 *
94 * In case that succeeds, it will acquire the s_umount
95 * lock of the old one. Since these are clearly distrinct
96 * locks, and this object isn't exposed yet, there's no
97 * risk of deadlocks.
98 *
99 * Annotate this by putting this lock in a different
100 * subclass.
101 */
102 down_write_nested(&s->s_umount, SINGLE_DEPTH_NESTING);
b20bd1a5 103 s->s_count = 1;
1da177e4 104 atomic_set(&s->s_active, 1);
a11f3a05 105 mutex_init(&s->s_vfs_rename_mutex);
51ee049e 106 lockdep_set_class(&s->s_vfs_rename_mutex, &type->s_vfs_rename_key);
d3be915f
IM
107 mutex_init(&s->s_dquot.dqio_mutex);
108 mutex_init(&s->s_dquot.dqonoff_mutex);
1da177e4
LT
109 init_rwsem(&s->s_dquot.dqptr_sem);
110 init_waitqueue_head(&s->s_wait_unfrozen);
111 s->s_maxbytes = MAX_NON_LFS;
1da177e4
LT
112 s->s_op = &default_op;
113 s->s_time_gran = 1000000000;
114 }
115out:
116 return s;
117}
118
119/**
120 * destroy_super - frees a superblock
121 * @s: superblock to free
122 *
123 * Frees a superblock.
124 */
125static inline void destroy_super(struct super_block *s)
126{
6416ccb7
NP
127#ifdef CONFIG_SMP
128 free_percpu(s->s_files);
129#endif
1da177e4 130 security_sb_free(s);
79c0b2df 131 kfree(s->s_subtype);
b3b304a2 132 kfree(s->s_options);
1da177e4
LT
133 kfree(s);
134}
135
136/* Superblock refcounting */
137
138/*
35cf7ba0 139 * Drop a superblock's refcount. The caller must hold sb_lock.
1da177e4 140 */
35cf7ba0 141void __put_super(struct super_block *sb)
1da177e4 142{
1da177e4 143 if (!--sb->s_count) {
551de6f3 144 list_del_init(&sb->s_list);
1da177e4 145 destroy_super(sb);
1da177e4 146 }
1da177e4
LT
147}
148
149/**
150 * put_super - drop a temporary reference to superblock
151 * @sb: superblock in question
152 *
153 * Drops a temporary reference, frees superblock if there's no
154 * references left.
155 */
03ba3782 156void put_super(struct super_block *sb)
1da177e4
LT
157{
158 spin_lock(&sb_lock);
159 __put_super(sb);
160 spin_unlock(&sb_lock);
161}
162
163
164/**
1712ac8f 165 * deactivate_locked_super - drop an active reference to superblock
1da177e4
LT
166 * @s: superblock to deactivate
167 *
1712ac8f
AV
168 * Drops an active reference to superblock, converting it into a temprory
169 * one if there is no other active references left. In that case we
1da177e4
LT
170 * tell fs driver to shut it down and drop the temporary reference we
171 * had just acquired.
1712ac8f
AV
172 *
173 * Caller holds exclusive lock on superblock; that lock is released.
1da177e4 174 */
1712ac8f 175void deactivate_locked_super(struct super_block *s)
1da177e4
LT
176{
177 struct file_system_type *fs = s->s_type;
b20bd1a5 178 if (atomic_dec_and_test(&s->s_active)) {
1da177e4
LT
179 fs->kill_sb(s);
180 put_filesystem(fs);
181 put_super(s);
1712ac8f
AV
182 } else {
183 up_write(&s->s_umount);
1da177e4
LT
184 }
185}
186
1712ac8f 187EXPORT_SYMBOL(deactivate_locked_super);
1da177e4 188
74dbbdd7 189/**
1712ac8f 190 * deactivate_super - drop an active reference to superblock
74dbbdd7
AV
191 * @s: superblock to deactivate
192 *
1712ac8f
AV
193 * Variant of deactivate_locked_super(), except that superblock is *not*
194 * locked by caller. If we are going to drop the final active reference,
195 * lock will be acquired prior to that.
74dbbdd7 196 */
1712ac8f 197void deactivate_super(struct super_block *s)
74dbbdd7 198{
1712ac8f
AV
199 if (!atomic_add_unless(&s->s_active, -1, 1)) {
200 down_write(&s->s_umount);
201 deactivate_locked_super(s);
74dbbdd7
AV
202 }
203}
204
1712ac8f 205EXPORT_SYMBOL(deactivate_super);
74dbbdd7 206
1da177e4
LT
207/**
208 * grab_super - acquire an active reference
209 * @s: reference we are trying to make active
210 *
211 * Tries to acquire an active reference. grab_super() is used when we
212 * had just found a superblock in super_blocks or fs_type->fs_supers
213 * and want to turn it into a full-blown active reference. grab_super()
214 * is called with sb_lock held and drops it. Returns 1 in case of
215 * success, 0 if we had failed (superblock contents was already dead or
216 * dying when grab_super() had been called).
217 */
9c4dbee7 218static int grab_super(struct super_block *s) __releases(sb_lock)
1da177e4 219{
b20bd1a5
AV
220 if (atomic_inc_not_zero(&s->s_active)) {
221 spin_unlock(&sb_lock);
b20bd1a5
AV
222 return 1;
223 }
224 /* it's going away */
1da177e4
LT
225 s->s_count++;
226 spin_unlock(&sb_lock);
1712ac8f 227 /* wait for it to die */
1da177e4 228 down_write(&s->s_umount);
1da177e4
LT
229 up_write(&s->s_umount);
230 put_super(s);
1da177e4
LT
231 return 0;
232}
233
914e2637
AV
234/*
235 * Superblock locking. We really ought to get rid of these two.
236 */
237void lock_super(struct super_block * sb)
238{
239 get_fs_excl();
240 mutex_lock(&sb->s_lock);
241}
242
243void unlock_super(struct super_block * sb)
244{
245 put_fs_excl();
246 mutex_unlock(&sb->s_lock);
247}
248
249EXPORT_SYMBOL(lock_super);
250EXPORT_SYMBOL(unlock_super);
251
1da177e4
LT
252/**
253 * generic_shutdown_super - common helper for ->kill_sb()
254 * @sb: superblock to kill
255 *
256 * generic_shutdown_super() does all fs-independent work on superblock
257 * shutdown. Typical ->kill_sb() should pick all fs-specific objects
258 * that need destruction out of superblock, call generic_shutdown_super()
259 * and release aforementioned objects. Note: dentries and inodes _are_
260 * taken care of and do not need specific handling.
c636ebdb
DH
261 *
262 * Upon calling this function, the filesystem may no longer alter or
263 * rearrange the set of dentries belonging to this super_block, nor may it
264 * change the attachments of dentries to inodes.
1da177e4
LT
265 */
266void generic_shutdown_super(struct super_block *sb)
267{
ee9b6d61 268 const struct super_operations *sop = sb->s_op;
1da177e4 269
efaee192 270
c636ebdb
DH
271 if (sb->s_root) {
272 shrink_dcache_for_umount(sb);
60b0680f 273 sync_filesystem(sb);
a9e220f8 274 get_fs_excl();
1da177e4 275 sb->s_flags &= ~MS_ACTIVE;
efaee192 276
63997e98
AV
277 fsnotify_unmount_inodes(&sb->s_inodes);
278
279 evict_inodes(sb);
1da177e4 280
1da177e4
LT
281 if (sop->put_super)
282 sop->put_super(sb);
283
63997e98 284 if (!list_empty(&sb->s_inodes)) {
7b4fe29e
DJ
285 printk("VFS: Busy inodes after unmount of %s. "
286 "Self-destruct in 5 seconds. Have a nice day...\n",
287 sb->s_id);
1da177e4 288 }
a9e220f8 289 put_fs_excl();
1da177e4
LT
290 }
291 spin_lock(&sb_lock);
292 /* should be initialized for __put_super_and_need_restart() */
551de6f3 293 list_del_init(&sb->s_instances);
1da177e4
LT
294 spin_unlock(&sb_lock);
295 up_write(&sb->s_umount);
296}
297
298EXPORT_SYMBOL(generic_shutdown_super);
299
300/**
301 * sget - find or create a superblock
302 * @type: filesystem type superblock should belong to
303 * @test: comparison callback
304 * @set: setup callback
305 * @data: argument to each of them
306 */
307struct super_block *sget(struct file_system_type *type,
308 int (*test)(struct super_block *,void *),
309 int (*set)(struct super_block *,void *),
310 void *data)
311{
312 struct super_block *s = NULL;
d4730127 313 struct super_block *old;
1da177e4
LT
314 int err;
315
316retry:
317 spin_lock(&sb_lock);
d4730127
MK
318 if (test) {
319 list_for_each_entry(old, &type->fs_supers, s_instances) {
320 if (!test(old, data))
321 continue;
322 if (!grab_super(old))
323 goto retry;
a3cfbb53
LZ
324 if (s) {
325 up_write(&s->s_umount);
d4730127 326 destroy_super(s);
7a4dec53 327 s = NULL;
a3cfbb53 328 }
d3f21473 329 down_write(&old->s_umount);
7a4dec53
AV
330 if (unlikely(!(old->s_flags & MS_BORN))) {
331 deactivate_locked_super(old);
332 goto retry;
333 }
d4730127
MK
334 return old;
335 }
1da177e4
LT
336 }
337 if (!s) {
338 spin_unlock(&sb_lock);
cf516249 339 s = alloc_super(type);
1da177e4
LT
340 if (!s)
341 return ERR_PTR(-ENOMEM);
342 goto retry;
343 }
344
345 err = set(s, data);
346 if (err) {
347 spin_unlock(&sb_lock);
a3cfbb53 348 up_write(&s->s_umount);
1da177e4
LT
349 destroy_super(s);
350 return ERR_PTR(err);
351 }
352 s->s_type = type;
353 strlcpy(s->s_id, type->name, sizeof(s->s_id));
354 list_add_tail(&s->s_list, &super_blocks);
355 list_add(&s->s_instances, &type->fs_supers);
356 spin_unlock(&sb_lock);
357 get_filesystem(type);
358 return s;
359}
360
361EXPORT_SYMBOL(sget);
362
363void drop_super(struct super_block *sb)
364{
365 up_read(&sb->s_umount);
366 put_super(sb);
367}
368
369EXPORT_SYMBOL(drop_super);
370
e5004753
CH
371/**
372 * sync_supers - helper for periodic superblock writeback
373 *
374 * Call the write_super method if present on all dirty superblocks in
375 * the system. This is for the periodic writeback used by most older
376 * filesystems. For data integrity superblock writeback use
377 * sync_filesystems() instead.
378 *
1da177e4
LT
379 * Note: check the dirty flag before waiting, so we don't
380 * hold up the sync while mounting a device. (The newly
381 * mounted device won't need syncing.)
382 */
383void sync_supers(void)
384{
dca33252 385 struct super_block *sb, *p = NULL;
618f0636 386
1da177e4 387 spin_lock(&sb_lock);
dca33252 388 list_for_each_entry(sb, &super_blocks, s_list) {
551de6f3
AV
389 if (list_empty(&sb->s_instances))
390 continue;
e5004753 391 if (sb->s_op->write_super && sb->s_dirt) {
1da177e4
LT
392 sb->s_count++;
393 spin_unlock(&sb_lock);
e5004753 394
1da177e4 395 down_read(&sb->s_umount);
e5004753
CH
396 if (sb->s_root && sb->s_dirt)
397 sb->s_op->write_super(sb);
618f0636 398 up_read(&sb->s_umount);
e5004753 399
618f0636 400 spin_lock(&sb_lock);
dca33252
AV
401 if (p)
402 __put_super(p);
403 p = sb;
618f0636
KK
404 }
405 }
dca33252
AV
406 if (p)
407 __put_super(p);
1da177e4
LT
408 spin_unlock(&sb_lock);
409}
410
01a05b33
AV
411/**
412 * iterate_supers - call function for all active superblocks
413 * @f: function to call
414 * @arg: argument to pass to it
415 *
416 * Scans the superblock list and calls given function, passing it
417 * locked superblock and given argument.
418 */
419void iterate_supers(void (*f)(struct super_block *, void *), void *arg)
420{
dca33252 421 struct super_block *sb, *p = NULL;
01a05b33
AV
422
423 spin_lock(&sb_lock);
dca33252 424 list_for_each_entry(sb, &super_blocks, s_list) {
01a05b33
AV
425 if (list_empty(&sb->s_instances))
426 continue;
427 sb->s_count++;
428 spin_unlock(&sb_lock);
429
430 down_read(&sb->s_umount);
431 if (sb->s_root)
432 f(sb, arg);
433 up_read(&sb->s_umount);
434
435 spin_lock(&sb_lock);
dca33252
AV
436 if (p)
437 __put_super(p);
438 p = sb;
01a05b33 439 }
dca33252
AV
440 if (p)
441 __put_super(p);
01a05b33
AV
442 spin_unlock(&sb_lock);
443}
444
1da177e4
LT
445/**
446 * get_super - get the superblock of a device
447 * @bdev: device to get the superblock for
448 *
449 * Scans the superblock list and finds the superblock of the file system
450 * mounted on the device given. %NULL is returned if no match is found.
451 */
452
df40c01a 453struct super_block *get_super(struct block_device *bdev)
1da177e4 454{
618f0636
KK
455 struct super_block *sb;
456
1da177e4
LT
457 if (!bdev)
458 return NULL;
618f0636 459
1da177e4 460 spin_lock(&sb_lock);
618f0636
KK
461rescan:
462 list_for_each_entry(sb, &super_blocks, s_list) {
551de6f3
AV
463 if (list_empty(&sb->s_instances))
464 continue;
618f0636
KK
465 if (sb->s_bdev == bdev) {
466 sb->s_count++;
1da177e4 467 spin_unlock(&sb_lock);
618f0636 468 down_read(&sb->s_umount);
df40c01a 469 /* still alive? */
618f0636
KK
470 if (sb->s_root)
471 return sb;
472 up_read(&sb->s_umount);
df40c01a 473 /* nope, got unmounted */
618f0636 474 spin_lock(&sb_lock);
df40c01a
AV
475 __put_super(sb);
476 goto rescan;
1da177e4
LT
477 }
478 }
479 spin_unlock(&sb_lock);
480 return NULL;
481}
482
483EXPORT_SYMBOL(get_super);
4504230a
CH
484
485/**
486 * get_active_super - get an active reference to the superblock of a device
487 * @bdev: device to get the superblock for
488 *
489 * Scans the superblock list and finds the superblock of the file system
490 * mounted on the device given. Returns the superblock with an active
d3f21473 491 * reference or %NULL if none was found.
4504230a
CH
492 */
493struct super_block *get_active_super(struct block_device *bdev)
494{
495 struct super_block *sb;
496
497 if (!bdev)
498 return NULL;
499
1494583d 500restart:
4504230a
CH
501 spin_lock(&sb_lock);
502 list_for_each_entry(sb, &super_blocks, s_list) {
551de6f3
AV
503 if (list_empty(&sb->s_instances))
504 continue;
1494583d
AV
505 if (sb->s_bdev == bdev) {
506 if (grab_super(sb)) /* drops sb_lock */
507 return sb;
508 else
509 goto restart;
510 }
4504230a
CH
511 }
512 spin_unlock(&sb_lock);
513 return NULL;
514}
1da177e4 515
df40c01a 516struct super_block *user_get_super(dev_t dev)
1da177e4 517{
618f0636 518 struct super_block *sb;
1da177e4 519
1da177e4 520 spin_lock(&sb_lock);
618f0636
KK
521rescan:
522 list_for_each_entry(sb, &super_blocks, s_list) {
551de6f3
AV
523 if (list_empty(&sb->s_instances))
524 continue;
618f0636
KK
525 if (sb->s_dev == dev) {
526 sb->s_count++;
1da177e4 527 spin_unlock(&sb_lock);
618f0636 528 down_read(&sb->s_umount);
df40c01a 529 /* still alive? */
618f0636
KK
530 if (sb->s_root)
531 return sb;
532 up_read(&sb->s_umount);
df40c01a 533 /* nope, got unmounted */
618f0636 534 spin_lock(&sb_lock);
df40c01a
AV
535 __put_super(sb);
536 goto rescan;
1da177e4
LT
537 }
538 }
539 spin_unlock(&sb_lock);
540 return NULL;
541}
542
1da177e4
LT
543/**
544 * do_remount_sb - asks filesystem to change mount options.
545 * @sb: superblock in question
546 * @flags: numeric part of options
547 * @data: the rest of options
548 * @force: whether or not to force the change
549 *
550 * Alters the mount options of a mounted file system.
551 */
552int do_remount_sb(struct super_block *sb, int flags, void *data, int force)
553{
554 int retval;
c79d967d 555 int remount_ro;
4504230a
CH
556
557 if (sb->s_frozen != SB_UNFROZEN)
558 return -EBUSY;
559
9361401e 560#ifdef CONFIG_BLOCK
1da177e4
LT
561 if (!(flags & MS_RDONLY) && bdev_read_only(sb->s_bdev))
562 return -EACCES;
9361401e 563#endif
4504230a 564
1da177e4
LT
565 if (flags & MS_RDONLY)
566 acct_auto_close(sb);
567 shrink_dcache_sb(sb);
60b0680f 568 sync_filesystem(sb);
1da177e4 569
d208bbdd 570 remount_ro = (flags & MS_RDONLY) && !(sb->s_flags & MS_RDONLY);
d208bbdd 571
1da177e4
LT
572 /* If we are remounting RDONLY and current sb is read/write,
573 make sure there are no rw files opened */
d208bbdd 574 if (remount_ro) {
1da177e4
LT
575 if (force)
576 mark_files_ro(sb);
b0895513 577 else if (!fs_may_remount_ro(sb))
1da177e4
LT
578 return -EBUSY;
579 }
580
581 if (sb->s_op->remount_fs) {
1da177e4 582 retval = sb->s_op->remount_fs(sb, &flags, data);
b0895513 583 if (retval)
1da177e4
LT
584 return retval;
585 }
586 sb->s_flags = (sb->s_flags & ~MS_RMT_MASK) | (flags & MS_RMT_MASK);
c79d967d 587
d208bbdd
NP
588 /*
589 * Some filesystems modify their metadata via some other path than the
590 * bdev buffer cache (eg. use a private mapping, or directories in
591 * pagecache, etc). Also file data modifications go via their own
592 * mappings. So If we try to mount readonly then copy the filesystem
593 * from bdev, we could get stale data, so invalidate it to give a best
594 * effort at coherency.
595 */
596 if (remount_ro && sb->s_bdev)
597 invalidate_bdev(sb->s_bdev);
1da177e4
LT
598 return 0;
599}
600
a2a9537a 601static void do_emergency_remount(struct work_struct *work)
1da177e4 602{
dca33252 603 struct super_block *sb, *p = NULL;
1da177e4
LT
604
605 spin_lock(&sb_lock);
dca33252 606 list_for_each_entry(sb, &super_blocks, s_list) {
551de6f3
AV
607 if (list_empty(&sb->s_instances))
608 continue;
1da177e4
LT
609 sb->s_count++;
610 spin_unlock(&sb_lock);
443b94ba 611 down_write(&sb->s_umount);
1da177e4
LT
612 if (sb->s_root && sb->s_bdev && !(sb->s_flags & MS_RDONLY)) {
613 /*
1da177e4
LT
614 * What lock protects sb->s_flags??
615 */
1da177e4 616 do_remount_sb(sb, MS_RDONLY, NULL, 1);
1da177e4 617 }
443b94ba 618 up_write(&sb->s_umount);
1da177e4 619 spin_lock(&sb_lock);
dca33252
AV
620 if (p)
621 __put_super(p);
622 p = sb;
1da177e4 623 }
dca33252
AV
624 if (p)
625 __put_super(p);
1da177e4 626 spin_unlock(&sb_lock);
a2a9537a 627 kfree(work);
1da177e4
LT
628 printk("Emergency Remount complete\n");
629}
630
631void emergency_remount(void)
632{
a2a9537a
JA
633 struct work_struct *work;
634
635 work = kmalloc(sizeof(*work), GFP_ATOMIC);
636 if (work) {
637 INIT_WORK(work, do_emergency_remount);
638 schedule_work(work);
639 }
1da177e4
LT
640}
641
642/*
643 * Unnamed block devices are dummy devices used by virtual
644 * filesystems which don't use real block-devices. -- jrs
645 */
646
ad76cbc6 647static DEFINE_IDA(unnamed_dev_ida);
1da177e4 648static DEFINE_SPINLOCK(unnamed_dev_lock);/* protects the above */
c63e09ec 649static int unnamed_dev_start = 0; /* don't bother trying below it */
1da177e4
LT
650
651int set_anon_super(struct super_block *s, void *data)
652{
653 int dev;
654 int error;
655
656 retry:
ad76cbc6 657 if (ida_pre_get(&unnamed_dev_ida, GFP_ATOMIC) == 0)
1da177e4
LT
658 return -ENOMEM;
659 spin_lock(&unnamed_dev_lock);
c63e09ec 660 error = ida_get_new_above(&unnamed_dev_ida, unnamed_dev_start, &dev);
f21f6220
AV
661 if (!error)
662 unnamed_dev_start = dev + 1;
1da177e4
LT
663 spin_unlock(&unnamed_dev_lock);
664 if (error == -EAGAIN)
665 /* We raced and lost with another CPU. */
666 goto retry;
667 else if (error)
668 return -EAGAIN;
669
670 if ((dev & MAX_ID_MASK) == (1 << MINORBITS)) {
671 spin_lock(&unnamed_dev_lock);
ad76cbc6 672 ida_remove(&unnamed_dev_ida, dev);
f21f6220
AV
673 if (unnamed_dev_start > dev)
674 unnamed_dev_start = dev;
1da177e4
LT
675 spin_unlock(&unnamed_dev_lock);
676 return -EMFILE;
677 }
678 s->s_dev = MKDEV(0, dev & MINORMASK);
5129a469 679 s->s_bdi = &noop_backing_dev_info;
1da177e4
LT
680 return 0;
681}
682
683EXPORT_SYMBOL(set_anon_super);
684
685void kill_anon_super(struct super_block *sb)
686{
687 int slot = MINOR(sb->s_dev);
688
689 generic_shutdown_super(sb);
690 spin_lock(&unnamed_dev_lock);
ad76cbc6 691 ida_remove(&unnamed_dev_ida, slot);
c63e09ec
AV
692 if (slot < unnamed_dev_start)
693 unnamed_dev_start = slot;
1da177e4
LT
694 spin_unlock(&unnamed_dev_lock);
695}
696
697EXPORT_SYMBOL(kill_anon_super);
698
1da177e4
LT
699void kill_litter_super(struct super_block *sb)
700{
701 if (sb->s_root)
702 d_genocide(sb->s_root);
703 kill_anon_super(sb);
704}
705
706EXPORT_SYMBOL(kill_litter_super);
707
909e6d94
SH
708static int ns_test_super(struct super_block *sb, void *data)
709{
710 return sb->s_fs_info == data;
711}
712
713static int ns_set_super(struct super_block *sb, void *data)
714{
715 sb->s_fs_info = data;
716 return set_anon_super(sb, NULL);
717}
718
ceefda69
AV
719struct dentry *mount_ns(struct file_system_type *fs_type, int flags,
720 void *data, int (*fill_super)(struct super_block *, void *, int))
909e6d94
SH
721{
722 struct super_block *sb;
723
724 sb = sget(fs_type, ns_test_super, ns_set_super, data);
725 if (IS_ERR(sb))
ceefda69 726 return ERR_CAST(sb);
909e6d94
SH
727
728 if (!sb->s_root) {
729 int err;
730 sb->s_flags = flags;
731 err = fill_super(sb, data, flags & MS_SILENT ? 1 : 0);
732 if (err) {
74dbbdd7 733 deactivate_locked_super(sb);
ceefda69 734 return ERR_PTR(err);
909e6d94
SH
735 }
736
737 sb->s_flags |= MS_ACTIVE;
738 }
739
ceefda69 740 return dget(sb->s_root);
909e6d94
SH
741}
742
ceefda69 743EXPORT_SYMBOL(mount_ns);
909e6d94 744
9361401e 745#ifdef CONFIG_BLOCK
1da177e4
LT
746static int set_bdev_super(struct super_block *s, void *data)
747{
748 s->s_bdev = data;
749 s->s_dev = s->s_bdev->bd_dev;
32a88aa1
JA
750
751 /*
752 * We set the bdi here to the queue backing, file systems can
753 * overwrite this in ->fill_super()
754 */
755 s->s_bdi = &bdev_get_queue(s->s_bdev)->backing_dev_info;
1da177e4
LT
756 return 0;
757}
758
759static int test_bdev_super(struct super_block *s, void *data)
760{
761 return (void *)s->s_bdev == data;
762}
763
152a0836 764struct dentry *mount_bdev(struct file_system_type *fs_type,
1da177e4 765 int flags, const char *dev_name, void *data,
152a0836 766 int (*fill_super)(struct super_block *, void *, int))
1da177e4
LT
767{
768 struct block_device *bdev;
769 struct super_block *s;
d4d77629 770 fmode_t mode = FMODE_READ | FMODE_EXCL;
1da177e4
LT
771 int error = 0;
772
30c40d2c
AV
773 if (!(flags & MS_RDONLY))
774 mode |= FMODE_WRITE;
775
d4d77629 776 bdev = blkdev_get_by_path(dev_name, mode, fs_type);
1da177e4 777 if (IS_ERR(bdev))
152a0836 778 return ERR_CAST(bdev);
1da177e4
LT
779
780 /*
781 * once the super is inserted into the list by sget, s_umount
782 * will protect the lockfs code from trying to start a snapshot
783 * while we are mounting
784 */
4fadd7bb
CH
785 mutex_lock(&bdev->bd_fsfreeze_mutex);
786 if (bdev->bd_fsfreeze_count > 0) {
787 mutex_unlock(&bdev->bd_fsfreeze_mutex);
788 error = -EBUSY;
789 goto error_bdev;
790 }
1da177e4 791 s = sget(fs_type, test_bdev_super, set_bdev_super, bdev);
4fadd7bb 792 mutex_unlock(&bdev->bd_fsfreeze_mutex);
1da177e4 793 if (IS_ERR(s))
454e2398 794 goto error_s;
1da177e4
LT
795
796 if (s->s_root) {
797 if ((flags ^ s->s_flags) & MS_RDONLY) {
74dbbdd7 798 deactivate_locked_super(s);
454e2398
DH
799 error = -EBUSY;
800 goto error_bdev;
1da177e4 801 }
454e2398 802
4f331f01
TH
803 /*
804 * s_umount nests inside bd_mutex during
e525fd89
TH
805 * __invalidate_device(). blkdev_put() acquires
806 * bd_mutex and can't be called under s_umount. Drop
807 * s_umount temporarily. This is safe as we're
808 * holding an active reference.
4f331f01
TH
809 */
810 up_write(&s->s_umount);
d4d77629 811 blkdev_put(bdev, mode);
4f331f01 812 down_write(&s->s_umount);
1da177e4
LT
813 } else {
814 char b[BDEVNAME_SIZE];
815
816 s->s_flags = flags;
30c40d2c 817 s->s_mode = mode;
1da177e4 818 strlcpy(s->s_id, bdevname(bdev, b), sizeof(s->s_id));
e78c9a00 819 sb_set_blocksize(s, block_size(bdev));
9b04c997 820 error = fill_super(s, data, flags & MS_SILENT ? 1 : 0);
1da177e4 821 if (error) {
74dbbdd7 822 deactivate_locked_super(s);
454e2398 823 goto error;
fa675765 824 }
454e2398
DH
825
826 s->s_flags |= MS_ACTIVE;
87d8fe1e 827 bdev->bd_super = s;
1da177e4
LT
828 }
829
152a0836 830 return dget(s->s_root);
1da177e4 831
454e2398
DH
832error_s:
833 error = PTR_ERR(s);
834error_bdev:
d4d77629 835 blkdev_put(bdev, mode);
454e2398 836error:
152a0836
AV
837 return ERR_PTR(error);
838}
839EXPORT_SYMBOL(mount_bdev);
840
841int get_sb_bdev(struct file_system_type *fs_type,
842 int flags, const char *dev_name, void *data,
843 int (*fill_super)(struct super_block *, void *, int),
844 struct vfsmount *mnt)
845{
846 struct dentry *root;
847
848 root = mount_bdev(fs_type, flags, dev_name, data, fill_super);
849 if (IS_ERR(root))
850 return PTR_ERR(root);
851 mnt->mnt_root = root;
852 mnt->mnt_sb = root->d_sb;
853 return 0;
1da177e4
LT
854}
855
856EXPORT_SYMBOL(get_sb_bdev);
857
858void kill_block_super(struct super_block *sb)
859{
860 struct block_device *bdev = sb->s_bdev;
30c40d2c 861 fmode_t mode = sb->s_mode;
1da177e4 862
ddbaaf30 863 bdev->bd_super = NULL;
1da177e4
LT
864 generic_shutdown_super(sb);
865 sync_blockdev(bdev);
d4d77629 866 WARN_ON_ONCE(!(mode & FMODE_EXCL));
e525fd89 867 blkdev_put(bdev, mode | FMODE_EXCL);
1da177e4
LT
868}
869
870EXPORT_SYMBOL(kill_block_super);
9361401e 871#endif
1da177e4 872
3c26ff6e 873struct dentry *mount_nodev(struct file_system_type *fs_type,
1da177e4 874 int flags, void *data,
3c26ff6e 875 int (*fill_super)(struct super_block *, void *, int))
1da177e4
LT
876{
877 int error;
878 struct super_block *s = sget(fs_type, NULL, set_anon_super, NULL);
879
880 if (IS_ERR(s))
3c26ff6e 881 return ERR_CAST(s);
1da177e4
LT
882
883 s->s_flags = flags;
884
9b04c997 885 error = fill_super(s, data, flags & MS_SILENT ? 1 : 0);
1da177e4 886 if (error) {
74dbbdd7 887 deactivate_locked_super(s);
3c26ff6e 888 return ERR_PTR(error);
1da177e4
LT
889 }
890 s->s_flags |= MS_ACTIVE;
3c26ff6e 891 return dget(s->s_root);
1da177e4 892}
3c26ff6e
AV
893EXPORT_SYMBOL(mount_nodev);
894
895int get_sb_nodev(struct file_system_type *fs_type,
896 int flags, void *data,
897 int (*fill_super)(struct super_block *, void *, int),
898 struct vfsmount *mnt)
899{
900 struct dentry *root;
1da177e4 901
3c26ff6e
AV
902 root = mount_nodev(fs_type, flags, data, fill_super);
903 if (IS_ERR(root))
904 return PTR_ERR(root);
905 mnt->mnt_root = root;
906 mnt->mnt_sb = root->d_sb;
907 return 0;
908}
1da177e4
LT
909EXPORT_SYMBOL(get_sb_nodev);
910
911static int compare_single(struct super_block *s, void *p)
912{
913 return 1;
914}
915
fc14f2fe 916struct dentry *mount_single(struct file_system_type *fs_type,
1da177e4 917 int flags, void *data,
fc14f2fe 918 int (*fill_super)(struct super_block *, void *, int))
1da177e4
LT
919{
920 struct super_block *s;
921 int error;
922
923 s = sget(fs_type, compare_single, set_anon_super, NULL);
924 if (IS_ERR(s))
fc14f2fe 925 return ERR_CAST(s);
1da177e4
LT
926 if (!s->s_root) {
927 s->s_flags = flags;
9b04c997 928 error = fill_super(s, data, flags & MS_SILENT ? 1 : 0);
1da177e4 929 if (error) {
74dbbdd7 930 deactivate_locked_super(s);
fc14f2fe 931 return ERR_PTR(error);
1da177e4
LT
932 }
933 s->s_flags |= MS_ACTIVE;
9329d1be
KS
934 } else {
935 do_remount_sb(s, flags, data, 0);
1da177e4 936 }
fc14f2fe
AV
937 return dget(s->s_root);
938}
939EXPORT_SYMBOL(mount_single);
940
941int get_sb_single(struct file_system_type *fs_type,
942 int flags, void *data,
943 int (*fill_super)(struct super_block *, void *, int),
944 struct vfsmount *mnt)
945{
946 struct dentry *root;
947 root = mount_single(fs_type, flags, data, fill_super);
948 if (IS_ERR(root))
949 return PTR_ERR(root);
950 mnt->mnt_root = root;
951 mnt->mnt_sb = root->d_sb;
a3ec947c 952 return 0;
1da177e4
LT
953}
954
955EXPORT_SYMBOL(get_sb_single);
956
957struct vfsmount *
bb4a58bf 958vfs_kern_mount(struct file_system_type *type, int flags, const char *name, void *data)
1da177e4 959{
1da177e4 960 struct vfsmount *mnt;
c96e41e9 961 struct dentry *root;
1da177e4 962 char *secdata = NULL;
454e2398 963 int error;
1da177e4
LT
964
965 if (!type)
966 return ERR_PTR(-ENODEV);
1da177e4 967
454e2398 968 error = -ENOMEM;
1da177e4
LT
969 mnt = alloc_vfsmnt(name);
970 if (!mnt)
971 goto out;
972
8089352a
AV
973 if (flags & MS_KERNMOUNT)
974 mnt->mnt_flags = MNT_INTERNAL;
975
e0007529 976 if (data && !(type->fs_flags & FS_BINARY_MOUNTDATA)) {
1da177e4 977 secdata = alloc_secdata();
454e2398 978 if (!secdata)
1da177e4 979 goto out_mnt;
1da177e4 980
e0007529 981 error = security_sb_copy_data(data, secdata);
454e2398 982 if (error)
1da177e4 983 goto out_free_secdata;
1da177e4
LT
984 }
985
c96e41e9
AV
986 if (type->mount) {
987 root = type->mount(type, flags, name, data);
988 if (IS_ERR(root)) {
989 error = PTR_ERR(root);
990 goto out_free_secdata;
991 }
992 mnt->mnt_root = root;
993 mnt->mnt_sb = root->d_sb;
994 } else {
995 error = type->get_sb(type, flags, name, data, mnt);
996 if (error < 0)
997 goto out_free_secdata;
998 }
b4c07bce 999 BUG_ON(!mnt->mnt_sb);
5129a469 1000 WARN_ON(!mnt->mnt_sb->s_bdi);
7a4dec53 1001 mnt->mnt_sb->s_flags |= MS_BORN;
454e2398 1002
5129a469
JE
1003 error = security_sb_kern_mount(mnt->mnt_sb, flags, secdata);
1004 if (error)
1005 goto out_sb;
454e2398 1006
42cb56ae
JL
1007 /*
1008 * filesystems should never set s_maxbytes larger than MAX_LFS_FILESIZE
1009 * but s_maxbytes was an unsigned long long for many releases. Throw
1010 * this warning for a little while to try and catch filesystems that
1011 * violate this rule. This warning should be either removed or
1012 * converted to a BUG() in 2.6.34.
1013 */
1014 WARN((mnt->mnt_sb->s_maxbytes < 0), "%s set sb->s_maxbytes to "
1015 "negative value (%lld)\n", type->name, mnt->mnt_sb->s_maxbytes);
1016
454e2398 1017 mnt->mnt_mountpoint = mnt->mnt_root;
1da177e4 1018 mnt->mnt_parent = mnt;
454e2398 1019 up_write(&mnt->mnt_sb->s_umount);
8680e22f 1020 free_secdata(secdata);
1da177e4
LT
1021 return mnt;
1022out_sb:
454e2398 1023 dput(mnt->mnt_root);
74dbbdd7 1024 deactivate_locked_super(mnt->mnt_sb);
1da177e4
LT
1025out_free_secdata:
1026 free_secdata(secdata);
1027out_mnt:
1028 free_vfsmnt(mnt);
1029out:
454e2398 1030 return ERR_PTR(error);
1da177e4
LT
1031}
1032
bb4a58bf
TM
1033EXPORT_SYMBOL_GPL(vfs_kern_mount);
1034
18e9e510 1035/**
7000d3c4
RD
1036 * freeze_super - lock the filesystem and force it into a consistent state
1037 * @sb: the super to lock
18e9e510
JB
1038 *
1039 * Syncs the super to make sure the filesystem is consistent and calls the fs's
1040 * freeze_fs. Subsequent calls to this without first thawing the fs will return
1041 * -EBUSY.
1042 */
1043int freeze_super(struct super_block *sb)
1044{
1045 int ret;
1046
1047 atomic_inc(&sb->s_active);
1048 down_write(&sb->s_umount);
1049 if (sb->s_frozen) {
1050 deactivate_locked_super(sb);
1051 return -EBUSY;
1052 }
1053
1054 if (sb->s_flags & MS_RDONLY) {
1055 sb->s_frozen = SB_FREEZE_TRANS;
1056 smp_wmb();
1057 up_write(&sb->s_umount);
1058 return 0;
1059 }
1060
1061 sb->s_frozen = SB_FREEZE_WRITE;
1062 smp_wmb();
1063
1064 sync_filesystem(sb);
1065
1066 sb->s_frozen = SB_FREEZE_TRANS;
1067 smp_wmb();
1068
1069 sync_blockdev(sb->s_bdev);
1070 if (sb->s_op->freeze_fs) {
1071 ret = sb->s_op->freeze_fs(sb);
1072 if (ret) {
1073 printk(KERN_ERR
1074 "VFS:Filesystem freeze failed\n");
1075 sb->s_frozen = SB_UNFROZEN;
1076 deactivate_locked_super(sb);
1077 return ret;
1078 }
1079 }
1080 up_write(&sb->s_umount);
1081 return 0;
1082}
1083EXPORT_SYMBOL(freeze_super);
1084
1085/**
1086 * thaw_super -- unlock filesystem
1087 * @sb: the super to thaw
1088 *
1089 * Unlocks the filesystem and marks it writeable again after freeze_super().
1090 */
1091int thaw_super(struct super_block *sb)
1092{
1093 int error;
1094
1095 down_write(&sb->s_umount);
1096 if (sb->s_frozen == SB_UNFROZEN) {
1097 up_write(&sb->s_umount);
1098 return -EINVAL;
1099 }
1100
1101 if (sb->s_flags & MS_RDONLY)
1102 goto out;
1103
1104 if (sb->s_op->unfreeze_fs) {
1105 error = sb->s_op->unfreeze_fs(sb);
1106 if (error) {
1107 printk(KERN_ERR
1108 "VFS:Filesystem thaw failed\n");
1109 sb->s_frozen = SB_FREEZE_TRANS;
1110 up_write(&sb->s_umount);
1111 return error;
1112 }
1113 }
1114
1115out:
1116 sb->s_frozen = SB_UNFROZEN;
1117 smp_wmb();
1118 wake_up(&sb->s_wait_unfrozen);
1119 deactivate_locked_super(sb);
1120
1121 return 0;
1122}
1123EXPORT_SYMBOL(thaw_super);
1124
79c0b2df
MS
1125static struct vfsmount *fs_set_subtype(struct vfsmount *mnt, const char *fstype)
1126{
1127 int err;
1128 const char *subtype = strchr(fstype, '.');
1129 if (subtype) {
1130 subtype++;
1131 err = -EINVAL;
1132 if (!subtype[0])
1133 goto err;
1134 } else
1135 subtype = "";
1136
1137 mnt->mnt_sb->s_subtype = kstrdup(subtype, GFP_KERNEL);
1138 err = -ENOMEM;
1139 if (!mnt->mnt_sb->s_subtype)
1140 goto err;
1141 return mnt;
1142
1143 err:
f03c6599 1144 mntput(mnt);
79c0b2df
MS
1145 return ERR_PTR(err);
1146}
1147
bb4a58bf
TM
1148struct vfsmount *
1149do_kern_mount(const char *fstype, int flags, const char *name, void *data)
1150{
1151 struct file_system_type *type = get_fs_type(fstype);
1152 struct vfsmount *mnt;
1153 if (!type)
1154 return ERR_PTR(-ENODEV);
1155 mnt = vfs_kern_mount(type, flags, name, data);
79c0b2df
MS
1156 if (!IS_ERR(mnt) && (type->fs_flags & FS_HAS_SUBTYPE) &&
1157 !mnt->mnt_sb->s_subtype)
1158 mnt = fs_set_subtype(mnt, fstype);
bb4a58bf
TM
1159 put_filesystem(type);
1160 return mnt;
1161}
8a4e98d9 1162EXPORT_SYMBOL_GPL(do_kern_mount);
bb4a58bf 1163
8bf9725c 1164struct vfsmount *kern_mount_data(struct file_system_type *type, void *data)
1da177e4 1165{
8bf9725c 1166 return vfs_kern_mount(type, MS_KERNMOUNT, type->name, data);
1da177e4
LT
1167}
1168
8bf9725c 1169EXPORT_SYMBOL_GPL(kern_mount_data);