Lines Matching refs:nflp

3103 	struct nfs_file_lock *nflp;
3110 TAILQ_FOREACH(nflp, &nlop->nlo_locks, nfl_lolink) {
3111 if (newnflp->nfl_start < nflp->nfl_start)
3114 if (nflp)
3115 TAILQ_INSERT_BEFORE(nflp, newnflp, nfl_lolink);
3128 struct nfs_file_lock *nflp = NULL;
3132 nflp = &nlop->nlo_alock;
3133 nflp->nfl_owner = nlop;
3136 if (!nflp) {
3137 MALLOC(nflp, struct nfs_file_lock *, sizeof(struct nfs_file_lock), M_TEMP, M_WAITOK);
3138 if (!nflp)
3140 bzero(nflp, sizeof(*nflp));
3141 nflp->nfl_flags |= NFS_FILE_LOCK_ALLOC;
3142 nflp->nfl_owner = nlop;
3145 return (nflp);
3152 nfs_file_lock_destroy(struct nfs_file_lock *nflp)
3154 struct nfs_lock_owner *nlop = nflp->nfl_owner;
3156 if (nflp->nfl_flags & NFS_FILE_LOCK_ALLOC) {
3157 nflp->nfl_owner = NULL;
3158 FREE(nflp, M_TEMP);
3161 bzero(nflp, sizeof(nflp));
3203 struct nfs_file_lock *nflp,
3209 struct nfs_lock_owner *nlop = nflp->nfl_owner;
3224 locktype = (nflp->nfl_flags & NFS_FILE_LOCK_WAIT) ?
3225 ((nflp->nfl_type == F_WRLCK) ?
3228 ((nflp->nfl_type == F_WRLCK) ?
3272 nfsm_chain_add_64(error, &nmreq, nflp->nfl_start);
3273 nfsm_chain_add_64(error, &nmreq, NFS_LOCK_LENGTH(nflp->nfl_start, nflp->nfl_end));
3498 struct nfs_file_lock *nflp;
3511 TAILQ_FOREACH(nflp, &np->n_locks, nfl_link) {
3512 if (nflp->nfl_flags & (NFS_FILE_LOCK_BLOCKED|NFS_FILE_LOCK_DEAD))
3514 if ((start <= nflp->nfl_end) && (end >= nflp->nfl_start) &&
3515 ((fl->l_type == F_WRLCK) || (nflp->nfl_type == F_WRLCK)))
3518 if (nflp) {
3520 fl->l_type = nflp->nfl_type;
3521 fl->l_pid = (nflp->nfl_flags & NFS_FILE_LOCK_STYLE_FLOCK) ? -1 : nflp->nfl_owner->nlo_pid;
3522 fl->l_start = nflp->nfl_start;
3523 fl->l_len = NFS_FLOCK_LENGTH(nflp->nfl_start, nflp->nfl_end);
3572 struct nfs_file_lock *newnflp, *nflp, *nflp2 = NULL, *nextnflp, *flocknflp = NULL;
3604 nflp = TAILQ_FIRST(&nlop->nlo_locks);
3605 if (nflp && ((nflp->nfl_flags & NFS_FILE_LOCK_STYLE_MASK) != NFS_FILE_LOCK_STYLE_FLOCK))
3606 nflp = NULL;
3607 if (nflp && (nflp->nfl_type != F_RDLCK))
3608 nflp = NULL;
3609 flocknflp = nflp;
3641 for (nflp = TAILQ_NEXT(newnflp, nfl_link); nflp; nflp = nextnflp) {
3642 nextnflp = TAILQ_NEXT(nflp, nfl_link);
3643 if (!nfs_file_lock_conflict(newnflp, nflp, &willsplit))
3651 if (nflp->nfl_blockcnt == UINT_MAX) {
3655 nflp->nfl_blockcnt++;
3673 if (!nfs_file_lock_conflict(newnflp, nflp, NULL))
3676 msleep(nflp, &np->n_openlock, slpflag, "nfs_advlock_setlock_blocked", &ts);
3690 } while (!error && nfs_file_lock_conflict(newnflp, nflp, NULL));
3691 nflp->nfl_blockcnt--;
3692 if ((nflp->nfl_flags & NFS_FILE_LOCK_DEAD) && !nflp->nfl_blockcnt) {
3693 TAILQ_REMOVE(&np->n_locks, nflp, nfl_link);
3694 nfs_file_lock_destroy(nflp);
3859 TAILQ_FOREACH_SAFE(nflp, &np->n_locks, nfl_link, nextnflp) {
3860 if (nflp == newnflp)
3862 if (nflp->nfl_flags & (NFS_FILE_LOCK_BLOCKED|NFS_FILE_LOCK_DEAD))
3864 if (nflp->nfl_owner != nlop)
3866 if ((newnflp->nfl_flags & NFS_FILE_LOCK_STYLE_MASK) != (nflp->nfl_flags & NFS_FILE_LOCK_STYLE_MASK))
3868 if ((newnflp->nfl_start > nflp->nfl_end) || (newnflp->nfl_end < nflp->nfl_start))
3871 if ((newnflp->nfl_start <= nflp->nfl_start) && (newnflp->nfl_end >= nflp->nfl_end)) {
3873 nflp->nfl_flags |= NFS_FILE_LOCK_DEAD;
3875 TAILQ_REMOVE(&nlop->nlo_locks, nflp, nfl_lolink);
3878 } else if ((newnflp->nfl_start > nflp->nfl_start) && (newnflp->nfl_end < nflp->nfl_end)) {
3882 nflp2->nfl_flags |= (nflp->nfl_flags & (NFS_FILE_LOCK_STYLE_MASK|NFS_FILE_LOCK_DELEGATED));
3883 nflp2->nfl_type = nflp->nfl_type;
3885 nflp2->nfl_end = nflp->nfl_end;
3886 nflp->nfl_end = newnflp->nfl_start - 1;
3887 TAILQ_INSERT_AFTER(&np->n_locks, nflp, nflp2, nfl_link);
3891 } else if (newnflp->nfl_start > nflp->nfl_start) {
3893 nflp->nfl_end = newnflp->nfl_start - 1;
3894 } else if (newnflp->nfl_end < nflp->nfl_end) {
3896 nflp->nfl_start = newnflp->nfl_end + 1;
3898 if (nflp->nfl_blockcnt) {
3900 wakeup(nflp);
3901 } else if (nflp->nfl_flags & NFS_FILE_LOCK_DEAD) {
3902 /* remove nflp from lock list and destroy */
3903 TAILQ_REMOVE(&np->n_locks, nflp, nfl_link);
3904 nfs_file_lock_destroy(nflp);
3924 TAILQ_FOREACH_SAFE(nflp, &np->n_locks, nfl_link, nextnflp) {
3925 if (nflp->nfl_flags & (NFS_FILE_LOCK_BLOCKED|NFS_FILE_LOCK_DEAD))
3927 if (nflp->nfl_owner != nlop)
3929 if ((nflp->nfl_flags & NFS_FILE_LOCK_STYLE_MASK) != NFS_FILE_LOCK_STYLE_POSIX)
3931 if (((coalnflp = TAILQ_PREV(nflp, nfs_file_lock_queue, nfl_lolink))) &&
3933 (coalnflp->nfl_type == nflp->nfl_type) &&
3934 (coalnflp->nfl_end == (nflp->nfl_start - 1))) {
3935 coalnflp->nfl_end = nflp->nfl_end;
3936 nflp->nfl_flags |= NFS_FILE_LOCK_DEAD;
3938 TAILQ_REMOVE(&nlop->nlo_locks, nflp, nfl_lolink);
3940 } else if (((coalnflp = TAILQ_NEXT(nflp, nfl_lolink))) &&
3942 (coalnflp->nfl_type == nflp->nfl_type) &&
3943 (coalnflp->nfl_start == (nflp->nfl_end + 1))) {
3944 coalnflp->nfl_start = nflp->nfl_start;
3945 nflp->nfl_flags |= NFS_FILE_LOCK_DEAD;
3947 TAILQ_REMOVE(&nlop->nlo_locks, nflp, nfl_lolink);
3950 if (!(nflp->nfl_flags & NFS_FILE_LOCK_DEAD))
3952 if (nflp->nfl_blockcnt) {
3954 wakeup(nflp);
3956 /* remove nflp from lock list and destroy */
3957 TAILQ_REMOVE(&np->n_locks, nflp, nfl_link);
3958 nfs_file_lock_destroy(nflp);
3986 struct nfs_file_lock *nflp, *nextnflp, *newnflp = NULL;
4015 TAILQ_FOREACH_SAFE(nflp, &np->n_locks, nfl_link, nextnflp) {
4016 if (nflp->nfl_flags & (NFS_FILE_LOCK_BLOCKED|NFS_FILE_LOCK_DEAD))
4018 if (nflp->nfl_owner != nlop)
4020 if ((nflp->nfl_flags & NFS_FILE_LOCK_STYLE_MASK) != style)
4022 if ((start > nflp->nfl_end) || (end < nflp->nfl_start))
4024 if ((start > nflp->nfl_start) && (end < nflp->nfl_end)) {
4057 ((nflp = TAILQ_FIRST(&nlop->nlo_locks))) &&
4058 ((nflp->nfl_flags & NFS_FILE_LOCK_STYLE_MASK) == NFS_FILE_LOCK_STYLE_FLOCK))
4061 ((nflp = TAILQ_FIRST(&nlop->nlo_locks))) &&
4062 ((nflp->nfl_flags & NFS_FILE_LOCK_STYLE_MASK) == NFS_FILE_LOCK_STYLE_FLOCK) &&
4063 ((nflp = TAILQ_NEXT(nflp, nfl_lolink))) &&
4064 ((nflp->nfl_flags & NFS_FILE_LOCK_STYLE_MASK) == NFS_FILE_LOCK_STYLE_POSIX)) {
4068 while (!delegated && nflp) {
4069 if ((nflp->nfl_flags & NFS_FILE_LOCK_STYLE_MASK) == NFS_FILE_LOCK_STYLE_POSIX) {
4072 error = nmp->nm_funcs->nf_unlock_rpc(np, nlop, type, s, nflp->nfl_start-1, 0,
4082 s = nflp->nfl_end+1;
4084 nflp = TAILQ_NEXT(nflp, nfl_lolink);
4102 TAILQ_FOREACH_SAFE(nflp, &np->n_locks, nfl_link, nextnflp) {
4103 if (nflp->nfl_flags & (NFS_FILE_LOCK_BLOCKED|NFS_FILE_LOCK_DEAD))
4105 if (nflp->nfl_owner != nlop)
4107 if ((nflp->nfl_flags & NFS_FILE_LOCK_STYLE_MASK) != style)
4109 if ((start > nflp->nfl_end) || (end < nflp->nfl_start))
4112 if ((start <= nflp->nfl_start) && (end >= nflp->nfl_end)) {
4114 if (send_unlock_rpcs && !(nflp->nfl_flags & NFS_FILE_LOCK_DELEGATED)) {
4116 error = nmp->nm_funcs->nf_unlock_rpc(np, nlop, nflp->nfl_type, nflp->nfl_start, nflp->nfl_end, 0,
4125 nextnflp = TAILQ_NEXT(nflp, nfl_link);
4128 nflp->nfl_flags |= NFS_FILE_LOCK_DEAD;
4130 TAILQ_REMOVE(&nlop->nlo_locks, nflp, nfl_lolink);
4133 } else if ((start > nflp->nfl_start) && (end < nflp->nfl_end)) {
4136 if (send_unlock_rpcs && !(nflp->nfl_flags & NFS_FILE_LOCK_DELEGATED)) {
4138 error = nmp->nm_funcs->nf_unlock_rpc(np, nlop, nflp->nfl_type, start, end, 0,
4150 newnflp->nfl_flags |= (nflp->nfl_flags & (NFS_FILE_LOCK_STYLE_MASK|NFS_FILE_LOCK_DELEGATED));
4151 newnflp->nfl_type = nflp->nfl_type;
4153 newnflp->nfl_end = nflp->nfl_end;
4154 nflp->nfl_end = start - 1;
4155 TAILQ_INSERT_AFTER(&np->n_locks, nflp, newnflp, nfl_link);
4159 } else if (start > nflp->nfl_start) {
4161 if (send_unlock_rpcs && !(nflp->nfl_flags & NFS_FILE_LOCK_DELEGATED)) {
4163 error = nmp->nm_funcs->nf_unlock_rpc(np, nlop, nflp->nfl_type, start, nflp->nfl_end, 0,
4172 nextnflp = TAILQ_NEXT(nflp, nfl_link);
4175 nflp->nfl_end = start - 1;
4176 } else if (end < nflp->nfl_end) {
4178 if (send_unlock_rpcs && !(nflp->nfl_flags & NFS_FILE_LOCK_DELEGATED)) {
4180 error = nmp->nm_funcs->nf_unlock_rpc(np, nlop, nflp->nfl_type, nflp->nfl_start, end, 0,
4189 nextnflp = TAILQ_NEXT(nflp, nfl_link);
4192 nflp->nfl_start = end + 1;
4194 if (nflp->nfl_blockcnt) {
4196 wakeup(nflp);
4197 } else if (nflp->nfl_flags & NFS_FILE_LOCK_DEAD) {
4198 /* remove nflp from lock list and destroy */
4199 TAILQ_REMOVE(&np->n_locks, nflp, nfl_link);
4200 nfs_file_lock_destroy(nflp);
5561 struct nfs_file_lock *nflp, *nextnflp;
5692 TAILQ_FOREACH_SAFE(nflp, &nlop->nlo_locks, nfl_lolink, nextnflp) {
5694 if (nflp->nfl_flags & (NFS_FILE_LOCK_DEAD|NFS_FILE_LOCK_BLOCKED))
5697 if (!(nflp->nfl_flags & NFS_FILE_LOCK_DELEGATED))
5699 error = nmp->nm_funcs->nf_setlock_rpc(nofp->nof_np, nofp, nflp, 0, flags, current_thread(), noop->noo_cred);
5702 nflp->nfl_start, nflp->nfl_end, error, kauth_cred_getuid(nofp->nof_owner->noo_cred));
5707 // nflp->nfl_start, nflp->nfl_end, kauth_cred_getuid(nofp->nof_owner->noo_cred));
5755 struct nfs_file_lock *nflp, *nextnflp;
5758 TAILQ_FOREACH_SAFE(nflp, &np->n_locks, nfl_link, nextnflp) {
5760 if (nflp->nfl_flags & (NFS_FILE_LOCK_DEAD|NFS_FILE_LOCK_BLOCKED))
5763 if (!force && nmp && !(nflp->nfl_flags & NFS_FILE_LOCK_DELEGATED))
5764 nmp->nm_funcs->nf_unlock_rpc(np, nflp->nfl_owner, F_WRLCK, nflp->nfl_start, nflp->nfl_end, R_RECOVER,
5765 NULL, nflp->nfl_owner->nlo_open_owner->noo_cred);
5768 nflp->nfl_flags |= NFS_FILE_LOCK_DEAD;
5769 lck_mtx_lock(&nflp->nfl_owner->nlo_lock);
5770 TAILQ_REMOVE(&nflp->nfl_owner->nlo_locks, nflp, nfl_lolink);
5771 lck_mtx_unlock(&nflp->nfl_owner->nlo_lock);
5772 if (nflp->nfl_blockcnt) {
5774 wakeup(nflp);
5776 /* remove nflp from lock list and destroy */
5777 TAILQ_REMOVE(&np->n_locks, nflp, nfl_link);
5778 nfs_file_lock_destroy(nflp);