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>
		
			
				
	
	
		
			66 lines
		
	
	
	
		
			2 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			66 lines
		
	
	
	
		
			2 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 */
 | 
						|
 |