knfsd: fix spurious EINVAL errors on first access of new filesystem
The v2/v3 acl code in nfsd is translating any return from fh_verify() to nfserr_inval. This is particularly unfortunate in the case of an nfserr_dropit return, which is an internal error meant to indicate to callers that this request has been deferred and should just be dropped pending the results of an upcall to mountd. Thanks to Roland <devzero@web.de> for bug report and data collection. Cc: Roland <devzero@web.de> Acked-by: Andreas Gruenbacher <agruen@suse.de> Signed-off-by: J. Bruce Fields <bfields@citi.umich.edu> Reviewed-By: NeilBrown <neilb@suse.de> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
		
					parent
					
						
							
								44048d700b
							
						
					
				
			
			
				commit
				
					
						ac8587dcb5
					
				
			
		
					 2 changed files with 2 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -41,7 +41,7 @@ static __be32 nfsacld_proc_getacl(struct svc_rqst * rqstp,
 | 
			
		|||
 | 
			
		||||
	fh = fh_copy(&resp->fh, &argp->fh);
 | 
			
		||||
	if ((nfserr = fh_verify(rqstp, &resp->fh, 0, MAY_NOP)))
 | 
			
		||||
		RETURN_STATUS(nfserr_inval);
 | 
			
		||||
		RETURN_STATUS(nfserr);
 | 
			
		||||
 | 
			
		||||
	if (argp->mask & ~(NFS_ACL|NFS_ACLCNT|NFS_DFACL|NFS_DFACLCNT))
 | 
			
		||||
		RETURN_STATUS(nfserr_inval);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -37,7 +37,7 @@ static __be32 nfsd3_proc_getacl(struct svc_rqst * rqstp,
 | 
			
		|||
 | 
			
		||||
	fh = fh_copy(&resp->fh, &argp->fh);
 | 
			
		||||
	if ((nfserr = fh_verify(rqstp, &resp->fh, 0, MAY_NOP)))
 | 
			
		||||
		RETURN_STATUS(nfserr_inval);
 | 
			
		||||
		RETURN_STATUS(nfserr);
 | 
			
		||||
 | 
			
		||||
	if (argp->mask & ~(NFS_ACL|NFS_ACLCNT|NFS_DFACL|NFS_DFACLCNT))
 | 
			
		||||
		RETURN_STATUS(nfserr_inval);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue