Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

NFSv4.1/pNFS: Don't request a minimal read layout beyond the end of file

If we have a read layout, then sanity check the minimal layout length
so that it does not extend beyond the end of file.

Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>

+9
+9
fs/nfs/pnfs.c
··· 868 868 struct nfs_server *server = NFS_SERVER(ino); 869 869 struct nfs4_layoutget *lgp; 870 870 struct pnfs_layout_segment *lseg; 871 + loff_t i_size; 871 872 872 873 dprintk("--> %s\n", __func__); 873 874 ··· 876 875 if (lgp == NULL) 877 876 return NULL; 878 877 878 + i_size = i_size_read(ino); 879 + 879 880 lgp->args.minlength = PAGE_CACHE_SIZE; 880 881 if (lgp->args.minlength > range->length) 881 882 lgp->args.minlength = range->length; 883 + if (range->iomode == IOMODE_READ) { 884 + if (range->offset >= i_size) 885 + lgp->args.minlength = 0; 886 + else if (i_size - range->offset < lgp->args.minlength) 887 + lgp->args.minlength = i_size - range->offset; 888 + } 882 889 lgp->args.maxcount = PNFS_LAYOUT_MAXSIZE; 883 890 lgp->args.range = *range; 884 891 lgp->args.type = server->pnfs_curr_ld->id;