/* * linux/fs/lockd/svcshare.c * * Management of DOS shares. * * Copyright (C) 1996 Olaf Kirch */ #include #include #include #include #include #include #include #include static inline int nlm_cmp_owner(struct nlm_share *share, struct xdr_netobj *oh) { return share->s_owner.len == oh->len && !memcmp(share->s_owner.data, oh->data, oh->len); } __be32 nlmsvc_share_file(struct nlm_host *host, struct nlm_file *file, struct nlm_args *argp) { struct nlm_share *share; struct xdr_netobj *oh = &argp->lock.oh; u8 *ohdata; for (share = file->f_shares; share; share = share->s_next) { if (share->s_host == host && nlm_cmp_owner(share, oh)) goto update; if ((argp->fsm_access & share->s_mode) || (argp->fsm_mode & share->s_access )) return nlm_lck_denied; } share = kmalloc(sizeof(*share) + oh->len, GFP_KERNEL); if (share == NULL) return nlm_lck_denied_nolocks; /* Copy owner handle */ ohdata = (u8 *) (share + 1); memcpy(ohdata, oh->data, oh->len); share->s_file = file; share->s_host = host; share->s_owner.data = ohdata; share->s_owner.len = oh->len; share->s_next = file->f_shares; file->f_shares = share; update: share->s_access = argp->fsm_access; share->s_mode = argp->fsm_mode; return nlm_granted; } /* * Delete a share. */ __be32 nlmsvc_unshare_file(struct nlm_host *host, struct nlm_file *file, struct nlm_args *argp) { struct nlm_share *share, **shpp; struct xdr_netobj *oh = &argp->lock.oh; for (shpp = &file->f_shares; (share = *shpp) != NULL; shpp = &share->s_next) { if (share->s_host == host && nlm_cmp_owner(share, oh)) { *shpp = share->s_next; kfree(share); return nlm_granted; } } /* X/Open spec says return success even if there was no * corresponding share. */ return nlm_granted; } /* * Traverse all shares for a given file, and delete * those owned by the given (type of) host */ void nlmsvc_traverse_shares(struct nlm_host *host, struct nlm_file *file, nlm_host_match_fn_t match) { struct nlm_share *share, **shpp; shpp = &file->f_shares; while ((share = *shpp) != NULL) { if (match(share->s_host, host)) { *shpp = share->s_next; kfree(share); continue; } shpp = &share->s_next; } } ' action='/cgit.cgi/linux/net-next.git/log/include/net/sctp/command.h'>
diff options
context:
space:
mode:
authorRichard Guy Briggs <rbriggs@redhat.com>2016-11-29 16:53:23 -0500
committerPaul Moore <paul@paul-moore.com>2016-12-14 13:06:04 -0500
commit55a6f170a413cd8dc7a3a52e5a326e1a87579b4f (patch)
tree3e2336faf3b6e29962b20095df6d3d6c4a415608 /include/net/sctp/command.h
parent8fae47705685fcaa75a1fe4c8c3e18300a702979 (diff)
audit: move kaudit thread start from auditd registration to kaudit init (#2)
Richard made this change some time ago but Eric backed it out because the rest of the supporting code wasn't ready. In order to move the netlink multicast send to kauditd_thread we need to ensure the kauditd_thread is always running, so restore commit 6ff5e459 ("audit: move kaudit thread start from auditd registration to kaudit init"). Signed-off-by: Richard Guy Briggs <rbriggs@redhat.com> [PM: brought forward and merged based on Richard's old patch] Signed-off-by: Paul Moore <paul@paul-moore.com>
Diffstat (limited to 'include/net/sctp/command.h')