[PATCH] (part 7) fs/super.c cleanups

2001-05-25 Thread Alexander Viro

Handling of refcounts for FS_SINGLE filesystems moved to
add_vfsmnt(). That's the first half of real fix for FS_SINGLE mess -
we should make it "read_super() if we hadn't done it yet, otherwise
return what we have". That will make kern_mount() uses simpler and
remove all special-casing with refcounts. in the hindsight, the trick
I've used in 2.4.0-test2 merge was ugly - kern_mount() should be used
only when kernel explicitly asks for a vfsmount of its own, not as
as part of init for FS_SINGLE filesystems. Fix is easy, but that chunk
touches several files besides fs/super.c and requires sane locking
to be safe. Patch below is the preliminary part local to fs/super.c.

Please, apply.

diff -urN S5-pre6-kern_mount/fs/super.c S5-pre6-single1/fs/super.c
--- S5-pre6-kern_mount/fs/super.c   Fri May 25 15:07:19 2001
+++ S5-pre6-single1/fs/super.c  Fri May 25 15:12:36 2001
@@ -367,6 +367,8 @@
list_add(>mnt_instances, >s_mounts);
list_add(>mnt_list, vfsmntlist.prev);
spin_unlock(_lock);
+   if (sb->s_type->fs_flags & FS_SINGLE)
+   get_filesystem(sb->s_type);
 out:
return mnt;
 fail:
@@ -852,7 +854,6 @@
sb = fs_type->kern_mnt->mnt_sb;
if (!sb)
BUG();
-   get_filesystem(fs_type);
do_remount_sb(sb, flags, data);
return sb;
 }
@@ -1165,8 +1166,6 @@
goto out2;
 
err = -ENOMEM;
-   if (old_nd.mnt->mnt_sb->s_type->fs_flags & FS_SINGLE)
-   get_filesystem(old_nd.mnt->mnt_sb->s_type);

down(_sem);
/* there we go */
@@ -1177,8 +1176,6 @@
err = 0;
up(_nd.dentry->d_inode->i_zombie);
up(_sem);
-   if (err && old_nd.mnt->mnt_sb->s_type->fs_flags & FS_SINGLE)
-   put_filesystem(old_nd.mnt->mnt_sb->s_type);
 out2:
path_release(_nd);
 out1:
@@ -1369,8 +1366,6 @@
return retval;
 
 fail:
-   if (fstype->fs_flags & FS_SINGLE)
-   put_filesystem(fstype);
kill_super(sb);
goto unlock_out;
 }

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/



[PATCH] (part 7) fs/super.c cleanups

2001-05-25 Thread Alexander Viro

Handling of refcounts for FS_SINGLE filesystems moved to
add_vfsmnt(). That's the first half of real fix for FS_SINGLE mess -
we should make it read_super() if we hadn't done it yet, otherwise
return what we have. That will make kern_mount() uses simpler and
remove all special-casing with refcounts. in the hindsight, the trick
I've used in 2.4.0-test2 merge was ugly - kern_mount() should be used
only when kernel explicitly asks for a vfsmount of its own, not as
as part of init for FS_SINGLE filesystems. Fix is easy, but that chunk
touches several files besides fs/super.c and requires sane locking
to be safe. Patch below is the preliminary part local to fs/super.c.

Please, apply.

diff -urN S5-pre6-kern_mount/fs/super.c S5-pre6-single1/fs/super.c
--- S5-pre6-kern_mount/fs/super.c   Fri May 25 15:07:19 2001
+++ S5-pre6-single1/fs/super.c  Fri May 25 15:12:36 2001
@@ -367,6 +367,8 @@
list_add(mnt-mnt_instances, sb-s_mounts);
list_add(mnt-mnt_list, vfsmntlist.prev);
spin_unlock(dcache_lock);
+   if (sb-s_type-fs_flags  FS_SINGLE)
+   get_filesystem(sb-s_type);
 out:
return mnt;
 fail:
@@ -852,7 +854,6 @@
sb = fs_type-kern_mnt-mnt_sb;
if (!sb)
BUG();
-   get_filesystem(fs_type);
do_remount_sb(sb, flags, data);
return sb;
 }
@@ -1165,8 +1166,6 @@
goto out2;
 
err = -ENOMEM;
-   if (old_nd.mnt-mnt_sb-s_type-fs_flags  FS_SINGLE)
-   get_filesystem(old_nd.mnt-mnt_sb-s_type);

down(mount_sem);
/* there we go */
@@ -1177,8 +1176,6 @@
err = 0;
up(new_nd.dentry-d_inode-i_zombie);
up(mount_sem);
-   if (err  old_nd.mnt-mnt_sb-s_type-fs_flags  FS_SINGLE)
-   put_filesystem(old_nd.mnt-mnt_sb-s_type);
 out2:
path_release(new_nd);
 out1:
@@ -1369,8 +1366,6 @@
return retval;
 
 fail:
-   if (fstype-fs_flags  FS_SINGLE)
-   put_filesystem(fstype);
kill_super(sb);
goto unlock_out;
 }

-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/