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

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

NFS: Fix a preemption count leak in nfs_update_request



The commit 27852596 (nfs: use GFP_NOFS
preloads for radix-tree insertion) appears to have introduced a bug:
We only want to call radix_tree_preload() once after creating a request.
Calling it every time we loop after we created the request, will cause
preemption count leaks.

Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
Cc: Nick Piggin <npiggin@suse.de>
parent 0b4aae7a
Loading
Loading
Loading
Loading
+4 −7
Original line number Diff line number Diff line
@@ -584,13 +584,6 @@ static struct nfs_page * nfs_update_request(struct nfs_open_context* ctx,
		/* Loop over all inode entries and see if we find
		 * A request for the page we wish to update
		 */
		if (new) {
			if (radix_tree_preload(GFP_NOFS)) {
				nfs_release_request(new);
				return ERR_PTR(-ENOMEM);
			}
		}

		spin_lock(&inode->i_lock);
		req = nfs_page_find_request_locked(page);
		if (req) {
@@ -630,6 +623,10 @@ static struct nfs_page * nfs_update_request(struct nfs_open_context* ctx,
		new = nfs_create_request(ctx, inode, page, offset, bytes);
		if (IS_ERR(new))
			return new;
		if (radix_tree_preload(GFP_NOFS)) {
			nfs_release_request(new);
			return ERR_PTR(-ENOMEM);
		}
	}

	/* We have a request for our page.