diff options
Diffstat (limited to 'fs/nfs')
| -rw-r--r-- | fs/nfs/nfs4proc.c | 19 | ||||
| -rw-r--r-- | fs/nfs/nfs4state.c | 1 | 
2 files changed, 14 insertions, 6 deletions
| diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index c0fdcf8c0032..bb0e84a46d61 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c @@ -4012,22 +4012,29 @@ static int _nfs4_discover_trunking(struct nfs_server *server,  	}  	page = alloc_page(GFP_KERNEL); +	if (!page) +		return -ENOMEM;  	locations = kmalloc(sizeof(struct nfs4_fs_locations), GFP_KERNEL); -	if (page == NULL || locations == NULL) -		goto out; +	if (!locations) +		goto out_free; +	locations->fattr = nfs_alloc_fattr(); +	if (!locations->fattr) +		goto out_free_2;  	status = nfs4_proc_get_locations(server, fhandle, locations, page,  					 cred);  	if (status) -		goto out; +		goto out_free_3;  	for (i = 0; i < locations->nlocations; i++)  		test_fs_location_for_trunking(&locations->locations[i], clp,  					      server); -out: -	if (page) -		__free_page(page); +out_free_3: +	kfree(locations->fattr); +out_free_2:  	kfree(locations); +out_free: +	__free_page(page);  	return status;  } diff --git a/fs/nfs/nfs4state.c b/fs/nfs/nfs4state.c index 2540b35ec187..9bab3e9c702a 100644 --- a/fs/nfs/nfs4state.c +++ b/fs/nfs/nfs4state.c @@ -2753,5 +2753,6 @@ again:  		goto again;  	nfs_put_client(clp); +	module_put_and_kthread_exit(0);  	return 0;  } |