linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] iomap: Make sure iomap_end is called after iomap_begin
@ 2020-06-18 12:24 Andreas Gruenbacher
  2020-06-18 23:54 ` Dave Chinner
  2020-06-19 13:13 ` Christoph Hellwig
  0 siblings, 2 replies; 7+ messages in thread
From: Andreas Gruenbacher @ 2020-06-18 12:24 UTC (permalink / raw)
  To: Darrick J. Wong
  Cc: Andreas Gruenbacher, Christoph Hellwig, linux-xfs, linux-fsdevel,
	Bob Peterson

Make sure iomap_end is always called when iomap_begin succeeds.

Without this fix, iomap_end won't be called when a filesystem's
iomap_begin operation returns an invalid mapping, bypassing any
unlocking done in iomap_end.  With this fix, the unlocking would
at least still happen.

This iomap_apply bug was found by Bob Peterson during code review.
It's unlikely that such iomap_begin bugs will survive to affect
users, so backporting this fix seems unnecessary.

Fixes: ae259a9c8593 ("fs: introduce iomap infrastructure")
Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
---
 fs/iomap/apply.c | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/fs/iomap/apply.c b/fs/iomap/apply.c
index 76925b40b5fd..32daf8cb411c 100644
--- a/fs/iomap/apply.c
+++ b/fs/iomap/apply.c
@@ -46,10 +46,11 @@ iomap_apply(struct inode *inode, loff_t pos, loff_t length, unsigned flags,
 	ret = ops->iomap_begin(inode, pos, length, flags, &iomap, &srcmap);
 	if (ret)
 		return ret;
-	if (WARN_ON(iomap.offset > pos))
-		return -EIO;
-	if (WARN_ON(iomap.length == 0))
-		return -EIO;
+	if (WARN_ON(iomap.offset > pos) ||
+	    WARN_ON(iomap.length == 0)) {
+		written = -EIO;
+		goto out;
+	}
 
 	trace_iomap_apply_dstmap(inode, &iomap);
 	if (srcmap.type != IOMAP_HOLE)
@@ -80,6 +81,7 @@ iomap_apply(struct inode *inode, loff_t pos, loff_t length, unsigned flags,
 	written = actor(inode, pos, length, data, &iomap,
 			srcmap.type != IOMAP_HOLE ? &srcmap : &iomap);
 
+out:
 	/*
 	 * Now the data has been copied, commit the range we've copied.  This
 	 * should not fail unless the filesystem has had a fatal error.

base-commit: 69119673bd50b176ded34032fadd41530fb5af21
-- 
2.26.2


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

* Re: [PATCH v2] iomap: Make sure iomap_end is called after iomap_begin
  2020-06-18 12:24 [PATCH v2] iomap: Make sure iomap_end is called after iomap_begin Andreas Gruenbacher
@ 2020-06-18 23:54 ` Dave Chinner
  2020-06-19 13:13 ` Christoph Hellwig
  1 sibling, 0 replies; 7+ messages in thread
From: Dave Chinner @ 2020-06-18 23:54 UTC (permalink / raw)
  To: Andreas Gruenbacher
  Cc: Darrick J. Wong, Christoph Hellwig, linux-xfs, linux-fsdevel,
	Bob Peterson

On Thu, Jun 18, 2020 at 02:24:08PM +0200, Andreas Gruenbacher wrote:
> Make sure iomap_end is always called when iomap_begin succeeds.
> 
> Without this fix, iomap_end won't be called when a filesystem's
> iomap_begin operation returns an invalid mapping, bypassing any
> unlocking done in iomap_end.  With this fix, the unlocking would
> at least still happen.
> 
> This iomap_apply bug was found by Bob Peterson during code review.
> It's unlikely that such iomap_begin bugs will survive to affect
> users, so backporting this fix seems unnecessary.
> 
> Fixes: ae259a9c8593 ("fs: introduce iomap infrastructure")
> Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>

Thanks for the updated commit message, Andreas. :)

Patch looks good to me.

Reviewed-by: Dave Chinner <dchinner@redhat.com>

-- 
Dave Chinner
david@fromorbit.com

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

* Re: [PATCH v2] iomap: Make sure iomap_end is called after iomap_begin
  2020-06-18 12:24 [PATCH v2] iomap: Make sure iomap_end is called after iomap_begin Andreas Gruenbacher
  2020-06-18 23:54 ` Dave Chinner
@ 2020-06-19 13:13 ` Christoph Hellwig
  2020-06-22  9:07   ` Andreas Gruenbacher
  1 sibling, 1 reply; 7+ messages in thread
From: Christoph Hellwig @ 2020-06-19 13:13 UTC (permalink / raw)
  To: Andreas Gruenbacher
  Cc: Darrick J. Wong, Christoph Hellwig, linux-xfs, linux-fsdevel,
	Bob Peterson

On Thu, Jun 18, 2020 at 02:24:08PM +0200, Andreas Gruenbacher wrote:
> Make sure iomap_end is always called when iomap_begin succeeds.
> 
> Without this fix, iomap_end won't be called when a filesystem's
> iomap_begin operation returns an invalid mapping, bypassing any
> unlocking done in iomap_end.  With this fix, the unlocking would
> at least still happen.
> 
> This iomap_apply bug was found by Bob Peterson during code review.
> It's unlikely that such iomap_begin bugs will survive to affect
> users, so backporting this fix seems unnecessary.
> 
> Fixes: ae259a9c8593 ("fs: introduce iomap infrastructure")
> Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
> ---
>  fs/iomap/apply.c | 10 ++++++----
>  1 file changed, 6 insertions(+), 4 deletions(-)
> 
> diff --git a/fs/iomap/apply.c b/fs/iomap/apply.c
> index 76925b40b5fd..32daf8cb411c 100644
> --- a/fs/iomap/apply.c
> +++ b/fs/iomap/apply.c
> @@ -46,10 +46,11 @@ iomap_apply(struct inode *inode, loff_t pos, loff_t length, unsigned flags,
>  	ret = ops->iomap_begin(inode, pos, length, flags, &iomap, &srcmap);
>  	if (ret)
>  		return ret;
> -	if (WARN_ON(iomap.offset > pos))
> -		return -EIO;
> -	if (WARN_ON(iomap.length == 0))
> -		return -EIO;
> +	if (WARN_ON(iomap.offset > pos) ||
> +	    WARN_ON(iomap.length == 0)) {
> +		written = -EIO;
> +		goto out;
> +	}

As said before please don't merge these for no good reason.

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

* Re: [PATCH v2] iomap: Make sure iomap_end is called after iomap_begin
  2020-06-19 13:13 ` Christoph Hellwig
@ 2020-06-22  9:07   ` Andreas Gruenbacher
  2020-06-23 10:36     ` Christoph Hellwig
  0 siblings, 1 reply; 7+ messages in thread
From: Andreas Gruenbacher @ 2020-06-22  9:07 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: Darrick J. Wong, linux-xfs, linux-fsdevel, Bob Peterson

On Fri, Jun 19, 2020 at 3:25 PM Christoph Hellwig <hch@infradead.org> wrote:
> On Thu, Jun 18, 2020 at 02:24:08PM +0200, Andreas Gruenbacher wrote:
> > Make sure iomap_end is always called when iomap_begin succeeds.
> >
> > Without this fix, iomap_end won't be called when a filesystem's
> > iomap_begin operation returns an invalid mapping, bypassing any
> > unlocking done in iomap_end.  With this fix, the unlocking would
> > at least still happen.
> >
> > This iomap_apply bug was found by Bob Peterson during code review.
> > It's unlikely that such iomap_begin bugs will survive to affect
> > users, so backporting this fix seems unnecessary.
> >
> > Fixes: ae259a9c8593 ("fs: introduce iomap infrastructure")
> > Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
> > ---
> >  fs/iomap/apply.c | 10 ++++++----
> >  1 file changed, 6 insertions(+), 4 deletions(-)
> >
> > diff --git a/fs/iomap/apply.c b/fs/iomap/apply.c
> > index 76925b40b5fd..32daf8cb411c 100644
> > --- a/fs/iomap/apply.c
> > +++ b/fs/iomap/apply.c
> > @@ -46,10 +46,11 @@ iomap_apply(struct inode *inode, loff_t pos, loff_t length, unsigned flags,
> >       ret = ops->iomap_begin(inode, pos, length, flags, &iomap, &srcmap);
> >       if (ret)
> >               return ret;
> > -     if (WARN_ON(iomap.offset > pos))
> > -             return -EIO;
> > -     if (WARN_ON(iomap.length == 0))
> > -             return -EIO;
> > +     if (WARN_ON(iomap.offset > pos) ||
> > +         WARN_ON(iomap.length == 0)) {
> > +             written = -EIO;
> > +             goto out;
> > +     }
>
> As said before please don't merge these for no good reason.

I really didn't expect this tiny patch to require much discussion at
all, but just to be clear ... do you actually object to this very
patch that explicitly doesn't merge the two checks and keeps them on
two separate lines so that the warning messages will report different
line numbers, or are you fine with that?

Thanks,
Andreas


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

* Re: [PATCH v2] iomap: Make sure iomap_end is called after iomap_begin
  2020-06-22  9:07   ` Andreas Gruenbacher
@ 2020-06-23 10:36     ` Christoph Hellwig
  2020-06-23 10:51       ` Andreas Grünbacher
  0 siblings, 1 reply; 7+ messages in thread
From: Christoph Hellwig @ 2020-06-23 10:36 UTC (permalink / raw)
  To: Andreas Gruenbacher
  Cc: Christoph Hellwig, Darrick J. Wong, linux-xfs, linux-fsdevel,
	Bob Peterson

On Mon, Jun 22, 2020 at 11:07:59AM +0200, Andreas Gruenbacher wrote:
> On Fri, Jun 19, 2020 at 3:25 PM Christoph Hellwig <hch@infradead.org> wrote:
> > On Thu, Jun 18, 2020 at 02:24:08PM +0200, Andreas Gruenbacher wrote:
> > > Make sure iomap_end is always called when iomap_begin succeeds.
> > >
> > > Without this fix, iomap_end won't be called when a filesystem's
> > > iomap_begin operation returns an invalid mapping, bypassing any
> > > unlocking done in iomap_end.  With this fix, the unlocking would
> > > at least still happen.
> > >
> > > This iomap_apply bug was found by Bob Peterson during code review.
> > > It's unlikely that such iomap_begin bugs will survive to affect
> > > users, so backporting this fix seems unnecessary.
> > >
> > > Fixes: ae259a9c8593 ("fs: introduce iomap infrastructure")
> > > Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
> > > ---
> > >  fs/iomap/apply.c | 10 ++++++----
> > >  1 file changed, 6 insertions(+), 4 deletions(-)
> > >
> > > diff --git a/fs/iomap/apply.c b/fs/iomap/apply.c
> > > index 76925b40b5fd..32daf8cb411c 100644
> > > --- a/fs/iomap/apply.c
> > > +++ b/fs/iomap/apply.c
> > > @@ -46,10 +46,11 @@ iomap_apply(struct inode *inode, loff_t pos, loff_t length, unsigned flags,
> > >       ret = ops->iomap_begin(inode, pos, length, flags, &iomap, &srcmap);
> > >       if (ret)
> > >               return ret;
> > > -     if (WARN_ON(iomap.offset > pos))
> > > -             return -EIO;
> > > -     if (WARN_ON(iomap.length == 0))
> > > -             return -EIO;
> > > +     if (WARN_ON(iomap.offset > pos) ||
> > > +         WARN_ON(iomap.length == 0)) {
> > > +             written = -EIO;
> > > +             goto out;
> > > +     }
> >
> > As said before please don't merge these for no good reason.
> 
> I really didn't expect this tiny patch to require much discussion at
> all, but just to be clear ... do you actually object to this very
> patch that explicitly doesn't merge the two checks and keeps them on
> two separate lines so that the warning messages will report different
> line numbers, or are you fine with that?

Yes, it merges the WARN_ONs, and thus reduces their usefulness.  How
about a patch that just fixes your reported issue insted of messing up
other things for no good reason?

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

* Re: [PATCH v2] iomap: Make sure iomap_end is called after iomap_begin
  2020-06-23 10:36     ` Christoph Hellwig
@ 2020-06-23 10:51       ` Andreas Grünbacher
  2020-06-23 11:32         ` Christoph Hellwig
  0 siblings, 1 reply; 7+ messages in thread
From: Andreas Grünbacher @ 2020-06-23 10:51 UTC (permalink / raw)
  To: Christoph Hellwig
  Cc: Andreas Gruenbacher, Darrick J. Wong, linux-xfs, linux-fsdevel,
	Bob Peterson

Am Di., 23. Juni 2020 um 12:38 Uhr schrieb Christoph Hellwig
<hch@infradead.org>:
> On Mon, Jun 22, 2020 at 11:07:59AM +0200, Andreas Gruenbacher wrote:
> > On Fri, Jun 19, 2020 at 3:25 PM Christoph Hellwig <hch@infradead.org> wrote:
> > > On Thu, Jun 18, 2020 at 02:24:08PM +0200, Andreas Gruenbacher wrote:
> > > > Make sure iomap_end is always called when iomap_begin succeeds.
> > > >
> > > > Without this fix, iomap_end won't be called when a filesystem's
> > > > iomap_begin operation returns an invalid mapping, bypassing any
> > > > unlocking done in iomap_end.  With this fix, the unlocking would
> > > > at least still happen.
> > > >
> > > > This iomap_apply bug was found by Bob Peterson during code review.
> > > > It's unlikely that such iomap_begin bugs will survive to affect
> > > > users, so backporting this fix seems unnecessary.
> > > >
> > > > Fixes: ae259a9c8593 ("fs: introduce iomap infrastructure")
> > > > Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
> > > > ---
> > > >  fs/iomap/apply.c | 10 ++++++----
> > > >  1 file changed, 6 insertions(+), 4 deletions(-)
> > > >
> > > > diff --git a/fs/iomap/apply.c b/fs/iomap/apply.c
> > > > index 76925b40b5fd..32daf8cb411c 100644
> > > > --- a/fs/iomap/apply.c
> > > > +++ b/fs/iomap/apply.c
> > > > @@ -46,10 +46,11 @@ iomap_apply(struct inode *inode, loff_t pos, loff_t length, unsigned flags,
> > > >       ret = ops->iomap_begin(inode, pos, length, flags, &iomap, &srcmap);
> > > >       if (ret)
> > > >               return ret;
> > > > -     if (WARN_ON(iomap.offset > pos))
> > > > -             return -EIO;
> > > > -     if (WARN_ON(iomap.length == 0))
> > > > -             return -EIO;
> > > > +     if (WARN_ON(iomap.offset > pos) ||
> > > > +         WARN_ON(iomap.length == 0)) {
> > > > +             written = -EIO;
> > > > +             goto out;
> > > > +     }
> > >
> > > As said before please don't merge these for no good reason.
> >
> > I really didn't expect this tiny patch to require much discussion at
> > all, but just to be clear ... do you actually object to this very
> > patch that explicitly doesn't merge the two checks and keeps them on
> > two separate lines so that the warning messages will report different
> > line numbers, or are you fine with that?
>
> Yes, it merges the WARN_ONs, and thus reduces their usefulness.  How
> about a patch that just fixes your reported issue insted of messing up
> other things for no good reason?

So you're saying you prefer this:

+       if (WARN_ON(iomap.offset > pos)) {
+               written = -EIO;
+               goto out;
+       }
+       if (WARN_ON(iomap.length == 0)) {
+               written = -EIO;
+               goto out;
+       }

to this:

+       if (WARN_ON(iomap.offset > pos) ||
+           WARN_ON(iomap.length == 0)) {
+               written = -EIO;
+               goto out;
+       }

Well fine, you don't need to accuse me of messing up things for that.

Andreas

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

* Re: [PATCH v2] iomap: Make sure iomap_end is called after iomap_begin
  2020-06-23 10:51       ` Andreas Grünbacher
@ 2020-06-23 11:32         ` Christoph Hellwig
  0 siblings, 0 replies; 7+ messages in thread
From: Christoph Hellwig @ 2020-06-23 11:32 UTC (permalink / raw)
  To: Andreas Gr??nbacher
  Cc: Christoph Hellwig, Andreas Gruenbacher, Darrick J. Wong,
	linux-xfs, linux-fsdevel, Bob Peterson

On Tue, Jun 23, 2020 at 12:51:00PM +0200, Andreas Gr??nbacher wrote:
> > Yes, it merges the WARN_ONs, and thus reduces their usefulness.  How
> > about a patch that just fixes your reported issue insted of messing up
> > other things for no good reason?
> 
> So you're saying you prefer this:
> 
> +       if (WARN_ON(iomap.offset > pos)) {
> +               written = -EIO;
> +               goto out;
> +       }
> +       if (WARN_ON(iomap.length == 0)) {
> +               written = -EIO;
> +               goto out;
> +       }
> 
> to this:
> 
> +       if (WARN_ON(iomap.offset > pos) ||
> +           WARN_ON(iomap.length == 0)) {
> +               written = -EIO;
> +               goto out;
> +       }
> 
> Well fine, you don't need to accuse me of messing up things for that.

Yes.  And we had discussion on exactly that on the previous iteration..

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

end of thread, other threads:[~2020-06-23 11:32 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-18 12:24 [PATCH v2] iomap: Make sure iomap_end is called after iomap_begin Andreas Gruenbacher
2020-06-18 23:54 ` Dave Chinner
2020-06-19 13:13 ` Christoph Hellwig
2020-06-22  9:07   ` Andreas Gruenbacher
2020-06-23 10:36     ` Christoph Hellwig
2020-06-23 10:51       ` Andreas Grünbacher
2020-06-23 11:32         ` Christoph Hellwig

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).