linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: NeilBrown <neilb@suse.de>
To: Christoph Hellwig <hch@lst.de>
Cc: linux-nfs@vger.kernel.org
Subject: Re: [PATCH 13/19] pnfs/blocklayout: correctly decrement extent length
Date: Mon, 9 Feb 2015 17:01:40 +1100	[thread overview]
Message-ID: <20150209170140.18f4d004@notabene.brown> (raw)
In-Reply-To: <1408637375-11343-14-git-send-email-hch@lst.de>

[-- Attachment #1: Type: text/plain, Size: 2439 bytes --]

On Thu, 21 Aug 2014 11:09:29 -0500 Christoph Hellwig <hch@lst.de> wrote:

> When we do non-page sized reads we can underflow the extent_length variable
> and read incorrect data.  Fix the extent_length calculation and change to
> defensive <= checks for the extent length in the read and write path.
> 
> Signed-off-by: Christoph Hellwig <hch@lst.de>

Hi Christoph,
 I was reviewing this patch for possible backport.
As 'extent_length' is sector_t, it is unsigned (either u64 or unsigned long).

So comparing "<= 0" has the same effect as comparing "== 0".
So the new checks are not "defensive".

That doesn't mean they are wrong, but they could be misleading...

There may be nothing that needs to be done here, but I thought I should let
you know.

NeilBrown

> ---
>  fs/nfs/blocklayout/blocklayout.c | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
> 
> diff --git a/fs/nfs/blocklayout/blocklayout.c b/fs/nfs/blocklayout/blocklayout.c
> index 5427ae7..87a633d 100644
> --- a/fs/nfs/blocklayout/blocklayout.c
> +++ b/fs/nfs/blocklayout/blocklayout.c
> @@ -272,7 +272,7 @@ bl_read_pagelist(struct nfs_pgio_header *hdr)
>  	isect = (sector_t) (f_offset >> SECTOR_SHIFT);
>  	/* Code assumes extents are page-aligned */
>  	for (i = pg_index; i < hdr->page_array.npages; i++) {
> -		if (!extent_length) {
> +		if (extent_length <= 0) {
>  			/* We've used up the previous extent */
>  			bl_put_extent(be);
>  			bl_put_extent(cow_read);
> @@ -303,6 +303,7 @@ bl_read_pagelist(struct nfs_pgio_header *hdr)
>  			f_offset += pg_len;
>  			bytes_left -= pg_len;
>  			isect += (pg_offset >> SECTOR_SHIFT);
> +			extent_length -= (pg_offset >> SECTOR_SHIFT);
>  		} else {
>  			pg_offset = 0;
>  			pg_len = PAGE_CACHE_SIZE;
> @@ -333,7 +334,7 @@ bl_read_pagelist(struct nfs_pgio_header *hdr)
>  			}
>  		}
>  		isect += (pg_len >> SECTOR_SHIFT);
> -		extent_length -= PAGE_CACHE_SECTORS;
> +		extent_length -= (pg_len >> SECTOR_SHIFT);
>  	}
>  	if ((isect << SECTOR_SHIFT) >= header->inode->i_size) {
>  		hdr->res.eof = 1;
> @@ -797,7 +798,7 @@ next_page:
>  	/* Middle pages */
>  	pg_index = header->args.pgbase >> PAGE_CACHE_SHIFT;
>  	for (i = pg_index; i < header->page_array.npages; i++) {
> -		if (!extent_length) {
> +		if (extent_length <= 0) {
>  			/* We've used up the previous extent */
>  			bl_put_extent(be);
>  			bl_put_extent(cow_read);


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 811 bytes --]

  reply	other threads:[~2015-02-09  6:01 UTC|newest]

Thread overview: 66+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <pnfs block layout driver fixes V2>
2014-08-21 16:09 ` Christoph Hellwig
2014-08-21 16:09   ` [PATCH 01/19] nfs: cap request size to fit a kmalloced page array Christoph Hellwig
2014-08-21 16:09   ` [PATCH 02/19] pnfs: do not pass uninitialized lsegs to ->free_lseg Christoph Hellwig
2014-08-21 16:09   ` [PATCH 03/19] pnfs: force a layout commit when encountering busy segments during recall Christoph Hellwig
2014-08-24 17:49     ` Boaz Harrosh
2014-08-24 19:18       ` Christoph Hellwig
2014-08-26 14:10         ` [PATCH] pnfs: Kick a pnfs_layoutcommit_inode on recall Boaz Harrosh
2014-08-26 14:26           ` Trond Myklebust
2014-08-26 14:37             ` Boaz Harrosh
2014-08-26 14:52               ` Boaz Harrosh
2014-08-26 14:55               ` Trond Myklebust
2014-08-26 15:02                 ` Boaz Harrosh
2014-08-26 15:24                   ` Matt W. Benjamin
2014-08-26 15:36                     ` Trond Myklebust
2014-08-26 16:56                       ` Boaz Harrosh
2014-08-26 16:59                         ` Trond Myklebust
2014-08-26 17:06                           ` Boaz Harrosh
2014-08-26 17:54                             ` Trond Myklebust
2014-08-26 18:19                               ` Boaz Harrosh
2014-08-26 18:34                                 ` Boaz Harrosh
2014-08-26 18:41                                 ` Trond Myklebust
2014-08-26 19:46                                   ` Trond Myklebust
2014-08-27  8:50                                     ` Boaz Harrosh
2014-08-27  8:22                                   ` Boaz Harrosh
2014-09-09  0:37     ` [PATCH 03/19] pnfs: force a layout commit when encountering busy segments during recall Trond Myklebust
2014-09-09  5:49       ` Christoph Hellwig
2014-09-09 14:38         ` Trond Myklebust
2014-08-21 16:09   ` [PATCH 04/19] pnfs: don't check sequence on new stateids in layoutget Christoph Hellwig
2014-08-21 16:09   ` [PATCH 05/19] pnfs: retry after a bad stateid error from layoutget Christoph Hellwig
2014-08-21 16:09   ` [PATCH 06/19] pnfs: avoid using stale stateids after layoutreturn Christoph Hellwig
2014-08-21 16:09   ` [PATCH 07/19] pnfs: add flag to force read-modify-write in ->write_begin Christoph Hellwig
2014-09-09  3:50     ` Trond Myklebust
2014-09-09  5:53       ` Christoph Hellwig
2014-09-09 14:41         ` Trond Myklebust
2014-08-21 16:09   ` [PATCH 08/19] pnfs: add return_range method Christoph Hellwig
2014-08-25 13:50     ` Anna Schumaker
2014-08-25 14:09       ` Christoph Hellwig
2014-08-25 14:17         ` Anna Schumaker
2014-08-25 14:20           ` Christoph Hellwig
2014-09-09  3:57     ` Trond Myklebust
2014-08-21 16:09   ` [PATCH 09/19] pnfs: allow splicing pre-encoded pages into the layoutcommit args Christoph Hellwig
2014-08-21 16:09   ` [PATCH 10/19] pnfs/blocklayout: reject pnfs blocksize larger than page size Christoph Hellwig
2014-08-21 16:09   ` [PATCH 11/19] pnfs/blocklayout: improve GETDEVICEINFO error reporting Christoph Hellwig
2014-08-21 16:09   ` [PATCH 12/19] pnfs/blocklayout: plug block queues Christoph Hellwig
2014-08-21 16:09   ` [PATCH 13/19] pnfs/blocklayout: correctly decrement extent length Christoph Hellwig
2015-02-09  6:01     ` NeilBrown [this message]
2015-02-09 18:24       ` Christoph Hellwig
2014-08-21 16:09   ` [PATCH 14/19] pnfs/blocklayout: remove read-modify-write handling in bl_write_pagelist Christoph Hellwig
2014-09-09  4:43     ` Trond Myklebust
2014-08-21 16:09   ` [PATCH 15/19] pnfs/blocklayout: don't set pages uptodate Christoph Hellwig
2014-09-09  4:48     ` Trond Myklebust
2014-08-21 16:09   ` [PATCH 16/19] pnfs/blocklayout: rewrite extent tracking Christoph Hellwig
2014-08-25 14:36     ` Anna Schumaker
2014-08-25 14:43       ` Christoph Hellwig
2014-08-26  9:06         ` Boaz Harrosh
2014-09-09  4:50     ` Trond Myklebust
2014-08-21 16:09   ` [PATCH 17/19] pnfs/blocklayout: implement the return_range method Christoph Hellwig
2014-09-09  4:03     ` Trond Myklebust
2014-08-21 16:09   ` [PATCH 18/19] pnfs/blocklayout: return layouts on setattr Christoph Hellwig
2014-09-09  4:09     ` Trond Myklebust
2014-08-21 16:09   ` [PATCH 19/19] pnfs/blocklayout: allocate separate pages for the layoutcommit payload Christoph Hellwig
2014-09-09  4:52     ` Trond Myklebust
2014-08-21 16:13   ` pnfs block layout driver fixes V2 Christoph Hellwig
2014-09-09  4:12     ` Trond Myklebust
2014-09-09  5:54       ` Christoph Hellwig
2014-09-09 14:40         ` Trond Myklebust

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=20150209170140.18f4d004@notabene.brown \
    --to=neilb@suse.de \
    --cc=hch@lst.de \
    --cc=linux-nfs@vger.kernel.org \
    /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 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).