pnfs/blocklayout: set up layoutupdate_pages properly
authorChristoph Hellwig <hch@lst.de>
Mon, 17 Aug 2015 16:40:58 +0000 (18:40 +0200)
committerTrond Myklebust <trond.myklebust@primarydata.com>
Mon, 17 Aug 2015 18:22:49 +0000 (13:22 -0500)
We need to replace the __be32 with a void pointer to do proper arithmentics
on the virtual addresses so that we can get the right page pointers.

Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
fs/nfs/blocklayout/extent_tree.c

index 7536036..a11b759 100644 (file)
@@ -558,14 +558,11 @@ retry:
        arg->layoutupdate_len = ext_tree_layoutupdate_size(count);
 
        if (unlikely(arg->layoutupdate_pages != &arg->layoutupdate_page)) {
-               __be32 *p = start_p;
+               void *p = start_p, *end = p + arg->layoutupdate_len;
                int i = 0;
 
-               for (p = start_p;
-                    p < start_p + arg->layoutupdate_len;
-                    p += PAGE_SIZE) {
+               for ( ; p < end; p += PAGE_SIZE)
                        arg->layoutupdate_pages[i++] = vmalloc_to_page(p);
-               }
        }
 
        dprintk("%s found %zu ranges\n", __func__, count);