All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Luis R. Rodriguez" <mcgrof@kernel.org>
To: viro@zeniv.linux.org.uk, linux-fsdevel@vger.kernel.org
Cc: jack@suse.cz, bart.vanassche@wdc.com, ming.lei@redhat.com,
	rjw@rjwysocki.net, mguzik@redhat.com, linux-pm@vger.kernel.org,
	linux-block@vger.kernel.org, linux-kernel@vger.kernel.org,
	"Luis R. Rodriguez" <mcgrof@kernel.org>
Subject: [PATCH 2/3] fs: make thaw_super_locked() really just a helper
Date: Fri, 20 Apr 2018 16:59:03 -0700	[thread overview]
Message-ID: <20180420235904.27496-3-mcgrof@kernel.org> (raw)
In-Reply-To: <20180420235904.27496-1-mcgrof@kernel.org>

thaw_super_locked() was added via commit 08fdc8a0138a ("buffer.c: call
thaw_super during emergency thaw") merged on v4.17 to help with the
ability so that the caller can take charge of handling the s_umount lock,
however, it has left all* of the failure handling including unlocking
lock of s_umount inside thaw_super_locked().

This does not make thaw_super_locked() flexible. For instance we may
later want to use it with the abilty to handle unfolding of the locks
ourselves.

Change thaw_super_locked() to really just be a helper, and let the
callers deal with all the error handling.

This commit introeuces no functional changes.

Signed-off-by: Luis R. Rodriguez <mcgrof@kernel.org>
---
 fs/super.c | 27 ++++++++++++++++++++-------
 1 file changed, 20 insertions(+), 7 deletions(-)

diff --git a/fs/super.c b/fs/super.c
index 9d0eb5e20a1f..82bc74a16f06 100644
--- a/fs/super.c
+++ b/fs/super.c
@@ -937,10 +937,15 @@ void emergency_remount(void)
 
 static void do_thaw_all_callback(struct super_block *sb)
 {
+	int error;
+
 	down_write(&sb->s_umount);
 	if (sb->s_root && sb->s_flags & MS_BORN) {
 		emergency_thaw_bdev(sb);
-		thaw_super_locked(sb);
+		error = thaw_super_locked(sb);
+		if (error)
+			up_write(&sb->s_umount);
+		deactivate_locked_super(sb);
 	} else {
 		up_write(&sb->s_umount);
 	}
@@ -1532,14 +1537,13 @@ int freeze_super(struct super_block *sb)
 }
 EXPORT_SYMBOL(freeze_super);
 
+/* Caller takes the sb->s_umount rw_semaphore lock and handles active count */
 static int thaw_super_locked(struct super_block *sb)
 {
 	int error;
 
-	if (sb->s_writers.frozen != SB_FREEZE_COMPLETE) {
-		up_write(&sb->s_umount);
+	if (sb->s_writers.frozen != SB_FREEZE_COMPLETE)
 		return -EINVAL;
-	}
 
 	if (sb_rdonly(sb)) {
 		sb->s_writers.frozen = SB_UNFROZEN;
@@ -1554,7 +1558,6 @@ static int thaw_super_locked(struct super_block *sb)
 			printk(KERN_ERR
 				"VFS:Filesystem thaw failed\n");
 			lockdep_sb_freeze_release(sb);
-			up_write(&sb->s_umount);
 			return error;
 		}
 	}
@@ -1563,7 +1566,6 @@ static int thaw_super_locked(struct super_block *sb)
 	sb_freeze_unlock(sb);
 out:
 	wake_up(&sb->s_writers.wait_unfrozen);
-	deactivate_locked_super(sb);
 	return 0;
 }
 
@@ -1575,7 +1577,18 @@ static int thaw_super_locked(struct super_block *sb)
  */
 int thaw_super(struct super_block *sb)
 {
+	int error;
+
 	down_write(&sb->s_umount);
-	return thaw_super_locked(sb);
+	error = thaw_super_locked(sb);
+	if (error) {
+		up_write(&sb->s_umount);
+		goto out;
+	}
+
+	deactivate_locked_super(sb);
+
+out:
+	return error;
 }
 EXPORT_SYMBOL(thaw_super);
-- 
2.16.3

  parent reply	other threads:[~2018-04-20 23:59 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-04-20 23:59 [PATCH 0/3] fs: minor fs thaw fixes and adjustments Luis R. Rodriguez
2018-04-20 23:59 ` [PATCH 1/3] fs: move documentation for thaw_super() where appropriate Luis R. Rodriguez
2018-04-21  0:01   ` Bart Van Assche
2018-04-21  0:01     ` Bart Van Assche
2018-04-21  0:07     ` Luis R. Rodriguez
2018-04-21  0:09       ` Randy Dunlap
2018-05-03 14:53   ` Jan Kara
2018-04-20 23:59 ` Luis R. Rodriguez [this message]
2018-05-03 15:07   ` [PATCH 2/3] fs: make thaw_super_locked() really just a helper Jan Kara
2018-04-20 23:59 ` [PATCH 3/3] fs: fix corner case race on freeze_bdev() when sb disappears Luis R. Rodriguez
2018-05-03 15:02   ` Jan Kara
2018-04-21  0:02 ` [PATCH 0/3] fs: minor fs thaw fixes and adjustments Luis R. Rodriguez

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=20180420235904.27496-3-mcgrof@kernel.org \
    --to=mcgrof@kernel.org \
    --cc=bart.vanassche@wdc.com \
    --cc=jack@suse.cz \
    --cc=linux-block@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=mguzik@redhat.com \
    --cc=ming.lei@redhat.com \
    --cc=rjw@rjwysocki.net \
    --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.