diff mbox series

[2/3] afs: check function return

Message ID 162609464716.3133237.10354897554363093252.stgit@warthog.procyon.org.uk (mailing list archive)
State New, archived
Headers show
Series afs: Miscellaneous fixes | expand

Commit Message

David Howells July 12, 2021, 12:57 p.m. UTC
From: Tom Rix <trix@redhat.com>

Static analysis reports this problem

write.c:773:29: warning: Assigned value is garbage or undefined
  mapping->writeback_index = next;
                           ^ ~~~~
The call to afs_writepages_region() can return without setting
next.  So check the function return before using next.

Fixes: e87b03f5830e ("afs: Prepare for use of THPs")
Signed-off-by: Tom Rix <trix@redhat.com>
Signed-off-by: David Howells <dhowells@redhat.com>
Link: https://lore.kernel.org/r/20210430155031.3287870-1-trix@redhat.com
---

 fs/afs/write.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Marc Dionne July 12, 2021, 2:20 p.m. UTC | #1
On Mon, Jul 12, 2021 at 9:57 AM David Howells <dhowells@redhat.com> wrote:
>
> From: Tom Rix <trix@redhat.com>
>
> Static analysis reports this problem
>
> write.c:773:29: warning: Assigned value is garbage or undefined
>   mapping->writeback_index = next;
>                            ^ ~~~~
> The call to afs_writepages_region() can return without setting
> next.  So check the function return before using next.
>
> Fixes: e87b03f5830e ("afs: Prepare for use of THPs")
> Signed-off-by: Tom Rix <trix@redhat.com>
> Signed-off-by: David Howells <dhowells@redhat.com>
> Link: https://lore.kernel.org/r/20210430155031.3287870-1-trix@redhat.com
> ---
>
>  fs/afs/write.c |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/fs/afs/write.c b/fs/afs/write.c
> index 3104b62c2082..2794147f82ff 100644
> --- a/fs/afs/write.c
> +++ b/fs/afs/write.c
> @@ -777,7 +777,7 @@ int afs_writepages(struct address_space *mapping,
>                 mapping->writeback_index = next / PAGE_SIZE;

Isn't there the same issue with the use of next here.

>         } else if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX) {
>                 ret = afs_writepages_region(mapping, wbc, 0, LLONG_MAX, &next);
> -               if (wbc->nr_to_write > 0)
> +               if (wbc->nr_to_write > 0 && ret == 0)
>                         mapping->writeback_index = next;

Unrelated to this patch, but since next is a byte offset, should this
also divide by PAGE_SIZE as above.

>         } else {
>                 ret = afs_writepages_region(mapping, wbc,
>
>

Marc
David Howells July 12, 2021, 3:21 p.m. UTC | #2
Marc Dionne <marc.c.dionne@gmail.com> wrote:

> > @@ -777,7 +777,7 @@ int afs_writepages(struct address_space *mapping,
> >                 mapping->writeback_index = next / PAGE_SIZE;
> 
> Isn't there the same issue with the use of next here.

Good point.

> >                         mapping->writeback_index = next;
> 
> Unrelated to this patch, but since next is a byte offset, should this
> also divide by PAGE_SIZE as above.

Also a good point.  I'll whip up a separate patch for that.

David
diff mbox series

Patch

diff --git a/fs/afs/write.c b/fs/afs/write.c
index 3104b62c2082..2794147f82ff 100644
--- a/fs/afs/write.c
+++ b/fs/afs/write.c
@@ -777,7 +777,7 @@  int afs_writepages(struct address_space *mapping,
 		mapping->writeback_index = next / PAGE_SIZE;
 	} else if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX) {
 		ret = afs_writepages_region(mapping, wbc, 0, LLONG_MAX, &next);
-		if (wbc->nr_to_write > 0)
+		if (wbc->nr_to_write > 0 && ret == 0)
 			mapping->writeback_index = next;
 	} else {
 		ret = afs_writepages_region(mapping, wbc,