From mboxrd@z Thu Jan 1 00:00:00 1970 From: Adrian Hunter Subject: Re: [PATCH] UBIFS: kill BKL Date: Mon, 20 Jul 2009 09:16:31 +0300 Message-ID: <4A640BBF.10106@nokia.com> References: <1248000922-4065-1-git-send-email-dedekind1@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: "linux-fsdevel@vger.kernel.org" , "Bityutskiy Artem (Nokia-D/Helsinki)" To: Artem Bityutskiy Return-path: Received: from smtp.nokia.com ([192.100.122.233]:48562 "EHLO mgw-mx06.nokia.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751803AbZGTGQB (ORCPT ); Mon, 20 Jul 2009 02:16:01 -0400 In-Reply-To: <1248000922-4065-1-git-send-email-dedekind1@gmail.com> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: Artem Bityutskiy wrote: > From: Artem Bityutskiy > > The BKL was pushed down from VFS to the file-systems. It used > to serialize mount/unmount/remount. UBIFS must be safe if several > file-systems are mounted/unmounted/re-mounted at the same time, > so kill kick the BKL out of UBIFS. > > Signed-off-by: Artem Bityutskiy > --- Looks like protection is always provided by sb->s_umount Missing {} below, btw. > fs/ubifs/super.c | 15 ++------------- > 1 files changed, 2 insertions(+), 13 deletions(-) > > diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c > index 26d2e0d..4ad992f 100644 > --- a/fs/ubifs/super.c > +++ b/fs/ubifs/super.c > @@ -1726,8 +1726,6 @@ static void ubifs_put_super(struct super_block *sb) > ubifs_msg("un-mount UBI device %d, volume %d", c->vi.ubi_num, > c->vi.vol_id); > > - lock_kernel(); > - > /* > * The following asserts are only valid if there has not been a failure > * of the media. For example, there will be dirty inodes if we failed > @@ -1792,8 +1790,6 @@ static void ubifs_put_super(struct super_block *sb) > ubi_close_volume(c->ubi); > mutex_unlock(&c->umount_mutex); > kfree(c); > - > - unlock_kernel(); > } > > static int ubifs_remount_fs(struct super_block *sb, int *flags, char *data) > @@ -1809,24 +1805,18 @@ static int ubifs_remount_fs(struct super_block *sb, int *flags, char *data) > return err; > } > > - lock_kernel(); > if ((sb->s_flags & MS_RDONLY) && !(*flags & MS_RDONLY)) { > if (c->ro_media) { > ubifs_msg("cannot re-mount due to prior errors"); > - unlock_kernel(); > return -EROFS; > } > err = ubifs_remount_rw(c); > - if (err) { > - unlock_kernel(); > + if (err) > return err; > - } > } else if (!(sb->s_flags & MS_RDONLY) && (*flags & MS_RDONLY)) { > - if (c->ro_media) { > + if (c->ro_media) Missing {} > ubifs_msg("cannot re-mount due to prior errors"); > - unlock_kernel(); > return -EROFS; > - } > ubifs_remount_ro(c); > } > > @@ -1839,7 +1829,6 @@ static int ubifs_remount_fs(struct super_block *sb, int *flags, char *data) > } > > ubifs_assert(c->lst.taken_empty_lebs > 0); > - unlock_kernel(); > return 0; > } >