Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d9df8d6b authored by Trond Myklebust's avatar Trond Myklebust
Browse files

NFS: Don't fail an O_DIRECT read/write if get_user_pages() returns pages



There is no need to fail the entire O_DIRECT read/write just because
get_user_pages() returned fewer pages than we requested.

Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent 070ea602
Loading
Loading
Loading
Loading
+16 −6
Original line number Diff line number Diff line
@@ -295,10 +295,15 @@ static ssize_t nfs_direct_read_schedule(struct nfs_direct_req *dreq, unsigned lo
			break;
		}
		if ((unsigned)result < data->npages) {
			bytes = result * PAGE_SIZE;
			if (bytes <= pgbase) {
				nfs_direct_release_pages(data->pagevec, result);
				nfs_readdata_release(data);
				break;
			}
			bytes -= pgbase;
			data->npages = result;
		}

		get_dreq(dreq);

@@ -630,10 +635,15 @@ static ssize_t nfs_direct_write_schedule(struct nfs_direct_req *dreq, unsigned l
			break;
		}
		if ((unsigned)result < data->npages) {
			bytes = result * PAGE_SIZE;
			if (bytes <= pgbase) {
				nfs_direct_release_pages(data->pagevec, result);
				nfs_writedata_release(data);
				break;
			}
			bytes -= pgbase;
			data->npages = result;
		}

		get_dreq(dreq);