0
  *   ˆl–äY>”TÔD¨ 	Å�rã`S�ÿÁƒ w_†I|¥�+ÁÀ 	    /* SPDX-License-Identifier: GPL-2.0 */
/*
 * linux/include/linux/lockd/bind.h
 *
 * This is the part of lockd visible to nfsd and the nfs client.
 *
 * Copyright (C) 1996, Olaf Kirch <okir@monad.swb.de>
 */

#ifndef LINUX_LOCKD_BIND_H
#define LINUX_LOCKD_BIND_H

#include <linux/lockd/nlm.h>
/* need xdr-encoded error codes too, so... */
#include <linux/lockd/xdr.h>
#ifdef CONFIG_LOCKD_V4
#include <linux/lockd/xdr4.h>
#endif

/* Dummy declarations */
struct svc_rqst;
struct rpc_task;
struct rpc_clnt;

/*
 * This is the set of functions for lockd->nfsd communication
 */
struct nlmsvc_binding {
	__be32			(*fopen)(struct svc_rqst *,
						struct nfs_fh *,
						struct file **,
						int mode);
	void			(*fclose)(struct file *);
};

extern const struct nlmsvc_binding *nlmsvc_ops;

/*
 * Similar to nfs_client_initdata, but without the NFS-specific
 * rpc_ops field.
 */
struct nlmclnt_initdata {
	const char		*hostname;
	const struct sockaddr	*address;
	size_t			addrlen;
	unsigned short		protocol;
	u32			nfs_version;
	int			noresvport;
	struct net		*net;
	const struct nlmclnt_operations	*nlmclnt_ops;
	const struct cred	*cred;
};

/*
 * Functions exported by the lockd module
 */

extern struct nlm_host *nlmclnt_init(const struct nlmclnt_initdata *nlm_init);
extern void	nlmclnt_done(struct nlm_host *host);
extern struct rpc_clnt *nlmclnt_rpc_clnt(struct nlm_host *host);

/*
 * NLM client operations provide a means to modify RPC processing of NLM
 * requests.  Callbacks receive a pointer to data passed into the call to
 * nlmclnt_proc().
 */
struct nlmclnt_operations {
	/* Called on successful allocation of nlm_rqst, use for allocation or
	 * reference counting. */
	void (*nlmclnt_alloc_call)(void *);

	/* Called in rpc_task_prepare for unlock.  A return value of true
	 * indicates the callback has put the task to sleep on a waitqueue
	 * and NLM should not call rpc_call_start(). */
	bool (*nlmclnt_unlock_prepare)(struct rpc_task*, void *);

	/* Called when the nlm_rqst is freed, callbacks should clean up here */
	void (*nlmclnt_release_call)(void *);
};

extern int	nlmclnt_proc(struct nlm_host *host, int cmd, struct file_lock *fl, void *data);
extern int	lockd_up(struct net *net, const struct cred *cred);
extern void	lockd_down(struct net *net);

#endif /* LINUX_LOCKD_BIND_H */
  H   ˆl–ß=¿J
ClÊq@½q·. 
bÑ¿Ãƒeæ�_�uÐb&=LyZof¯a–Ým_J	µ5*q@=p-\m•1hßÃ     ‹      í�KsÛ8Çïó)|ßÚ*ñ¥Ça‰ÍÌN2›�gfHB6×’è�TÏ§_âÁ¤HÅ’ìˆÿªÝM Ý?(H“ yGVä¾¼ýÕó'?ÜÑ‡$Oé…wñ·‹·eBîéþâ=­Èõup�\àêÐõXæ×cÙï��_"D<Û™Çýåké˜~M–dõÔ�`XÎŠE�5�k|[ˆp$bûëÍRe0•mÜMõ%Ê§M^Ñ4–»Iµ-uùíbz·r�ð�ð§¯Ç€P��ˆ("væ	¦Û‚RåwÓ¢ÌnÖ‡Ï#ÁÆg`Ôce¤ÆÊPÀá';ó¸ÏE¾)\-Í—KÒ ÷,ð€g0<z,«±(�™ðGD@gžˆ’}–#Ý=-º®³L`˜êÝz¬š¨±j,„ Å‹Ò�yÜa™}
YÕ¾K²>Ü~p�\àêØ¯Ç²©Ë&‚cÁÅ$æb1Q�e^Ã3Ä’~¦ò¯ÍrIÊ[¡ÆIè’.ªFs«¾©ÔðHh@Ð¾M�q35ÆMŠ‘À$ñæ´	“f7·2ú=)èz›íŽV;vØ~œÊm¿&0�	L`¾ L3'u¤Q1¿ÃB^ÅÆñÅe¾®Š|©âœP–lÌkÜÉC¯³µÍgå<.ûxO»_×[{ÉÖÆ õh=Z�Ö£õhýÙ·Þœü=uòSºñLäO1jÿ)ê’{þÒBN
£Ÿ6diÚL�ß€öj—åä[þëÑ^´íE{Ñ^´÷yÛkNÆjI•/îâ®k$�Ç‹‹7tI+ª„öU»·Kï×
ËM)´OZVY.oÌ:ÅSFy¤·y¼-AKÐ´-yÆ–˜“[C—R’^“dS{áêMA>‹»Ñ±\Î— Ê Ê£ŒŒØb¾íqt[¼®Ç¯«ûúÒ»CÛ9F¶éNõ¾&xÁ^ðž	¯ŒÙjÁßH,ò™òÈ°7�ñD[Ó9Ùò¹¿ð{ ž�‘¸š
GÜˆy$ùÉÒ¶ÞÆðIˆ
á¾„ÁTj2·^�—yÈI ëU*ÞD*I'¤úRzæK‡Æ½Kñ¯&Ë)Ú×ß ø$—âd\Š|à;"Ÿ§j0GB†îÒcU‰vh<‚šeÝd9Eûš ;kº0Ò” Ý	èÌà7ÓW‚¾±Å[UBU*:4AŠ�M–S´¯	º³¦‹|M	:Ð�€Î¼Á|¤¿P"K¹�ãwj`«�Ç�â·&Ë)Ú×ß ø—âL©æøŽÈgCO†3	Í–EùÞLÌÄ&‘†yèÐx)þÓd9Eûš ;kºh¦)AºÐ™ÁÏ×ƒŸü‹=ïëšB˜Ûå›�G�â÷&Ë)Ú×ÝYÓE‘¦èN@g¿@? ‘ãt(Çiù°0ðš§¹dBüÜduÌsA¸C‡g:¬ŽíF¸—ÎtÂPwÂ…&¤Rš§y‡Æ½Kñ�&Ë)Ú×ß ø$—âôäm\Æ	>ð‘Ï†‘þsl$/¢F­7nï;4CŠM–S´¯	¾ð).ÅÙpã|à;Ÿõ
 *ÿ’L"±Â2Í-h™•b•å¥Pê)¥’H—F)”:`)3˜MÔ[(Ln&Y‘lV‹%ý*ì*[¦r!yBŠ|�J¨„J¨„J¨täJædÅV†|¤Õ¦X7u±¾êÐ¶®ìOh‚ì`;Ø[M3Ø³•0r7$$äð¤½2d,_Û .�2&ªÒu—Æ)^5YNÑ¾&øÀ§¸ÆàßIùÌ`hV†ò©™”©x52™hš²Cã!¤¸j²œ¢}Mà�;žÂ²0�¼#ã™AP¯Ë5|¡ZKª¦˜�“¤�!Å›&Ë)Ú×ß ø—âLGš|à;"ŸÍŠ‘±„ÒóÌe¬ª¶èÐx)æM–S´¯	¾ðI.Åéy#ð�ï|f04+wäËCõ²ÃXJ{Ó¡ñRüØd9Eûšà ŸäRœŒKq‚|Gä3ƒ¡^¹3žJh!=_Bûãý>†!?löS“õ�ê ß ø$—âd\Š|à;"ŸõÊ�±zÚCØ}Í`4ãÂ‹/Þekº 4Ý¥pïÿâïMÖvÉ^¨Î‚*$šT : •¼ô7BÆê¥òÏ�`ÊÎ