All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@linux-foundation.org>
To: Jiri Slaby <jirislaby@gmail.com>
Cc: viro@zeniv.linux.org.uk, linux-fsdevel@vger.kernel.org,
	linux-kernel@vger.kernel.org, jirislaby@gmail.com
Subject: Re: [PATCH 1/1] fs: fix lock imbalance in do_remount_sb()
Date: Wed, 13 May 2009 16:08:20 -0700	[thread overview]
Message-ID: <20090513160820.981917ca.akpm@linux-foundation.org> (raw)
In-Reply-To: <1242242472-20598-1-git-send-email-jirislaby@gmail.com>

On Wed, 13 May 2009 21:21:12 +0200
Jiri Slaby <jirislaby@gmail.com> wrote:

> Commit "Push BKL down into do_remount_sb()" pushed un/lock_kernel
> into do_remount_sb but forgets to unlock it on fail paths. Fix
> that.
> 

argh, how many times must we teach ourselves this lesson?  Perhaps we
can convert this function to have a single `return' to prevent
relapses?

> ---
>  fs/super.c |   12 +++++++++---
>  1 files changed, 9 insertions(+), 3 deletions(-)
> 
> diff --git a/fs/super.c b/fs/super.c
> index e4a0c5b..a64f362 100644
> --- a/fs/super.c
> +++ b/fs/super.c
> @@ -548,18 +548,24 @@ int do_remount_sb(struct super_block *sb, int flags, void *data, int force)
>  	if ((flags & MS_RDONLY) && !(sb->s_flags & MS_RDONLY)) {
>  		if (force)
>  			mark_files_ro(sb);
> -		else if (!fs_may_remount_ro(sb))
> +		else if (!fs_may_remount_ro(sb)) {
> +			unlock_kernel();
>  			return -EBUSY;
> +		}
>  		retval = vfs_dq_off(sb, 1);
> -		if (retval < 0 && retval != -ENOSYS)
> +		if (retval < 0 && retval != -ENOSYS) {
> +			unlock_kernel();
>  			return -EBUSY;

Strange that the code drops the vfs_dq_off() return value on the floor.
`man(2) mount' lists a great pile of possible errnos.

> +		}
>  	}
>  	remount_rw = !(flags & MS_RDONLY) && (sb->s_flags & MS_RDONLY);
>  
>  	if (sb->s_op->remount_fs) {
>  		retval = sb->s_op->remount_fs(sb, &flags, data);
> -		if (retval)
> +		if (retval) {
> +			unlock_kernel();
>  			return retval;
> +		}


>  	}
>  	sb->s_flags = (sb->s_flags & ~MS_RMT_MASK) | (flags & MS_RMT_MASK);
>  	unlock_kernel();


      reply	other threads:[~2009-05-13 23:09 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-05-13 19:21 [PATCH 1/1] fs: fix lock imbalance in do_remount_sb() Jiri Slaby
2009-05-13 23:08 ` Andrew Morton [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090513160820.981917ca.akpm@linux-foundation.org \
    --to=akpm@linux-foundation.org \
    --cc=jirislaby@gmail.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=viro@zeniv.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.