1
0
Files
irix-657m-src/eoe/cmd/sun/rpc.lockd/prot_lock.h
2022-09-29 17:59:04 +03:00

130 lines
2.9 KiB
C

/* @(#)prot_lock.h 1.3 91/06/25 NFSSRC4.1 */
/*
* This file consists of all structure information used by lock manager
*/
#include <rpc/rpc.h>
#include <rpcsvc/nlm_prot.h>
#include <rpcsvc/klm_prot.h>
#include "lockf.h"
typedef struct nlm_testres remote_result;
#define lstat stat.stat
#define lholder stat.nlm_testrply_u.holder
#define NLM_LOCK_RECLAIM 16
#define MAXLEN 0x7fffffff /* was ((1 << 31) -1) */
#define lck alock
#define fh_len fh.n_len
#define fh_bytes fh.n_bytes
#define oh_len oh.n_len
#define oh_bytes oh.n_bytes
#define cookie_bytes cookie.n_bytes
#define denied nlm_denied
#define nolocks nlm_denied_nolocks
#define blocking nlm_blocked
#define grace nlm_denied_grace_period
#define deadlck nlm_deadlck
/*
* warning: struct alock consists of klm_lock and nlm_lock,
* it has to be modified if either structure has been modified!!!
*/
struct alock {
netobj cookie;
/* from klm_prot.h */
char *server_name;
netobj fh;
/* from lockf.h */
struct data_lock lox;
/* addition from nlm_prot.h */
char *caller_name;
netobj oh;
/* addition from lock manager */
char *clnt_name;
};
struct reclock {
struct reclock *rnext;
struct reclock *rprev;
int (*rpctransp)();
int rel; /* true if can be freed */
netobj cookie;
bool_t block; /* F_SETLK or F_SETLKW */
bool_t exclusive; /* F_RDLCK or F_WRLCK */
bool_t reclaim; /* if reclaiming a lock after server reboot */
int state;
struct alock alock; /* lock info */
/* auxiliary structure */
SVCXPRT *transp; /* transport handle for delayed response due to */
/* blocking or grace period */
/* Used by server LM to manage threads waiting for locks */
struct {
int fd; /* shared fd of file to lock */
pid_t pid; /* pid of thread doing blocking fcntl */
int stat; /* status set by thread when fcntl returns */
struct filock *flp; /* filock struct on blocked list */
} blk;
};
typedef struct reclock reclock;
#define USES_TCP(x) ((x)->rpctransp == call_tcp)
struct reclocklist {
struct reclock *rnext;
struct reclock *rprev;
};
#define FOREACH_RECLIST(l,t) \
for (t=(l)->rnext; t!=(struct reclock *)l; t=t->rnext)
#define INIT_RECLIST(l) (l.rnext = l.rprev = (struct reclock *)&l)
/* Monitor entry */
struct lm_vnode {
struct lm_vnode *next;
char *server_name;
struct reclocklist exclusive; /* exclusive locks */
struct reclocklist shared; /* shared locks */
struct reclocklist pending; /* pending locks */
};
struct timer {
/* timer goes off when exp == curr */
int exp;
int curr;
};
/*
* msg passing structure
*/
struct msg_entry {
struct msg_entry *nxt;
struct msg_entry *prev;
int proc; /* procedure name that req is sent to; needed when replying */
reclock *req;
remote_result *reply;
struct timer t;
};
typedef struct msg_entry msg_entry;
struct priv_struct {
int pid;
int *priv_ptr;
};
/* Flag args to start_timer */
#define TIMER_MSGQ 0x1
#define TIMER_FDGC 0x2
#include "proto.h"