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 --]
next prev parent 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).