All of lore.kernel.org
 help / color / mirror / Atom feed
From: Zheng Liu <gnehzuil.liu@gmail.com>
To: Ahmed Tamrawi <ahmedtamrawi@gmail.com>
Cc: linux-ext4@vger.kernel.org
Subject: [PATCH] ext4: release ->i_mutex and resume unlocked dio in swap_inode_boot_loader() (Re: mutex_unlock is missed ...)
Date: Sun, 9 Feb 2014 20:27:45 +0800	[thread overview]
Message-ID: <20140209122745.GA12554@gmail.com> (raw)
In-Reply-To: <CAFZT-j+KqKfx5sEr3G9JbesUNgp60vi9Zn_tT=78S-WrVmmxKw@mail.gmail.com>

Hi Ahmed,

On Wed, Feb 05, 2014 at 01:39:06PM -0600, Ahmed Tamrawi wrote:
> Hi there!
> 
> Bug Report Filed: https://bugzilla.kernel.org/show_bug.cgi?id=70091
> Linux Version [3.13]
> Configuration: Default configuration for x86
> 
> 
> In function (swap_inode_boot_loader) in file (linux-3.13/fs/ext4/ioctl.c):
> 
> The structures: (inode->i_mutex) and (inode_bl->i_mutex) gets
> successfully locked at line (133) by (lock_two_nondirectories(inode,
> inode_bl), but both are not unlocked when the function returns after
> line (147), however they got unlocked only at line (208) by
> (unlock_two_nondirectories(inode, inode_bl)).
> 
> A possible solution is to call (unlock_two_nondirectories(inode,
> inode_bl)) before line (147).

Thanks for reporting this issue.  I believe the following patch that can
fix the issue.

Regards,
                                                - Zheng

Subject: [PATCH] ext4: release ->i_mutex and resume unlocked dio in swap_inode_boot_loader()

From: Zheng Liu <wenqing.lz@taobao.com>

In swap_inode_boot_loader() we forgot to release ->i_mutex and resume
unlocked dio for inode and inode_bl.  This commit fixes this issue.

Reported-by: Ahmed Tamrawi <ahmedtamrawi@gmail.com>
Cc: Andreas Dilger <adilger.kernel@dilger.ca>
Cc: "Theodore Ts'o" <tytso@mit.edu>
Cc: Dr. Tilmann Bubeck <t.bubeck@reinform.de>
Signed-off-by: Zheng Liu <wenqing.lz@taobao.com>
---
 fs/ext4/ioctl.c |    3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c
index 6bea806..a2a837f 100644
--- a/fs/ext4/ioctl.c
+++ b/fs/ext4/ioctl.c
@@ -140,7 +140,7 @@ static long swap_inode_boot_loader(struct super_block *sb,
 	handle = ext4_journal_start(inode_bl, EXT4_HT_MOVE_EXTENTS, 2);
 	if (IS_ERR(handle)) {
 		err = -EINVAL;
-		goto swap_boot_out;
+		goto journal_err_out;
 	}
 
 	/* Protect extent tree against block allocations via delalloc */
@@ -198,6 +198,7 @@ static long swap_inode_boot_loader(struct super_block *sb,
 
 	ext4_double_up_write_data_sem(inode, inode_bl);
 
+journal_err_out:
 	ext4_inode_resume_unlocked_dio(inode);
 	ext4_inode_resume_unlocked_dio(inode_bl);
 
-- 
1.7.9.7


  reply	other threads:[~2014-02-09 12:22 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-02-05 19:39 mutex_unlock is missed in function (swap_inode_boot_loader) in file (linux-3.13/fs/ext4/ioctl.c) Ahmed Tamrawi
2014-02-09 12:27 ` Zheng Liu [this message]
2014-02-12 16:49   ` [PATCH] ext4: release ->i_mutex and resume unlocked dio in swap_inode_boot_loader() (Re: mutex_unlock is missed ...) Theodore Ts'o

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=20140209122745.GA12554@gmail.com \
    --to=gnehzuil.liu@gmail.com \
    --cc=ahmedtamrawi@gmail.com \
    --cc=linux-ext4@vger.kernel.org \
    /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.