diff mbox

btrfs: use appropriate replacements for __sb_{start,end}_write calls

Message ID 20171010104803.GA33133@dhcp-216.srv.tuxera.com (mailing list archive)
State New, archived
Headers show

Commit Message

Rakesh Pandit Oct. 10, 2017, 10:48 a.m. UTC
Commit a53f4f8e9c8eb ("btrfs: Don't call btrfs_start_transaction() on
frozen fs to avoid deadlock.") started using internal calls and we
replace them with more suitable ones.

Signed-off-by: Rakesh Pandit <rakesh@tuxera.com>
---
 fs/btrfs/super.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Nikolay Borisov Oct. 10, 2017, 11 a.m. UTC | #1
On 10.10.2017 13:48, Rakesh Pandit wrote:
> Commit a53f4f8e9c8eb ("btrfs: Don't call btrfs_start_transaction() on
> frozen fs to avoid deadlock.") started using internal calls and we
> replace them with more suitable ones.
> 
> Signed-off-by: Rakesh Pandit <rakesh@tuxera.com>
> ---
>  fs/btrfs/super.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
> index 35a128a..99c21ae 100644
> --- a/fs/btrfs/super.c
> +++ b/fs/btrfs/super.c
> @@ -1205,8 +1205,8 @@ int btrfs_sync_fs(struct super_block *sb, int wait)
>  			 * happens. The pending operations are delayed to the
>  			 * next commit after thawing.
>  			 */
> -			if (__sb_start_write(sb, SB_FREEZE_WRITE, false))
> -				__sb_end_write(sb, SB_FREEZE_WRITE);
> +			if (sb_start_write_trylock(sb))
> +				sb_end_write(sb)
>  			else
>  				return 0;
>  			trans = btrfs_start_transaction(root, 0);

The non __ versions are just wrappers around the __ specific calls. So
the code is identical.

Reviewed-by: Nikolay Borisov <nborisov@suse.com>

--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Rakesh Pandit Oct. 10, 2017, 11:04 a.m. UTC | #2
On Tue, Oct 10, 2017 at 02:00:20PM +0300, Nikolay Borisov wrote:
> 
> 
> On 10.10.2017 13:48, Rakesh Pandit wrote:
> > Commit a53f4f8e9c8eb ("btrfs: Don't call btrfs_start_transaction() on
> > frozen fs to avoid deadlock.") started using internal calls and we
> > replace them with more suitable ones.
> > 
> > Signed-off-by: Rakesh Pandit <rakesh@tuxera.com>
> > ---
> >  fs/btrfs/super.c | 4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
> > 
> > diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
> > index 35a128a..99c21ae 100644
> > --- a/fs/btrfs/super.c
> > +++ b/fs/btrfs/super.c
> > @@ -1205,8 +1205,8 @@ int btrfs_sync_fs(struct super_block *sb, int wait)
> >  			 * happens. The pending operations are delayed to the
> >  			 * next commit after thawing.
> >  			 */
> > -			if (__sb_start_write(sb, SB_FREEZE_WRITE, false))
> > -				__sb_end_write(sb, SB_FREEZE_WRITE);
> > +			if (sb_start_write_trylock(sb))
> > +				sb_end_write(sb)
> >  			else
> >  				return 0;
> >  			trans = btrfs_start_transaction(root, 0);
> 
> The non __ versions are just wrappers around the __ specific calls. So
> the code is identical.
> 
> Reviewed-by: Nikolay Borisov <nborisov@suse.com>
> 

Thanks, yes indeed.
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Nikolay Borisov Oct. 10, 2017, 11:08 a.m. UTC | #3
On 10.10.2017 13:48, Rakesh Pandit wrote:
> Commit a53f4f8e9c8eb ("btrfs: Don't call btrfs_start_transaction() on
> frozen fs to avoid deadlock.") started using internal calls and we
> replace them with more suitable ones.
> 
> Signed-off-by: Rakesh Pandit <rakesh@tuxera.com>
> ---
>  fs/btrfs/super.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
> index 35a128a..99c21ae 100644
> --- a/fs/btrfs/super.c
> +++ b/fs/btrfs/super.c
> @@ -1205,8 +1205,8 @@ int btrfs_sync_fs(struct super_block *sb, int wait)
>  			 * happens. The pending operations are delayed to the
>  			 * next commit after thawing.
>  			 */
> -			if (__sb_start_write(sb, SB_FREEZE_WRITE, false))
> -				__sb_end_write(sb, SB_FREEZE_WRITE);
> +			if (sb_start_write_trylock(sb))
> +				sb_end_write(sb)
>  			else
>  				return 0;

On second thought, what's to prevent the filesystem to be frozen if
sb_start_write/sb_end_write code executes? Or even after we are in the
middle of btrfs_start_transaction?


>  			trans = btrfs_start_transaction(root, 0);
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Rakesh Pandit Oct. 10, 2017, 1:13 p.m. UTC | #4
On Tue, Oct 10, 2017 at 02:08:11PM +0300, Nikolay Borisov wrote:
> 
> 
> On 10.10.2017 13:48, Rakesh Pandit wrote:
> > Commit a53f4f8e9c8eb ("btrfs: Don't call btrfs_start_transaction() on
> > frozen fs to avoid deadlock.") started using internal calls and we
> > replace them with more suitable ones.
> > 
> > Signed-off-by: Rakesh Pandit <rakesh@tuxera.com>
> > ---
> >  fs/btrfs/super.c | 4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
> > 
> > diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
> > index 35a128a..99c21ae 100644
> > --- a/fs/btrfs/super.c
> > +++ b/fs/btrfs/super.c
> > @@ -1205,8 +1205,8 @@ int btrfs_sync_fs(struct super_block *sb, int wait)
> >  			 * happens. The pending operations are delayed to the
> >  			 * next commit after thawing.
> >  			 */
> > -			if (__sb_start_write(sb, SB_FREEZE_WRITE, false))
> > -				__sb_end_write(sb, SB_FREEZE_WRITE);
> > +			if (sb_start_write_trylock(sb))
> > +				sb_end_write(sb)
> >  			else
> >  				return 0;
> 
> On second thought, what's to prevent the filesystem to be frozen if
> sb_start_write/sb_end_write code executes? Or even after we are in the
> middle of btrfs_start_transaction?

sb->s_writers.frozen is protected by sb->s_umount and s_umount is
held when ->sync_fs is called.

> 
> 
> >  			trans = btrfs_start_transaction(root, 0);
> > 
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
David Sterba Oct. 10, 2017, 1:20 p.m. UTC | #5
On Tue, Oct 10, 2017 at 01:48:05PM +0300, Rakesh Pandit wrote:
> Commit a53f4f8e9c8eb ("btrfs: Don't call btrfs_start_transaction() on
> frozen fs to avoid deadlock.") started using internal calls and we
> replace them with more suitable ones.
> 
> Signed-off-by: Rakesh Pandit <rakesh@tuxera.com>
> ---
>  fs/btrfs/super.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
> index 35a128a..99c21ae 100644
> --- a/fs/btrfs/super.c
> +++ b/fs/btrfs/super.c
> @@ -1205,8 +1205,8 @@ int btrfs_sync_fs(struct super_block *sb, int wait)
>  			 * happens. The pending operations are delayed to the
>  			 * next commit after thawing.
>  			 */
> -			if (__sb_start_write(sb, SB_FREEZE_WRITE, false))
> -				__sb_end_write(sb, SB_FREEZE_WRITE);
> +			if (sb_start_write_trylock(sb))
> +				sb_end_write(sb)

  CC [M]  fs/btrfs/print-tree.o
fs/btrfs/super.c: In function ‘btrfs_sync_fs’:
fs/btrfs/super.c:1210:4: error: expected ‘;’ before ‘else’
    else
    ^~~~

will be fixed.
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/fs/btrfs/super.c b/fs/btrfs/super.c
index 35a128a..99c21ae 100644
--- a/fs/btrfs/super.c
+++ b/fs/btrfs/super.c
@@ -1205,8 +1205,8 @@  int btrfs_sync_fs(struct super_block *sb, int wait)
 			 * happens. The pending operations are delayed to the
 			 * next commit after thawing.
 			 */
-			if (__sb_start_write(sb, SB_FREEZE_WRITE, false))
-				__sb_end_write(sb, SB_FREEZE_WRITE);
+			if (sb_start_write_trylock(sb))
+				sb_end_write(sb)
 			else
 				return 0;
 			trans = btrfs_start_transaction(root, 0);