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

Commit 499f3edc authored by J. Bruce Fields's avatar J. Bruce Fields
Browse files

nfsd4: remember to put RW access on stateid destruction



Without this, for example,

	open read
	open read+write
	close

will result in a struct file leak.

Regression from 7d947842 "nfsd4: fix
downgrade/lock logic".

Cc: stable@kernel.org
Signed-off-by: default avatarJ. Bruce Fields <bfields@redhat.com>
parent 17456804
Loading
Loading
Loading
Loading
+6 −11
Original line number Diff line number Diff line
@@ -385,14 +385,6 @@ static int nfs4_access_to_omode(u32 access)
	BUG();
}

static int nfs4_access_bmap_to_omode(struct nfs4_stateid *stp)
{
	unsigned int access;

	set_access(&access, stp->st_access_bmap);
	return nfs4_access_to_omode(access);
}

static void unhash_generic_stateid(struct nfs4_stateid *stp)
{
	list_del(&stp->st_hash);
@@ -402,11 +394,14 @@ static void unhash_generic_stateid(struct nfs4_stateid *stp)

static void free_generic_stateid(struct nfs4_stateid *stp)
{
	int oflag;
	int i;

	if (stp->st_access_bmap) {
		oflag = nfs4_access_bmap_to_omode(stp);
		nfs4_file_put_access(stp->st_file, oflag);
		for (i = 1; i < 4; i++) {
			if (test_bit(i, &stp->st_access_bmap))
				nfs4_file_put_access(stp->st_file,
						nfs4_access_to_omode(i));
		}
	}
	put_nfs4_file(stp->st_file);
	kmem_cache_free(stateid_slab, stp);