pNFS: Fix potential corruption of page being written
authorKazuo Ito <ito_kazuo_g3@lab.ntt.co.jp>
Thu, 14 Feb 2019 09:36:58 +0000 (18:36 +0900)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Wed, 20 Feb 2019 22:33:55 +0000 (17:33 -0500)
nfs_want_read_modify_write() didn't check for !PagePrivate when pNFS
block or SCSI layout was in use, therefore we could lose data forever
if the page being written was filled by a read before completion.

Signed-off-by: Kazuo Ito <ito_kazuo_g3@lab.ntt.co.jp>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
fs/nfs/file.c

index e4a33e66f4174b4d37565aa5786f97ff2e934da5..7086d5677ed3a6afaa8517f098921beb5613c600 100644 (file)
@@ -299,7 +299,7 @@ static int nfs_want_read_modify_write(struct file *file, struct page *page,
        unsigned int end = offset + len;
 
        if (pnfs_ld_read_whole_page(file->f_mapping->host)) {
-               if (!PageUptodate(page))
+               if (!PageUptodate(page) && !PagePrivate(page))
                        return 1;
                return 0;
        }