Lines Matching refs:nofp

1987  * Internally, allow using a provisional nodeless nofp (passed in via *nofpp)
1989 * officially add the provisional nofp to the node once the node is created.
2000 struct nfs_open_file *nofp = NULL, *nofp2, *newnofp = NULL;
2008 nofp = nofp2;
2023 if (!nofp && !*nofpp && !newnofp && alloc) {
2040 if (!nofp) {
2043 nofp = *nofpp;
2045 nofp = newnofp;
2047 if (nofp && np)
2048 TAILQ_INSERT_HEAD(&np->n_opens, nofp, nof_link);
2053 if (alloc && newnofp && (nofp != newnofp))
2056 *nofpp = nofp;
2057 return (nofp ? 0 : ESRCH);
2064 nfs_open_file_destroy(struct nfs_open_file *nofp)
2066 lck_mtx_lock(&nofp->nof_owner->noo_lock);
2067 TAILQ_REMOVE(&nofp->nof_owner->noo_opens, nofp, nof_oolink);
2068 lck_mtx_unlock(&nofp->nof_owner->noo_lock);
2069 nfs_open_owner_rele(nofp->nof_owner);
2070 lck_mtx_destroy(&nofp->nof_lock, nfs_open_grp);
2071 FREE(nofp, M_TEMP);
2079 nfs_open_file_set_busy(struct nfs_open_file *nofp, thread_t thd)
2085 nmp = nofp->nof_owner->noo_mount;
2090 lck_mtx_lock(&nofp->nof_lock);
2091 while (nofp->nof_flags & NFS_OPEN_FILE_BUSY) {
2094 nofp->nof_flags |= NFS_OPEN_FILE_WANT;
2095 msleep(nofp, &nofp->nof_lock, slpflag, "nfs_open_file_set_busy", &ts);
2099 nofp->nof_flags |= NFS_OPEN_FILE_BUSY;
2100 lck_mtx_unlock(&nofp->nof_lock);
2110 nfs_open_file_clear_busy(struct nfs_open_file *nofp)
2114 lck_mtx_lock(&nofp->nof_lock);
2115 if (!(nofp->nof_flags & NFS_OPEN_FILE_BUSY))
2117 wanted = (nofp->nof_flags & NFS_OPEN_FILE_WANT);
2118 nofp->nof_flags &= ~(NFS_OPEN_FILE_BUSY|NFS_OPEN_FILE_WANT);
2119 lck_mtx_unlock(&nofp->nof_lock);
2121 wakeup(nofp);
2128 nfs_open_file_add_open(struct nfs_open_file *nofp, uint32_t accessMode, uint32_t denyMode, int delegated)
2130 lck_mtx_lock(&nofp->nof_lock);
2131 nofp->nof_access |= accessMode;
2132 nofp->nof_deny |= denyMode;
2137 nofp->nof_d_r++;
2139 nofp->nof_d_w++;
2141 nofp->nof_d_rw++;
2144 nofp->nof_d_r_dw++;
2146 nofp->nof_d_w_dw++;
2148 nofp->nof_d_rw_dw++;
2151 nofp->nof_d_r_drw++;
2153 nofp->nof_d_w_drw++;
2155 nofp->nof_d_rw_drw++;
2160 nofp->nof_r++;
2162 nofp->nof_w++;
2164 nofp->nof_rw++;
2167 nofp->nof_r_dw++;
2169 nofp->nof_w_dw++;
2171 nofp->nof_rw_dw++;
2174 nofp->nof_r_drw++;
2176 nofp->nof_w_drw++;
2178 nofp->nof_rw_drw++;
2182 nofp->nof_opencnt++;
2183 lck_mtx_unlock(&nofp->nof_lock);
2192 struct nfs_open_file *nofp,
2203 *newAccessMode = nofp->nof_access;
2204 *newDenyMode = nofp->nof_deny;
2207 (nofp->nof_access & NFS_OPEN_SHARE_ACCESS_READ) &&
2208 ((nofp->nof_r + nofp->nof_d_r +
2209 nofp->nof_rw + nofp->nof_d_rw +
2210 nofp->nof_r_dw + nofp->nof_d_r_dw +
2211 nofp->nof_rw_dw + nofp->nof_d_rw_dw +
2212 nofp->nof_r_drw + nofp->nof_d_r_drw +
2213 nofp->nof_rw_dw + nofp->nof_d_rw_dw) == 1))
2216 (nofp->nof_access & NFS_OPEN_SHARE_ACCESS_WRITE) &&
2217 ((nofp->nof_w + nofp->nof_d_w +
2218 nofp->nof_rw + nofp->nof_d_rw +
2219 nofp->nof_w_dw + nofp->nof_d_w_dw +
2220 nofp->nof_rw_dw + nofp->nof_d_rw_dw +
2221 nofp->nof_w_drw + nofp->nof_d_w_drw +
2222 nofp->nof_rw_dw + nofp->nof_d_rw_dw) == 1))
2225 (nofp->nof_deny & NFS_OPEN_SHARE_DENY_READ) &&
2226 ((nofp->nof_r_drw + nofp->nof_d_r_drw +
2227 nofp->nof_w_drw + nofp->nof_d_w_drw +
2228 nofp->nof_rw_drw + nofp->nof_d_rw_drw) == 1))
2231 (nofp->nof_deny & NFS_OPEN_SHARE_DENY_WRITE) &&
2232 ((nofp->nof_r_drw + nofp->nof_d_r_drw +
2233 nofp->nof_w_drw + nofp->nof_d_w_drw +
2234 nofp->nof_rw_drw + nofp->nof_d_rw_drw +
2235 nofp->nof_r_dw + nofp->nof_d_r_dw +
2236 nofp->nof_w_dw + nofp->nof_d_w_dw +
2237 nofp->nof_rw_dw + nofp->nof_d_rw_dw) == 1))
2243 *delegated = (nofp->nof_d_r != 0);
2245 *delegated = (nofp->nof_d_w != 0);
2247 *delegated = (nofp->nof_d_rw != 0);
2252 *delegated = (nofp->nof_d_r_dw != 0);
2254 *delegated = (nofp->nof_d_w_dw != 0);
2256 *delegated = (nofp->nof_d_rw_dw != 0);
2261 *delegated = (nofp->nof_d_r_drw != 0);
2263 *delegated = (nofp->nof_d_w_drw != 0);
2265 *delegated = (nofp->nof_d_rw_drw != 0);
2275 nfs_open_file_remove_open(struct nfs_open_file *nofp, uint32_t accessMode, uint32_t denyMode)
2280 lck_mtx_lock(&nofp->nof_lock);
2281 nfs_open_file_remove_open_find(nofp, accessMode, denyMode, &newAccessMode, &newDenyMode, &delegated);
2287 if (nofp->nof_d_r == 0)
2288 NP(nofp->nof_np, "nfs: open(R) delegated count underrun, %d", kauth_cred_getuid(nofp->nof_owner->noo_cred));
2290 nofp->nof_d_r--;
2292 if (nofp->nof_r == 0)
2293 NP(nofp->nof_np, "nfs: open(R) count underrun, %d", kauth_cred_getuid(nofp->nof_owner->noo_cred));
2295 nofp->nof_r--;
2299 if (nofp->nof_d_w == 0)
2300 NP(nofp->nof_np, "nfs: open(W) delegated count underrun, %d", kauth_cred_getuid(nofp->nof_owner->noo_cred));
2302 nofp->nof_d_w--;
2304 if (nofp->nof_w == 0)
2305 NP(nofp->nof_np, "nfs: open(W) count underrun, %d", kauth_cred_getuid(nofp->nof_owner->noo_cred));
2307 nofp->nof_w--;
2311 if (nofp->nof_d_rw == 0)
2312 NP(nofp->nof_np, "nfs: open(RW) delegated count underrun, %d", kauth_cred_getuid(nofp->nof_owner->noo_cred));
2314 nofp->nof_d_rw--;
2316 if (nofp->nof_rw == 0)
2317 NP(nofp->nof_np, "nfs: open(RW) count underrun, %d", kauth_cred_getuid(nofp->nof_owner->noo_cred));
2319 nofp->nof_rw--;
2325 if (nofp->nof_d_r_dw == 0)
2326 NP(nofp->nof_np, "nfs: open(R,DW) delegated count underrun, %d", kauth_cred_getuid(nofp->nof_owner->noo_cred));
2328 nofp->nof_d_r_dw--;
2330 if (nofp->nof_r_dw == 0)
2331 NP(nofp->nof_np, "nfs: open(R,DW) count underrun, %d", kauth_cred_getuid(nofp->nof_owner->noo_cred));
2333 nofp->nof_r_dw--;
2337 if (nofp->nof_d_w_dw == 0)
2338 NP(nofp->nof_np, "nfs: open(W,DW) delegated count underrun, %d", kauth_cred_getuid(nofp->nof_owner->noo_cred));
2340 nofp->nof_d_w_dw--;
2342 if (nofp->nof_w_dw == 0)
2343 NP(nofp->nof_np, "nfs: open(W,DW) count underrun, %d", kauth_cred_getuid(nofp->nof_owner->noo_cred));
2345 nofp->nof_w_dw--;
2349 if (nofp->nof_d_rw_dw == 0)
2350 NP(nofp->nof_np, "nfs: open(RW,DW) delegated count underrun, %d", kauth_cred_getuid(nofp->nof_owner->noo_cred));
2352 nofp->nof_d_rw_dw--;
2354 if (nofp->nof_rw_dw == 0)
2355 NP(nofp->nof_np, "nfs: open(RW,DW) count underrun, %d", kauth_cred_getuid(nofp->nof_owner->noo_cred));
2357 nofp->nof_rw_dw--;
2363 if (nofp->nof_d_r_drw == 0)
2364 NP(nofp->nof_np, "nfs: open(R,DRW) delegated count underrun, %d", kauth_cred_getuid(nofp->nof_owner->noo_cred));
2366 nofp->nof_d_r_drw--;
2368 if (nofp->nof_r_drw == 0)
2369 NP(nofp->nof_np, "nfs: open(R,DRW) count underrun, %d", kauth_cred_getuid(nofp->nof_owner->noo_cred));
2371 nofp->nof_r_drw--;
2375 if (nofp->nof_d_w_drw == 0)
2376 NP(nofp->nof_np, "nfs: open(W,DRW) delegated count underrun, %d", kauth_cred_getuid(nofp->nof_owner->noo_cred));
2378 nofp->nof_d_w_drw--;
2380 if (nofp->nof_w_drw == 0)
2381 NP(nofp->nof_np, "nfs: open(W,DRW) count underrun, %d", kauth_cred_getuid(nofp->nof_owner->noo_cred));
2383 nofp->nof_w_drw--;
2387 if (nofp->nof_d_rw_drw == 0)
2388 NP(nofp->nof_np, "nfs: open(RW,DRW) delegated count underrun, %d", kauth_cred_getuid(nofp->nof_owner->noo_cred));
2390 nofp->nof_d_rw_drw--;
2392 if (nofp->nof_rw_drw == 0)
2393 NP(nofp->nof_np, "nfs: open(RW,DRW) count underrun, %d", kauth_cred_getuid(nofp->nof_owner->noo_cred));
2395 nofp->nof_rw_drw--;
2401 nofp->nof_access = newAccessMode;
2402 nofp->nof_deny = newDenyMode;
2403 nofp->nof_opencnt--;
2404 lck_mtx_unlock(&nofp->nof_lock);
2421 struct nfs_open_file *nofp = NULL;
2434 (nfs_open_file_find(np, noop, &nofp, 0, 0, 0) == 0) &&
2435 !(nofp->nof_flags & NFS_OPEN_FILE_LOST) &&
2436 nofp->nof_access) {
2438 if (nofp->nof_flags & NFS_OPEN_FILE_REOPEN)
2439 nfs4_reopen(nofp, thd);
2440 if (!(nofp->nof_flags & NFS_OPEN_FILE_LOST))
2441 s = &nofp->nof_stateid;
2470 struct nfs_open_file *nofp,
2540 nfs_open_file_add_open(nofp, accessMode, denyMode, 1);
2559 struct nfs_open_file *nofp,
2585 error = nfs4_open_delegated(np, nofp, accessMode, denyMode, ctx);
2632 error = nfs4_open_rpc(nofp, ctx, &cn, NULL, dvp, &vp, NFS_OPEN_NOCREATE, accessMode, denyMode);
2643 nfs_open_file_add_open(nofp, accessMode, denyMode, 0);
2669 struct nfs_open_file *nofp = NULL;
2707 error = nfs_open_file_find(np, noop, &nofp, 0, 0, 1);
2708 if (error || (!error && (nofp->nof_flags & NFS_OPEN_FILE_LOST))) {
2712 if (!error && (nofp->nof_flags & NFS_OPEN_FILE_REOPEN)) {
2714 error = nfs4_reopen(nofp, NULL);
2715 nofp = NULL;
2720 error = nfs_open_file_set_busy(nofp, NULL);
2722 nofp = NULL;
2734 if (!nofp->nof_access) {
2743 nfs_open_file_add_open(nofp, NFS_OPEN_SHARE_ACCESS_READ, NFS_OPEN_SHARE_DENY_NONE, 0);
2746 error = nfs4_open(np, nofp, NFS_OPEN_SHARE_ACCESS_READ, NFS_OPEN_SHARE_DENY_NONE, ctx);
2749 nofp->nof_flags |= NFS_OPEN_FILE_NEEDCLOSE;
2756 if (nofp->nof_d_rw || nofp->nof_d_rw_dw || nofp->nof_d_rw_drw) {
2758 if (nofp->nof_d_rw)
2760 else if (nofp->nof_d_rw_dw)
2762 else if (nofp->nof_d_rw_drw)
2764 } else if (nofp->nof_rw || nofp->nof_rw_dw || nofp->nof_rw_drw) {
2766 if (nofp->nof_rw)
2768 else if (nofp->nof_rw_dw)
2770 else if (nofp->nof_rw_drw)
2776 if (nofp->nof_d_r || nofp->nof_d_r_dw || nofp->nof_d_r_drw) {
2778 if (nofp->nof_d_r)
2780 else if (nofp->nof_d_r_dw)
2782 else if (nofp->nof_d_r_drw)
2784 } else if (nofp->nof_r || nofp->nof_r_dw || nofp->nof_r_drw) {
2786 if (nofp->nof_r)
2788 else if (nofp->nof_r_dw)
2790 else if (nofp->nof_r_drw)
2804 if ((nofp->nof_mmap_access > accessMode) ||
2805 ((nofp->nof_mmap_access == accessMode) && (nofp->nof_mmap_deny <= denyMode)))
2809 if (nofp->nof_mmap_access) {
2810 error = nfs_close(np, nofp, nofp->nof_mmap_access, nofp->nof_mmap_deny, ctx);
2813 NP(np, "nfs_vnop_mmap: close of previous mmap mode failed: %d, %d", error, kauth_cred_getuid(nofp->nof_owner->noo_cred));
2814 NP(np, "nfs_vnop_mmap: update, close error %d, %d", error, kauth_cred_getuid(nofp->nof_owner->noo_cred));
2817 nofp->nof_mmap_access = nofp->nof_mmap_deny = 0;
2820 nfs_open_file_add_open(nofp, accessMode, denyMode, delegated);
2821 nofp->nof_mmap_access = accessMode;
2822 nofp->nof_mmap_deny = denyMode;
2825 if (nofp)
2826 nfs_open_file_clear_busy(nofp);
2828 nofp = NULL;
2869 struct nfs_open_file *nofp = NULL;
2904 TAILQ_FOREACH(nofp, &np->n_opens, nof_link) {
2905 if (!nofp->nof_mmap_access)
2908 if (nofp->nof_flags & NFS_OPEN_FILE_REOPEN) {
2910 error = nfs4_reopen(nofp, NULL);
2915 error = nfs_open_file_set_busy(nofp, NULL);
2920 if (nofp->nof_mmap_access) {
2921 error = nfs_close(np, nofp, nofp->nof_mmap_access, nofp->nof_mmap_deny, ctx);
2924 NP(np, "nfs_vnop_mnomap: close of mmap mode failed: %d, %d", error, kauth_cred_getuid(nofp->nof_owner->noo_cred));
2925 nofp->nof_mmap_access = nofp->nof_mmap_deny = 0;
2928 NP(np, "nfs_vnop_mnomap: error %d, %d", error, kauth_cred_getuid(nofp->nof_owner->noo_cred));
2930 nfs_open_file_clear_busy(nofp);
3202 struct nfs_open_file *nofp,
3232 error = nfs_open_file_set_busy(nofp, thd);
3235 error = nfs_open_owner_set_busy(nofp->nof_owner, thd);
3237 nfs_open_file_clear_busy(nofp);
3241 nfs_open_owner_ref(nofp->nof_owner);
3242 nlop->nlo_open_owner = nofp->nof_owner;
3248 nfs_open_owner_clear_busy(nofp->nof_owner);
3249 nfs_open_file_clear_busy(nofp);
3276 nfsm_chain_add_32(error, &nmreq, nofp->nof_owner->noo_seqid);
3277 nfsm_chain_add_stateid(error, &nmreq, &nofp->nof_stateid);
3300 nfs_owner_seqid_increment(newlocker ? nofp->nof_owner : NULL, nlop, error);
3312 nfs_open_owner_clear_busy(nofp->nof_owner);
3313 nfs_open_file_clear_busy(nofp);
3562 struct nfs_open_file *nofp,
3624 if (nofp->nof_flags & NFS_OPEN_FILE_REOPEN) {
3627 error = nfs4_reopen(nofp, vfs_context_thread(ctx));
3662 error = nfs_advlock_unlock(np, nofp, nlop, 0, UINT64_MAX, NFS_FILE_LOCK_STYLE_FLOCK, ctx);
3735 nfs_open_owner_ref(nofp->nof_owner);
3736 nlop->nlo_open_owner = nofp->nof_owner;
3746 if ((!nofp->nof_rw_drw && !nofp->nof_w_drw && !nofp->nof_r_drw &&
3747 !nofp->nof_rw_dw && !nofp->nof_w_dw && !nofp->nof_r_dw &&
3748 !nofp->nof_rw && !nofp->nof_w && !nofp->nof_r) &&
3749 (nofp->nof_d_rw_drw || nofp->nof_d_w_drw || nofp->nof_d_r_drw ||
3750 nofp->nof_d_rw_dw || nofp->nof_d_w_dw || nofp->nof_d_r_dw ||
3751 nofp->nof_d_rw || nofp->nof_d_w || nofp->nof_d_r)) {
3752 error = nfs4_claim_delegated_state_for_open_file(nofp, 0);
3761 error = nmp->nm_funcs->nf_setlock_rpc(np, nofp, newnflp, 0, 0, vfs_context_thread(ctx), vfs_context_ucred(ctx));
3775 error2 = nfs_advlock_unlock(np, nofp, nlop, 0, UINT64_MAX, NFS_FILE_LOCK_STYLE_FLOCK, ctx);
3913 if ((style == NFS_FILE_LOCK_STYLE_POSIX) && (nofp->nof_flags & NFS_OPEN_FILE_POSIXLOCK)) {
3978 struct nfs_open_file *nofp,
3996 if (nofp->nof_flags & NFS_OPEN_FILE_REOPEN) {
3998 error = nfs4_reopen(nofp, NULL);
4236 struct nfs_open_file *nofp = NULL;
4338 error = nfs_open_file_find(np, noop, &nofp, 0, 0, 0);
4341 if (!error && (nofp->nof_flags & NFS_OPEN_FILE_LOST)) {
4342 NP(np, "nfs_vnop_advlock: LOST %d", kauth_cred_getuid(nofp->nof_owner->noo_cred));
4345 if (!error && (nofp->nof_flags & NFS_OPEN_FILE_REOPEN)) {
4346 error = nfs4_reopen(nofp, ((op == F_UNLCK) ? NULL : vfs_context_thread(ctx)));
4347 nofp = NULL;
4356 error = nfs_advlock_unlock(np, nofp, nlop, start, end, style, ctx);
4360 error = nfs_advlock_setlock(np, nofp, nlop, op, start, end, style, fl->l_type, ctx);
4379 nfs_check_for_locks(struct nfs_open_owner *noop, struct nfs_open_file *nofp)
4383 TAILQ_FOREACH(nlop, &nofp->nof_np->n_lock_owners, nlo_link) {
4396 nfs4_reopen(struct nfs_open_file *nofp, thread_t thd)
4398 struct nfs_open_owner *noop = nofp->nof_owner;
4399 struct nfsmount *nmp = NFSTONMP(nofp->nof_np);
4400 nfsnode_t np = nofp->nof_np;
4412 lck_mtx_lock(&nofp->nof_lock);
4413 while (nofp->nof_flags & NFS_OPEN_FILE_REOPENING) {
4416 msleep(&nofp->nof_flags, &nofp->nof_lock, slpflag|(PZERO-1), "nfsreopenwait", &ts);
4419 if (error || !(nofp->nof_flags & NFS_OPEN_FILE_REOPEN)) {
4420 lck_mtx_unlock(&nofp->nof_lock);
4423 nofp->nof_flags |= NFS_OPEN_FILE_REOPENING;
4424 lck_mtx_unlock(&nofp->nof_lock);
4480 if (nofp->nof_rw)
4481 error = nfs4_open_reopen_rpc(nofp, thd, noop->noo_cred, &cn, dvp, &vp, NFS_OPEN_SHARE_ACCESS_BOTH, NFS_OPEN_SHARE_DENY_NONE);
4482 if (!error && nofp->nof_w)
4483 error = nfs4_open_reopen_rpc(nofp, thd, noop->noo_cred, &cn, dvp, &vp, NFS_OPEN_SHARE_ACCESS_WRITE, NFS_OPEN_SHARE_DENY_NONE);
4484 if (!error && nofp->nof_r)
4485 error = nfs4_open_reopen_rpc(nofp, thd, noop->noo_cred, &cn, dvp, &vp, NFS_OPEN_SHARE_ACCESS_READ, NFS_OPEN_SHARE_DENY_NONE);
4491 (nofp->nof_flags & NFS_OPEN_FILE_LOST) ? 1 : 0, name ? name : "???");
4499 lck_mtx_lock(&nofp->nof_lock);
4500 nofp->nof_flags &= ~NFS_OPEN_FILE_REOPENING;
4502 nofp->nof_flags &= ~NFS_OPEN_FILE_REOPEN;
4505 (nofp->nof_flags & NFS_OPEN_FILE_LOST) ? 1 : 0, name ? name : "???");
4506 lck_mtx_unlock(&nofp->nof_lock);
4521 struct nfs_open_file *nofp,
4531 return (nfs4_open_rpc_internal(nofp, ctx, vfs_context_thread(ctx), vfs_context_ucred(ctx),
4540 struct nfs_open_file *nofp,
4549 return (nfs4_open_rpc_internal(nofp, NULL, thd, cred, cnp, NULL, dvp, vpp, NFS_OPEN_NOCREATE, share_access, share_deny));
4619 struct nfs_open_file *nofp,
4632 struct nfs_open_owner *noop = nofp->nof_owner;
4674 if (nofp) {
4675 sid = &nofp->nof_stateid;
4845 nofp->nof_flags |= NFS_OPEN_FILE_POSIXLOCK;
4964 struct nfs_open_file *nofp,
4970 struct nfs_open_owner *noop = nofp->nof_owner;
4975 nfsnode_t np = nofp->nof_np;
5096 nfsm_chain_get_stateid(error, &nmrep, &nofp->nof_stateid);
5188 nofp->nof_flags |= NFS_OPEN_FILE_POSIXLOCK;
5223 struct nfs_open_file *nofp,
5228 struct nfs_open_owner *noop = nofp->nof_owner;
5233 nfsnode_t np = nofp->nof_np;
5305 nfsm_chain_get_stateid(error, &nmrep, &nofp->nof_stateid);
5401 nofp->nof_flags |= NFS_OPEN_FILE_POSIXLOCK;
5421 struct nfs_open_file *nofp,
5424 struct nfs_open_owner *noop = nofp->nof_owner;
5452 nfsm_chain_add_stateid(error, &nmreq, &nofp->nof_stateid);
5454 nfsm_chain_add_32(error, &nmreq, nofp->nof_access);
5455 nfsm_chain_add_32(error, &nmreq, nofp->nof_deny);
5474 nfsm_chain_get_stateid(error, &nmrep, &nofp->nof_stateid);
5489 struct nfs_open_file *nofp,
5494 struct nfs_open_owner *noop = nofp->nof_owner;
5523 nfsm_chain_add_stateid(error, &nmreq, &nofp->nof_stateid);
5540 nfsm_chain_get_stateid(error, &nmrep, &nofp->nof_stateid);
5557 nfs4_claim_delegated_state_for_open_file(struct nfs_open_file *nofp, int flags)
5559 struct nfs_open_owner *noop = nofp->nof_owner;
5565 if (nofp->nof_d_rw_drw) {
5566 error = nfs4_claim_delegated_open_rpc(nofp, NFS_OPEN_SHARE_ACCESS_BOTH, NFS_OPEN_SHARE_DENY_BOTH, flags);
5568 lck_mtx_lock(&nofp->nof_lock);
5569 nofp->nof_rw_drw += nofp->nof_d_rw_drw;
5570 nofp->nof_d_rw_drw = 0;
5571 lck_mtx_unlock(&nofp->nof_lock);
5574 if (!error && nofp->nof_d_w_drw) {
5575 error = nfs4_claim_delegated_open_rpc(nofp, NFS_OPEN_SHARE_ACCESS_WRITE, NFS_OPEN_SHARE_DENY_BOTH, flags);
5577 lck_mtx_lock(&nofp->nof_lock);
5578 nofp->nof_w_drw += nofp->nof_d_w_drw;
5579 nofp->nof_d_w_drw = 0;
5580 lck_mtx_unlock(&nofp->nof_lock);
5583 if (!error && nofp->nof_d_r_drw) {
5584 error = nfs4_claim_delegated_open_rpc(nofp, NFS_OPEN_SHARE_ACCESS_READ, NFS_OPEN_SHARE_DENY_BOTH, flags);
5586 lck_mtx_lock(&nofp->nof_lock);
5587 nofp->nof_r_drw += nofp->nof_d_r_drw;
5588 nofp->nof_d_r_drw = 0;
5589 lck_mtx_unlock(&nofp->nof_lock);
5592 if (!error && nofp->nof_d_rw_dw) {
5593 error = nfs4_claim_delegated_open_rpc(nofp, NFS_OPEN_SHARE_ACCESS_BOTH, NFS_OPEN_SHARE_DENY_WRITE, flags);
5595 lck_mtx_lock(&nofp->nof_lock);
5596 nofp->nof_rw_dw += nofp->nof_d_rw_dw;
5597 nofp->nof_d_rw_dw = 0;
5598 lck_mtx_unlock(&nofp->nof_lock);
5601 if (!error && nofp->nof_d_w_dw) {
5602 error = nfs4_claim_delegated_open_rpc(nofp, NFS_OPEN_SHARE_ACCESS_WRITE, NFS_OPEN_SHARE_DENY_WRITE, flags);
5604 lck_mtx_lock(&nofp->nof_lock);
5605 nofp->nof_w_dw += nofp->nof_d_w_dw;
5606 nofp->nof_d_w_dw = 0;
5607 lck_mtx_unlock(&nofp->nof_lock);
5610 if (!error && nofp->nof_d_r_dw) {
5611 error = nfs4_claim_delegated_open_rpc(nofp, NFS_OPEN_SHARE_ACCESS_READ, NFS_OPEN_SHARE_DENY_WRITE, flags);
5613 lck_mtx_lock(&nofp->nof_lock);
5614 nofp->nof_r_dw += nofp->nof_d_r_dw;
5615 nofp->nof_d_r_dw = 0;
5616 lck_mtx_unlock(&nofp->nof_lock);
5620 if (!error && nofp->nof_d_rw) {
5621 error = nfs4_claim_delegated_open_rpc(nofp, NFS_OPEN_SHARE_ACCESS_BOTH, NFS_OPEN_SHARE_DENY_NONE, flags);
5626 lck_mtx_lock(&nofp->nof_lock);
5627 nofp->nof_rw += nofp->nof_d_rw;
5628 nofp->nof_d_rw = 0;
5629 lck_mtx_unlock(&nofp->nof_lock);
5633 if ((!error || reopen) && nofp->nof_d_w) {
5635 error = nfs4_claim_delegated_open_rpc(nofp, NFS_OPEN_SHARE_ACCESS_WRITE, NFS_OPEN_SHARE_DENY_NONE, flags);
5641 lck_mtx_lock(&nofp->nof_lock);
5642 nofp->nof_w += nofp->nof_d_w;
5643 nofp->nof_d_w = 0;
5644 lck_mtx_unlock(&nofp->nof_lock);
5647 if ((!error || reopen) && nofp->nof_d_r) {
5649 error = nfs4_claim_delegated_open_rpc(nofp, NFS_OPEN_SHARE_ACCESS_READ, NFS_OPEN_SHARE_DENY_NONE, flags);
5655 lck_mtx_lock(&nofp->nof_lock);
5656 nofp->nof_r += nofp->nof_d_r;
5657 nofp->nof_d_r = 0;
5658 lck_mtx_unlock(&nofp->nof_lock);
5667 if ((nmp = NFSTONMP(nofp->nof_np))) {
5668 nfs4_delegation_return_enqueue(nofp->nof_np);
5673 if (reopen && (nfs_check_for_locks(noop, nofp) == 0)) {
5675 NP(nofp->nof_np, "nfs4_claim_delegated_state_for_open_file: %d, need reopen, %d",
5676 reopen, kauth_cred_getuid(nofp->nof_owner->noo_cred));
5677 lck_mtx_lock(&nofp->nof_lock);
5678 nofp->nof_flags |= NFS_OPEN_FILE_REOPEN;
5679 lck_mtx_unlock(&nofp->nof_lock);
5683 NP(nofp->nof_np, "nfs4_claim_delegated_state_for_open_file: %d, locks prevent reopen, %d",
5684 reopen, kauth_cred_getuid(nofp->nof_owner->noo_cred));
5687 if (!error && ((nmp = NFSTONMP(nofp->nof_np)))) {
5689 TAILQ_FOREACH(nlop, &nofp->nof_np->n_lock_owners, nlo_link) {
5699 error = nmp->nm_funcs->nf_setlock_rpc(nofp->nof_np, nofp, nflp, 0, flags, current_thread(), noop->noo_cred);
5701 NP(nofp->nof_np, "nfs: delegated lock claim (0x%llx, 0x%llx) failed %d, %d",
5702 nflp->nfl_start, nflp->nfl_end, error, kauth_cred_getuid(nofp->nof_owner->noo_cred));
5706 // NP(nofp->nof_np, "nfs: delegated lock claim (0x%llx, 0x%llx) succeeded, %d",
5707 // nflp->nfl_start, nflp->nfl_end, kauth_cred_getuid(nofp->nof_owner->noo_cred));
5721 NP(nofp->nof_np, "nfs delegated lock claim error %d, %d", error, kauth_cred_getuid(nofp->nof_owner->noo_cred));
5722 if ((error == ETIMEDOUT) && ((nmp = NFSTONMP(nofp->nof_np))))
5728 NP(nofp->nof_np, "nfs delegated state claim error %d, state lost, %d", error, kauth_cred_getuid(nofp->nof_owner->noo_cred));
5734 if ((nmp = NFSTONMP(nofp->nof_np))) {
5735 nfs4_delegation_return_enqueue(nofp->nof_np);
5742 nfs_revoke_open_state_for_node(nofp->nof_np);
5754 struct nfs_open_file *nofp;
5786 TAILQ_FOREACH(nofp, &np->n_opens, nof_link) {
5787 if (nofp->nof_flags & NFS_OPEN_FILE_LOST)
5790 lck_mtx_lock(&nofp->nof_lock);
5791 nofp->nof_flags &= ~NFS_OPEN_FILE_REOPEN;
5792 nofp->nof_flags |= NFS_OPEN_FILE_LOST;
5794 lck_mtx_unlock(&nofp->nof_lock);
5796 nfs4_close_rpc(np, nofp, NULL, nofp->nof_owner->noo_cred, R_RECOVER);
5841 struct nfs_open_file *nofp;
5848 TAILQ_FOREACH(nofp, &np->n_opens, nof_link) {
5849 if (!nofp->nof_d_rw_drw && !nofp->nof_d_w_drw && !nofp->nof_d_r_drw &&
5850 !nofp->nof_d_rw_dw && !nofp->nof_d_w_dw && !nofp->nof_d_r_dw &&
5851 !nofp->nof_d_rw && !nofp->nof_d_w && !nofp->nof_d_r)
5854 error = nfs4_claim_delegated_state_for_open_file(nofp, flags);
6030 struct nfs_open_file *nofp;
6047 error = nfs_open_file_find(np, noop, &nofp, 0, 0, 1);
6048 if (!error && (nofp->nof_flags & NFS_OPEN_FILE_LOST)) {
6052 if (!error && (nofp->nof_flags & NFS_OPEN_FILE_REOPEN)) {
6053 error = nfs4_reopen(nofp, vfs_context_thread(ctx));
6054 nofp = NULL;
6062 if (!nofp->nof_access) {
6075 error = nfs_open_file_set_busy(nofp, vfs_context_thread(ctx));
6077 nofp = NULL;
6081 nfs_open_file_add_open(nofp, NFS_OPEN_SHARE_ACCESS_READ, NFS_OPEN_SHARE_DENY_NONE, 0);
6083 error = nfs4_open(np, nofp, NFS_OPEN_SHARE_ACCESS_READ, NFS_OPEN_SHARE_DENY_NONE, ctx);
6087 nofp->nof_flags |= NFS_OPEN_FILE_NEEDCLOSE;
6088 if (nofp)
6089 nfs_open_file_clear_busy(nofp);
6091 nofp = NULL;
6126 struct nfs_open_file *newnofp = NULL, *nofp = NULL;
6153 /* This shouldn't happen given that this is a new, nodeless nofp */
6221 /* need to cleanup our temporary nofp */
6230 nofp = newnofp;
6231 error = nfs_open_file_find_internal(np, noop, &nofp, 0, 0, 0);
6233 /* This shouldn't happen, because we passed in a new nofp to use. */
6236 } else if (nofp != newnofp) {
6244 busyerror = nfs_open_file_set_busy(nofp, NULL);
6245 nfs_open_file_add_open(nofp, accessMode, denyMode, 0);
6246 nofp->nof_stateid = newnofp->nof_stateid;
6248 nofp->nof_flags |= NFS_OPEN_FILE_POSIXLOCK;
6254 nofp->nof_flags |= NFS_OPEN_FILE_CREATE;
6255 nofp->nof_creator = current_thread();
6257 if (nofp && !busyerror)
6258 nfs_open_file_clear_busy(nofp);
6260 nofp = newnofp = NULL;
6927 struct nfs_open_file *newnofp = NULL, *nofp = NULL;
7096 nofp = newnofp;
7100 *nofpp = nofp;
7399 nofp = newnofp;
7400 error = nfs_open_file_find_internal(anp, noop, &nofp, 0, 0, 0);
7402 /* This shouldn't happen, because we passed in a new nofp to use. */
7404 nofp = NULL;
7405 } else if (nofp != newnofp) {
7413 nofpbusyerror = nfs_open_file_set_busy(nofp, NULL);
7414 nfs_open_file_add_open(nofp, accessMode, denyMode, 0);
7415 nofp->nof_stateid = newnofp->nof_stateid;
7417 nofp->nof_flags |= NFS_OPEN_FILE_POSIXLOCK;
7426 nofp->nof_flags |= NFS_OPEN_FILE_CREATE;
7427 nofp->nof_creator = current_thread();
7429 *nofpp = nofp;
7478 /* need to cleanup our temporary nofp */
7482 } else if (nofp && !nofpbusyerror) {
7483 nfs_open_file_clear_busy(nofp);
7488 nofp = newnofp = NULL;
7757 struct nfs_open_file *nofp = NULL;
7827 flags, ctx, &anp, &nofp);
7833 if (nofp && !(error = nfs_open_file_set_busy(nofp, NULL))) {
7834 nofp->nof_flags &= ~NFS_OPEN_FILE_CREATE;
7835 nofp->nof_creator = NULL;
7836 nfs_open_file_clear_busy(nofp);
7867 if (nofp) {
7868 int busyerror = nfs_open_file_set_busy(nofp, NULL);
7869 closeerror = nfs_close(anp, nofp, NFS_OPEN_SHARE_ACCESS_BOTH, NFS_OPEN_SHARE_DENY_NONE, ctx);
7871 nfs_open_file_clear_busy(nofp);