mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-26 00:21:17 +00:00
[PATCH] knfsd: lockd: make nlm_traverse_* more flexible
This patch makes nlm_traverse{locks,blocks,shares} and friends use a function pointer rather than a "action" enum. This function pointer is given two nlm_hosts (one given by the caller, the other taken from the lock/block/share currently visited), and is free to do with them as it wants. If it returns a non-zero value, the lockd/block/share is released. Signed-off-by: Olaf Kirch <okir@suse.de> Signed-off-by: Neil Brown <neilb@suse.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
07ba806351
commit
f2af793db0
5 changed files with 103 additions and 75 deletions
|
@ -133,13 +133,6 @@ struct nlm_block {
|
|||
struct nlm_file * b_file; /* file in question */
|
||||
};
|
||||
|
||||
/*
|
||||
* Valid actions for nlmsvc_traverse_files
|
||||
*/
|
||||
#define NLM_ACT_CHECK 0 /* check for locks */
|
||||
#define NLM_ACT_MARK 1 /* mark & sweep */
|
||||
#define NLM_ACT_UNLOCK 2 /* release all locks */
|
||||
|
||||
/*
|
||||
* Global variables
|
||||
*/
|
||||
|
@ -182,6 +175,12 @@ struct nsm_handle *nsm_find(const struct sockaddr_in *, const char *, int);
|
|||
void nsm_release(struct nsm_handle *);
|
||||
|
||||
|
||||
/*
|
||||
* This is used in garbage collection and resource reclaim
|
||||
* A return value != 0 means destroy the lock/block/share
|
||||
*/
|
||||
typedef int (*nlm_host_match_fn_t)(struct nlm_host *cur, struct nlm_host *ref);
|
||||
|
||||
/*
|
||||
* Server-side lock handling
|
||||
*/
|
||||
|
@ -193,7 +192,7 @@ u32 nlmsvc_testlock(struct nlm_file *, struct nlm_lock *,
|
|||
u32 nlmsvc_cancel_blocked(struct nlm_file *, struct nlm_lock *);
|
||||
unsigned long nlmsvc_retry_blocked(void);
|
||||
void nlmsvc_traverse_blocks(struct nlm_host *, struct nlm_file *,
|
||||
int action);
|
||||
nlm_host_match_fn_t match);
|
||||
void nlmsvc_grant_reply(struct svc_rqst *, struct nlm_cookie *, u32);
|
||||
|
||||
/*
|
||||
|
|
|
@ -25,6 +25,7 @@ u32 nlmsvc_share_file(struct nlm_host *, struct nlm_file *,
|
|||
struct nlm_args *);
|
||||
u32 nlmsvc_unshare_file(struct nlm_host *, struct nlm_file *,
|
||||
struct nlm_args *);
|
||||
void nlmsvc_traverse_shares(struct nlm_host *, struct nlm_file *, int);
|
||||
void nlmsvc_traverse_shares(struct nlm_host *, struct nlm_file *,
|
||||
nlm_host_match_fn_t);
|
||||
|
||||
#endif /* LINUX_LOCKD_SHARE_H */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue