lkml.org 
[lkml]   [2001]   [Mar]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH] Bug in do_mount()
> >       if (list_empty(&sb->s_mounts))
> > kill_super(sb, 0);
> > + else
> > + put_filesystem(fstype);
> > goto unlock_out;

> Reference acquired by get_fs_type() is
> released by put_filesystem() (near fs_out), _NOT_ by kill_super().

Yes.

> kill_super() releases the reference stored in ->s_type (created
> by get_sb_...()). If superblock stays alive you should not release it.

get_sb_...() will do get_filesystem() even if superblock stays alive.

We get the filesystem twice, in get_fs_type() and get_sb_...(), but if
we goto 'fail:' and don't call kill_super(), we put the filesystem
only once (near fs_out).

> What bug are you trying to fix?

foofs is a FS_SINGLE filesystem:
(but the !nd.dentry->d_inode case should be no different)

# grep foofs /proc/modules
foofs 6736 0 (unused)
# mount NONE /mnt -t foofs
# grep foofs /proc/modules
foofs 6736 1
# mount NONE /mnt -t foofs
mount: NONE already mounted or /mnt busy
mount: according to mtab, NONE is already mounted on /mnt
# grep foofs /proc/modules
foofs 6736 2
# mount NONE /mnt -t foofs
mount: NONE already mounted or /mnt busy
mount: according to mtab, NONE is already mounted on /mnt
# grep foofs /proc/modules
foofs 6736 3
# umount /mnt
# grep foofs /proc/modules
foofs 6736 2
# umount /mnt
umount: /mnt: not mounted
# grep foofs /proc/modules
foofs 6736 2
# rmmod foofs
foofs: Device or resource busy

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

\
 
 \ /
  Last update: 2005-03-22 13:17    [W:2.134 / U:0.048 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site