Skip to content

Commit

Permalink
NFS: Fix up nfs_page_group_covers_page()
Browse files Browse the repository at this point in the history
Fix up the test in nfs_page_group_covers_page(). The simplest implementation
is to check that we have a set of intersecting or contiguous subrequests
that connect page offset 0 to nfs_page_length(req->wb_page).

Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
  • Loading branch information
trondmypd committed Aug 15, 2017
1 parent 1344b7e commit 7e8a30f
Showing 1 changed file with 6 additions and 12 deletions.
18 changes: 6 additions & 12 deletions fs/nfs/write.c
Original file line number Diff line number Diff line change
Expand Up @@ -243,9 +243,6 @@ nfs_page_group_search_locked(struct nfs_page *head, unsigned int page_offset)
{
struct nfs_page *req;

WARN_ON_ONCE(head != head->wb_head);
WARN_ON_ONCE(!test_bit(PG_HEADLOCK, &head->wb_head->wb_flags));

req = head;
do {
if (page_offset >= req->wb_pgbase &&
Expand Down Expand Up @@ -273,18 +270,15 @@ static bool nfs_page_group_covers_page(struct nfs_page *req)

nfs_page_group_lock(req);

do {
for (;;) {
tmp = nfs_page_group_search_locked(req->wb_head, pos);
if (tmp) {
/* no way this should happen */
WARN_ON_ONCE(tmp->wb_pgbase != pos);
pos += tmp->wb_bytes - (pos - tmp->wb_pgbase);
}
} while (tmp && pos < len);
if (!tmp)
break;
pos = tmp->wb_pgbase + tmp->wb_bytes;
}

nfs_page_group_unlock(req);
WARN_ON_ONCE(pos > len);
return pos == len;
return pos >= len;
}

/* We can set the PG_uptodate flag if we see that a write request
Expand Down

0 comments on commit 7e8a30f

Please sign in to comment.