]> git.hungrycats.org Git - linux/commitdiff
[PATCH] (4/4) ->kill_sb() switchover
authorAlexander Viro <viro@math.psu.edu>
Mon, 11 Mar 2002 06:22:13 +0000 (22:22 -0800)
committerLinus Torvalds <torvalds@penguin.transmeta.com>
Mon, 11 Mar 2002 06:22:13 +0000 (22:22 -0800)
bdev filesystems switched.  Changes documented in Locking and porting.

27 files changed:
Documentation/filesystems/Locking
Documentation/filesystems/porting
fs/adfs/super.c
fs/affs/super.c
fs/bfs/inode.c
fs/cramfs/inode.c
fs/efs/super.c
fs/ext2/super.c
fs/ext3/super.c
fs/freevxfs/vxfs_super.c
fs/hfs/super.c
fs/hpfs/super.c
fs/isofs/inode.c
fs/jffs/inode-v23.c
fs/jffs2/super.c
fs/jfs/super.c
fs/minix/inode.c
fs/msdos/msdosfs_syms.c
fs/ntfs/fs.c
fs/qnx4/inode.c
fs/reiserfs/super.c
fs/romfs/inode.c
fs/super.c
fs/sysv/super.c
fs/udf/super.c
fs/ufs/super.c
fs/vfat/vfatfs_syms.c

index 9d17b7b0fe76bed9275d920c560aed1ea0c95a35..9d1a96f32e2674ff55a28af8a7661fa5f1a29272 100644 (file)
@@ -121,10 +121,16 @@ by better scheme anyway.
 
 --------------------------- file_system_type ---------------------------
 prototypes:
-       struct super_block *(*read_super) (struct super_block *, void *, int);
+       struct super_block *(*get_sb) (struct file_system_type *, int, char *, void *);
+       void (*kill_sb) (struct super_block *);
 locking rules:
-may block      BKL     ->s_lock        mount_sem
-yes            yes     yes             maybe
+               may block       BKL
+get_sb         yes             yes
+kill_sb                yes             yes
+
+->get_sb() returns error or a locked superblock (exclusive on ->s_umount).
+->kill_sb() takes a locked superblock, does all shutdown work on it,
+unlocks and drops the reference.
 
 --------------------------- address_space_operations --------------------------
 prototypes:
index 0a4efdd817ed6b778fa187bceba44c53175e5370..af16ee3c949e5d236565ce3f73c8a65449a2fc2a 100644 (file)
@@ -99,3 +99,20 @@ free to drop it...
 
 ->link() callers hold ->i_sem on the object we are linking to.  Some of your
 problems might be over...
+
+---
+[mandatory]
+
+new file_system_type method - kill_sb(superblock).  If you are converting
+an existing filesystem, set it according to ->fs_flags:
+       FS_REQUIRES_DEV         -       kill_block_super
+       FS_LITTER               -       kill_litter_super
+       neither                 -       kill_anon_super
+FS_LITTER is gone - just remove it from fs_flags.
+
+---
+[mandatory]
+
+       FS_SINGLE is gone (actually, that had happened back when ->get_sb()
+went in - and hadn't been documented ;-/).  Just remove it from fs_flags
+(and see ->get_sb() entry for other actions).
index 58912a4fd8442e2933c93d020f0568c7e8919c90..67886233c5380a5ae81a0d558d342d3ea377bb03 100644 (file)
@@ -485,6 +485,7 @@ static struct file_system_type adfs_fs_type = {
        owner:          THIS_MODULE,
        name:           "adfs",
        get_sb:         adfs_get_sb,
+       kill_sb:        kill_block_super,
        fs_flags:       FS_REQUIRES_DEV,
 };
 
index f526b3fe5c75c51096d5fb704bdde461b95d2719..feb7cc91884179a53b98d010592ba819e2a7b9fb 100644 (file)
@@ -536,6 +536,7 @@ static struct file_system_type affs_fs_type = {
        owner:          THIS_MODULE,
        name:           "affs",
        get_sb:         affs_get_sb,
+       kill_sb:        kill_block_super,
        fs_flags:       FS_REQUIRES_DEV,
 };
 
index 7c3f0d560dd830e757ad516ca86f027fc8393fb6..256a3643a7dbae829cdf4adff696d58c4bcebcee 100644 (file)
@@ -371,6 +371,7 @@ static struct file_system_type bfs_fs_type = {
        owner:          THIS_MODULE,
        name:           "bfs",
        get_sb:         bfs_get_sb,
+       kill_sb:        kill_block_super,
        fs_flags:       FS_REQUIRES_DEV,
 };
 
index 6e71e685f9b97de6ebf2b5c3b00de643024dcbe5..8c174bf823954f91cf2e91588156d91f925f6021 100644 (file)
@@ -458,6 +458,7 @@ static struct file_system_type cramfs_fs_type = {
        owner:          THIS_MODULE,
        name:           "cramfs",
        get_sb:         cramfs_get_sb,
+       kill_sb:        kill_block_super,
        fs_flags:       FS_REQUIRES_DEV,
 };
 
index 7605c758dda1796f013ac9c3d579af5f9a0ae902..29d2ca51594d24b3efe27c8155346cebb4975126 100644 (file)
@@ -24,6 +24,7 @@ static struct file_system_type efs_fs_type = {
        owner:          THIS_MODULE,
        name:           "efs",
        get_sb:         efs_get_sb,
+       kill_sb:        kill_block_super,
        fs_flags:       FS_REQUIRES_DEV,
 };
 
index 140d6ba2a10d40c53da09da5bb0926af252063ff..501e66f9af25f9eccb63f46ad365ac1d148df5a5 100644 (file)
@@ -853,6 +853,7 @@ static struct file_system_type ext2_fs_type = {
        owner:          THIS_MODULE,
        name:           "ext2",
        get_sb:         ext2_get_sb,
+       kill_sb:        kill_block_super,
        fs_flags:       FS_REQUIRES_DEV,
 };
 
index 009ee4622eecf65476dbfb8317f64d79c4136ae8..7b5d962906859c4276d4039c9594f98e23964d9e 100644 (file)
@@ -1778,6 +1778,7 @@ static struct file_system_type ext3_fs_type = {
        owner:          THIS_MODULE,
        name:           "ext3",
        get_sb:         ext3_get_sb,
+       kill_sb:        kill_block_super,
        fs_flags:       FS_REQUIRES_DEV,
 };
 
index 8658b3ca6f7bade22796280ee28e65289c18f86a..6abac4678b5f22102983028c331081636a88cc91 100644 (file)
@@ -237,6 +237,7 @@ static struct file_system_type vxfs_fs_type = {
        owner:          THIS_MODULE,
        name:           "vxfs",
        get_sb:         vxfs_get_sb,
+       kill_sb:        kill_block_super,
        fs_flags:       FS_REQUIRES_DEV,
 };
 
index 2d274945155cc102189858929ae3785801e1a0a3..5330f3325da67d6a3336a149391ee1f1f674220b 100644 (file)
@@ -105,6 +105,7 @@ static struct file_system_type hfs_fs = {
        owner:          THIS_MODULE,
        name:           "hfs",
        get_sb:         hfs_get_sb,
+       kill_sb:        kill_block_super,
        fs_flags:       FS_REQUIRES_DEV,
 };
 
index 4cc04ff72031c82866b7ca788060bef067d77d43..3fc140ea1c18e409544dcb3ca6915fb8b6449f57 100644 (file)
@@ -619,6 +619,7 @@ static struct file_system_type hpfs_fs_type = {
        owner:          THIS_MODULE,
        name:           "hpfs",
        get_sb:         hpfs_get_sb,
+       kill_sb:        kill_block_super,
        fs_flags:       FS_REQUIRES_DEV,
 };
 
index eca947cb9152cab89f473d83b58103ce50c99d31..d1bec1eae0a04d03d47f09d333a76a63d31c659a 100644 (file)
@@ -1404,6 +1404,7 @@ static struct file_system_type iso9660_fs_type = {
        owner:          THIS_MODULE,
        name:           "iso9660",
        get_sb:         isofs_get_sb,
+       kill_sb:        kill_block_super,
        fs_flags:       FS_REQUIRES_DEV,
 };
 
index afda2243ad21159dc32a21123bc82311a783152d..33ef462c39ffc85f1236d982756ea9f2c217cc62 100644 (file)
@@ -1763,6 +1763,7 @@ static struct file_system_type jffs_fs_type = {
        owner:          THIS_MODULE,
        name:           "jffs",
        get_sb:         jffs_get_sb,
+       kill_sb:        kill_block_super,
        fs_flags:       FS_REQUIRES_DEV,
 };
 
index 5e12ed41cd45266667c1ab7416bd4393d1862b95..2de1c846a65169ac90638ab9a8dfc3a0251ef0b8 100644 (file)
@@ -356,6 +356,7 @@ static struct file_system_type jffs2_fs_type = {
        owner:          THIS_MODULE,
        name:           "jffs2",
        get_sb:         jffs2_get_sb,
+       kill_sb:        kill_block_super,
        fs_flags:       FS_REQUIRES_DEV,
 };
 
index 5bc46705f8396a893431c60c7414f110a089fd3f..c0900217f422dd1fde21e612783ba1f675476f73 100644 (file)
@@ -364,6 +364,7 @@ static struct file_system_type jfs_fs_type = {
        owner:          THIS_MODULE,
        name:           "jfs",
        get_sb:         jfs_get_sb,
+       kill_sb:        kill_block_super,
        fs_flags:       FS_REQUIRES_DEV,
 };
 
index d62b0ae9dd5bc8a0b097a914fdbdb9b260ff7db3..4fa24f8a4897796846779339419e58c2b549d915 100644 (file)
@@ -567,6 +567,7 @@ static struct file_system_type minix_fs_type = {
        owner:          THIS_MODULE,
        name:           "minix",
        get_sb:         minix_get_sb,
+       kill_sb:        kill_block_super,
        fs_flags:       FS_REQUIRES_DEV,
 };
 
index a37c99fc885564cd7a2400ad43d8abcba9c41dfa..32676ff470fe67640c3d66f22f2a9ca5d17b3282 100644 (file)
@@ -35,6 +35,7 @@ static struct file_system_type msdos_fs_type = {
        owner:          THIS_MODULE,
        name:           "msdos",
        get_sb:         msdos_get_sb,
+       kill_sb:        kill_block_super,
        fs_flags:       FS_REQUIRES_DEV,
 };
 
index a74fb1fd4499c348d46aaadb6066dcd420d339ca..9bcc2335caab38310e6a77836481f437316a66a3 100644 (file)
@@ -1168,6 +1168,7 @@ static struct file_system_type ntfs_fs_type = {
        owner:          THIS_MODULE,
        name:           "ntfs",
        get_sb:         ntfs_get_sb,
+       kill_sb:        kill_block_super,
        fs_flags:       FS_REQUIRES_DEV,
 };
 
index 4d03f2928b64f1cf90d8a1ca59ae777f92ebf78e..51bc5bdfec93c8a7cbaceaf38fd3e7f3469bd187 100644 (file)
@@ -549,6 +549,7 @@ static struct file_system_type qnx4_fs_type = {
        owner:          THIS_MODULE,
        name:           "qnx4",
        get_sb:         qnx4_get_sb,
+       kill_sb:        kill_block_super,
        fs_flags:       FS_REQUIRES_DEV,
 };
 
index 95105296965b65367e63967b026595bd042140eb..cf59e892c020678b236ff18d6fa67e9ffdb432f2 100644 (file)
@@ -1193,6 +1193,7 @@ static struct file_system_type reiserfs_fs_type = {
        owner:          THIS_MODULE,
        name:           "reiserfs",
        get_sb:         reiserfs_get_sb,
+       kill_sb:        kill_block_super,
        fs_flags:       FS_REQUIRES_DEV,
 };
 
index 89b5bf1b498487a9973f1f2c3b95a20e7f9981a3..2dbb54f7d1e7ac5baea0c90735202dbc1b5f4cbe 100644 (file)
@@ -540,6 +540,7 @@ static struct file_system_type romfs_fs_type = {
        owner:          THIS_MODULE,
        name:           "romfs",
        get_sb:         romfs_get_sb,
+       kill_sb:        kill_block_super,
        fs_flags:       FS_REQUIRES_DEV,
 };
 
index 97637f020512d796ff6a217d00ddfc86827dc9b6..149e89ec125cc3d922e89b9235a6f5cccd6a08a1 100644 (file)
@@ -432,16 +432,6 @@ static void generic_shutdown_super(struct super_block *sb)
        remove_super(sb);
 }
 
-static void shutdown_super(struct super_block *sb)
-{
-       struct file_system_type *fs = sb->s_type;
-       struct block_device *bdev = sb->s_bdev;
-
-       generic_shutdown_super(sb);
-       bd_release(bdev);
-       blkdev_put(bdev, BDEV_FS);
-}
-
 void kill_super(struct super_block *sb)
 {
        struct file_system_type *fs = sb->s_type;
@@ -450,10 +440,7 @@ void kill_super(struct super_block *sb)
                return;
 
        down_write(&sb->s_umount);
-       if (fs->kill_sb)
-               fs->kill_sb(sb);
-       else
-               shutdown_super(sb);
+       fs->kill_sb(sb);
        put_filesystem(fs);
 }
 
index 793578ec0b826443de9afd9cbb8ed66d2d73a2f9..5fdda0c1f8edb0ef7bfa1749f39fb917c8f19008 100644 (file)
@@ -490,6 +490,7 @@ static struct file_system_type sysv_fs_type = {
        owner:          THIS_MODULE,
        name:           "sysv",
        get_sb:         sysv_get_sb,
+       kill_sb:        kill_block_super,
        fs_flags:       FS_REQUIRES_DEV,
 };
 
@@ -497,6 +498,7 @@ static struct file_system_type v7_fs_type = {
        owner:          THIS_MODULE,
        name:           "v7",
        get_sb:         v7_get_sb,
+       kill_sb:        kill_block_super,
        fs_flags:       FS_REQUIRES_DEV,
 };
 
index b9952e7110fe2512ea51a1262e4f1cd0a66279fb..94f483d365c4b36886ce9d8cbb1f15fe5359a1ab 100644 (file)
@@ -106,6 +106,7 @@ static struct file_system_type udf_fstype = {
        owner:          THIS_MODULE,
        name:           "udf",
        get_sb:         udf_get_sb,
+       kill_sb:        kill_block_super,
        fs_flags:       FS_REQUIRES_DEV,
 };
 
index d07905696aff3edb0a51d42014b0223aec74c53c..c2cd329064b37617e0c2c652a61bb702be9aaed2 100644 (file)
@@ -1018,6 +1018,7 @@ static struct file_system_type ufs_fs_type = {
        owner:          THIS_MODULE,
        name:           "ufs",
        get_sb:         ufs_get_sb,
+       kill_sb:        kill_block_super,
        fs_flags:       FS_REQUIRES_DEV,
 };
 
index f52faa7cb59f40ef10d2b0ea3e44aa0baf9982ad..14a3e23d20a60e2177dcd45050886a45c9d52189 100644 (file)
@@ -21,6 +21,7 @@ static struct file_system_type vfat_fs_type = {
        owner:          THIS_MODULE,
        name:           "vfat",
        get_sb:         vfat_get_sb,
+       kill_sb:        kill_block_super,
        fs_flags:       FS_REQUIRES_DEV,
 };