If an incoming NFS request is coming from the local host, then nfsd will need to perform some special handling. So detect that possibility and make the source visible in rq_local. Signed-off-by: NeilBrown <neilb@suse.de> Signed-off-by: J. Bruce Fields <bfields@redhat.com>
		
			
				
	
	
		
			67 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /******************************************************************************
 | |
| 
 | |
| (c) 2008 NetApp.  All Rights Reserved.
 | |
| 
 | |
| NetApp provides this source code under the GPL v2 License.
 | |
| The GPL v2 license is available at
 | |
| http://opensource.org/licenses/gpl-license.php.
 | |
| 
 | |
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 | |
| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 | |
| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 | |
| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 | |
| CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 | |
| EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 | |
| PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 | |
| PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 | |
| LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 | |
| NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 | |
| SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | |
| 
 | |
| ******************************************************************************/
 | |
| 
 | |
| /*
 | |
|  * Functions and macros used internally by RPC
 | |
|  */
 | |
| 
 | |
| #ifndef _NET_SUNRPC_SUNRPC_H
 | |
| #define _NET_SUNRPC_SUNRPC_H
 | |
| 
 | |
| #include <linux/net.h>
 | |
| 
 | |
| /*
 | |
|  * Header for dynamically allocated rpc buffers.
 | |
|  */
 | |
| struct rpc_buffer {
 | |
| 	size_t	len;
 | |
| 	char	data[];
 | |
| };
 | |
| 
 | |
| static inline int rpc_reply_expected(struct rpc_task *task)
 | |
| {
 | |
| 	return (task->tk_msg.rpc_proc != NULL) &&
 | |
| 		(task->tk_msg.rpc_proc->p_decode != NULL);
 | |
| }
 | |
| 
 | |
| static inline int sock_is_loopback(struct sock *sk)
 | |
| {
 | |
| 	struct dst_entry *dst;
 | |
| 	int loopback = 0;
 | |
| 	rcu_read_lock();
 | |
| 	dst = rcu_dereference(sk->sk_dst_cache);
 | |
| 	if (dst && dst->dev &&
 | |
| 	    (dst->dev->features & NETIF_F_LOOPBACK))
 | |
| 		loopback = 1;
 | |
| 	rcu_read_unlock();
 | |
| 	return loopback;
 | |
| }
 | |
| 
 | |
| int svc_send_common(struct socket *sock, struct xdr_buf *xdr,
 | |
| 		    struct page *headpage, unsigned long headoffset,
 | |
| 		    struct page *tailpage, unsigned long tailoffset);
 | |
| 
 | |
| int rpc_clients_notifier_register(void);
 | |
| void rpc_clients_notifier_unregister(void);
 | |
| #endif /* _NET_SUNRPC_SUNRPC_H */
 | |
| 
 |