All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] dm: fix freeze_bdev() return value check
@ 2007-09-24 10:56 Akinobu Mita
  2007-09-24 13:04 ` Alasdair G Kergon
  2007-09-25 14:23 ` Akinobu Mita
  0 siblings, 2 replies; 5+ messages in thread
From: Akinobu Mita @ 2007-09-24 10:56 UTC (permalink / raw)
  To: dm-devel

freeze_bdev() does not return errno as pointer on failure.
This patch fixes the return value check.

Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>

---
 drivers/md/dm.c |    9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

Index: 2.6-git/drivers/md/dm.c
===================================================================
--- 2.6-git.orig/drivers/md/dm.c
+++ 2.6-git/drivers/md/dm.c
@@ -1290,16 +1290,11 @@ out:
  */
 static int lock_fs(struct mapped_device *md)
 {
-	int r;
-
 	WARN_ON(md->frozen_sb);
 
 	md->frozen_sb = freeze_bdev(md->suspended_bdev);
-	if (IS_ERR(md->frozen_sb)) {
-		r = PTR_ERR(md->frozen_sb);
-		md->frozen_sb = NULL;
-		return r;
-	}
+	if (!md->frozen_sb)
+		return -ENODEV;
 
 	set_bit(DMF_FROZEN, &md->flags);
 

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] dm: fix freeze_bdev() return value check
  2007-09-24 10:56 [PATCH] dm: fix freeze_bdev() return value check Akinobu Mita
@ 2007-09-24 13:04 ` Alasdair G Kergon
  2007-09-25 14:23 ` Akinobu Mita
  1 sibling, 0 replies; 5+ messages in thread
From: Alasdair G Kergon @ 2007-09-24 13:04 UTC (permalink / raw)
  To: device-mapper development

On Mon, Sep 24, 2007 at 07:56:36PM +0900, Akinobu Mita wrote:
> freeze_bdev() does not return errno as pointer on failure.
 
Please check the history of this - was this ever in the tree
or is it still pending or not?

Alasdair
-- 
agk@redhat.com

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] dm: fix freeze_bdev() return value check
  2007-09-24 10:56 [PATCH] dm: fix freeze_bdev() return value check Akinobu Mita
  2007-09-24 13:04 ` Alasdair G Kergon
@ 2007-09-25 14:23 ` Akinobu Mita
  2007-09-25 15:52   ` Milan Broz
  1 sibling, 1 reply; 5+ messages in thread
From: Akinobu Mita @ 2007-09-25 14:23 UTC (permalink / raw)
  To: dm-devel; +Cc: Alasdair G Kergon

2007/9/24, Akinobu Mita <akinobu.mita@gmail.com>:
> freeze_bdev() does not return errno as pointer on failure.
> This patch fixes the return value check.

I misunderstood the meaning of the return value of freeze_bdev().
I thought NULL returned by freeze_bdev means error. But it is wrong.
freeze_bdev returns NULL when there is no filesystem mounted on the
device with holding bd_mount_sem.
So this patch is totally broken.

But there is no reason to check the return value with IS_ERR().
Because freeze_bdev return NULL or valid super block

Subject: [PATCH] dm: remove freeze_bdev() return value check
From: Akinobu Mita <akinobu.mita@gmail.com>

There is no reason to check the return value with IS_ERR().
Because freeze_bdev return NULL or valid super block.

Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>

---
 drivers/md/dm.c |    7 -------
 1 file changed, 7 deletions(-)

Index: 2.6-git/drivers/md/dm.c
===================================================================
--- 2.6-git.orig/drivers/md/dm.c
+++ 2.6-git/drivers/md/dm.c
@@ -1290,16 +1290,9 @@ out:
  */
 static int lock_fs(struct mapped_device *md)
 {
-	int r;
-
 	WARN_ON(md->frozen_sb);

 	md->frozen_sb = freeze_bdev(md->suspended_bdev);
-	if (IS_ERR(md->frozen_sb)) {
-		r = PTR_ERR(md->frozen_sb);
-		md->frozen_sb = NULL;
-		return r;
-	}

 	set_bit(DMF_FROZEN, &md->flags);

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Re: [PATCH] dm: fix freeze_bdev() return value check
  2007-09-25 14:23 ` Akinobu Mita
@ 2007-09-25 15:52   ` Milan Broz
  2007-09-25 15:56     ` Christoph Hellwig
  0 siblings, 1 reply; 5+ messages in thread
From: Milan Broz @ 2007-09-25 15:52 UTC (permalink / raw)
  To: device-mapper development; +Cc: Christoph Hellwig

Akinobu Mita wrote:
> 2007/9/24, Akinobu Mita <akinobu.mita@gmail.com>:
>> freeze_bdev() does not return errno as pointer on failure.
>> This patch fixes the return value check.
> 
...
> But there is no reason to check the return value with IS_ERR().
> Because freeze_bdev return NULL or valid super block

Yes, but there is another place in kernel using this check
(see /fs/xfs/xfs_fsops.c)

Probably question for Christoph Hellwig - some changes related to
returning error in frezze_bdev() were planned but never commited.
(see list archive)

Otherwise test for IS_ERR() should be removed.

Milan
--
mbroz@redhat.com

> 
> Subject: [PATCH] dm: remove freeze_bdev() return value check
> From: Akinobu Mita <akinobu.mita@gmail.com>
> 
> There is no reason to check the return value with IS_ERR().
> Because freeze_bdev return NULL or valid super block.
> 
> Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
> 
> ---
>  drivers/md/dm.c |    7 -------
>  1 file changed, 7 deletions(-)
> 
> Index: 2.6-git/drivers/md/dm.c
> ===================================================================
> --- 2.6-git.orig/drivers/md/dm.c
> +++ 2.6-git/drivers/md/dm.c
> @@ -1290,16 +1290,9 @@ out:
>   */
>  static int lock_fs(struct mapped_device *md)
>  {
> -	int r;
> -
>  	WARN_ON(md->frozen_sb);
> 
>  	md->frozen_sb = freeze_bdev(md->suspended_bdev);
> -	if (IS_ERR(md->frozen_sb)) {
> -		r = PTR_ERR(md->frozen_sb);
> -		md->frozen_sb = NULL;
> -		return r;
> -	}
> 
>  	set_bit(DMF_FROZEN, &md->flags);
> 

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: Re: [PATCH] dm: fix freeze_bdev() return value check
  2007-09-25 15:52   ` Milan Broz
@ 2007-09-25 15:56     ` Christoph Hellwig
  0 siblings, 0 replies; 5+ messages in thread
From: Christoph Hellwig @ 2007-09-25 15:56 UTC (permalink / raw)
  To: Milan Broz; +Cc: Christoph Hellwig, device-mapper development

On Tue, Sep 25, 2007 at 05:52:29PM +0200, Milan Broz wrote:
> Akinobu Mita wrote:
> > 2007/9/24, Akinobu Mita <akinobu.mita@gmail.com>:
> >> freeze_bdev() does not return errno as pointer on failure.
> >> This patch fixes the return value check.
> > 
> ...
> > But there is no reason to check the return value with IS_ERR().
> > Because freeze_bdev return NULL or valid super block
> 
> Yes, but there is another place in kernel using this check
> (see /fs/xfs/xfs_fsops.c)
> 
> Probably question for Christoph Hellwig - some changes related to
> returning error in frezze_bdev() were planned but never commited.
> (see list archive)
> 
> Otherwise test for IS_ERR() should be removed.

The plan was to change freeze_bdev to do a trylock un s_umount_sem
and return SBUSY if it fails to avoid the deadlock scenario where
people called xfs_freeze and got another freeze request from dm.

I don't remember why this never got it, it's probably worth sending
a patch like this again.

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2007-09-25 15:56 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-09-24 10:56 [PATCH] dm: fix freeze_bdev() return value check Akinobu Mita
2007-09-24 13:04 ` Alasdair G Kergon
2007-09-25 14:23 ` Akinobu Mita
2007-09-25 15:52   ` Milan Broz
2007-09-25 15:56     ` Christoph Hellwig

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.