aboutsummaryrefslogtreecommitdiffstats
path: root/fs/super.c
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2011-07-07 15:44:25 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2011-07-20 01:44:20 -0400
commit0ee5dc676a5f8fadede608c7281dfedb1ae714ea (patch)
tree887896f0e1b51f39e9be21a1e8d960ec50a817a7 /fs/super.c
parentfb408e6ccc32404a05783911b6f3fed56bd17b06 (diff)
btrfs: kill magical embedded struct superblock
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/super.c')
-rw-r--r--fs/super.c32
1 files changed, 23 insertions, 9 deletions
diff --git a/fs/super.c b/fs/super.c
index 444da9579068..263edeb9f0e9 100644
--- a/fs/super.c
+++ b/fs/super.c
@@ -693,7 +693,7 @@ static DEFINE_IDA(unnamed_dev_ida);
693static DEFINE_SPINLOCK(unnamed_dev_lock);/* protects the above */ 693static DEFINE_SPINLOCK(unnamed_dev_lock);/* protects the above */
694static int unnamed_dev_start = 0; /* don't bother trying below it */ 694static int unnamed_dev_start = 0; /* don't bother trying below it */
695 695
696int set_anon_super(struct super_block *s, void *data) 696int get_anon_bdev(dev_t *p)
697{ 697{
698 int dev; 698 int dev;
699 int error; 699 int error;
@@ -720,24 +720,38 @@ int set_anon_super(struct super_block *s, void *data)
720 spin_unlock(&unnamed_dev_lock); 720 spin_unlock(&unnamed_dev_lock);
721 return -EMFILE; 721 return -EMFILE;
722 } 722 }
723 s->s_dev = MKDEV(0, dev & MINORMASK); 723 *p = MKDEV(0, dev & MINORMASK);
724 s->s_bdi = &noop_backing_dev_info;
725 return 0; 724 return 0;
726} 725}
726EXPORT_SYMBOL(get_anon_bdev);
727 727
728EXPORT_SYMBOL(set_anon_super); 728void free_anon_bdev(dev_t dev)
729
730void kill_anon_super(struct super_block *sb)
731{ 729{
732 int slot = MINOR(sb->s_dev); 730 int slot = MINOR(dev);
733
734 generic_shutdown_super(sb);
735 spin_lock(&unnamed_dev_lock); 731 spin_lock(&unnamed_dev_lock);
736 ida_remove(&unnamed_dev_ida, slot); 732 ida_remove(&unnamed_dev_ida, slot);
737 if (slot < unnamed_dev_start) 733 if (slot < unnamed_dev_start)
738 unnamed_dev_start = slot; 734 unnamed_dev_start = slot;
739 spin_unlock(&unnamed_dev_lock); 735 spin_unlock(&unnamed_dev_lock);
740} 736}
737EXPORT_SYMBOL(free_anon_bdev);
738
739int set_anon_super(struct super_block *s, void *data)
740{
741 int error = get_anon_bdev(&s->s_dev);
742 if (!error)
743 s->s_bdi = &noop_backing_dev_info;
744 return error;
745}
746
747EXPORT_SYMBOL(set_anon_super);
748
749void kill_anon_super(struct super_block *sb)
750{
751 dev_t dev = sb->s_dev;
752 generic_shutdown_super(sb);
753 free_anon_bdev(dev);
754}
741 755
742EXPORT_SYMBOL(kill_anon_super); 756EXPORT_SYMBOL(kill_anon_super);
743 757