Lines Matching refs:open
228 find_openstateowner_str_locked(unsigned int hashval, struct nfsd4_open *open, in find_openstateowner_str_locked() argument
239 if (same_owner_str(so, &open->op_owner)) in find_openstateowner_str_locked()
246 find_openstateowner_str(unsigned int hashval, struct nfsd4_open *open, in find_openstateowner_str() argument
252 oo = find_openstateowner_str_locked(hashval, open, clp); in find_openstateowner_str()
3365 alloc_init_open_stateowner(unsigned int strhashval, struct nfsd4_open *open, in alloc_init_open_stateowner() argument
3371 oo = alloc_stateowner(openowner_slab, &open->op_owner, clp); in alloc_init_open_stateowner()
3376 oo->oo_owner.so_seqid = open->op_seqid; in alloc_init_open_stateowner()
3384 ret = find_openstateowner_str_locked(strhashval, open, clp); in alloc_init_open_stateowner()
3394 …oid init_open_stateid(struct nfs4_ol_stateid *stp, struct nfs4_file *fp, struct nfsd4_open *open) { in init_open_stateid() argument
3395 struct nfs4_openowner *oo = open->op_openowner; in init_open_stateid()
3704 struct nfsd4_open *open, struct nfsd_net *nn) in nfsd4_process_open1() argument
3706 clientid_t *clientid = &open->op_clientid; in nfsd4_process_open1()
3712 if (STALE_CLIENTID(&open->op_clientid, nn)) in nfsd4_process_open1()
3718 open->op_file = nfsd4_alloc_file(); in nfsd4_process_open1()
3719 if (open->op_file == NULL) in nfsd4_process_open1()
3727 strhashval = ownerstr_hashval(&open->op_owner); in nfsd4_process_open1()
3728 oo = find_openstateowner_str(strhashval, open, clp); in nfsd4_process_open1()
3729 open->op_openowner = oo; in nfsd4_process_open1()
3736 open->op_openowner = NULL; in nfsd4_process_open1()
3739 status = nfsd4_check_seqid(cstate, &oo->oo_owner, open->op_seqid); in nfsd4_process_open1()
3744 oo = alloc_init_open_stateowner(strhashval, open, cstate); in nfsd4_process_open1()
3747 open->op_openowner = oo; in nfsd4_process_open1()
3749 open->op_stp = nfs4_alloc_open_stateid(clp); in nfsd4_process_open1()
3750 if (!open->op_stp) in nfsd4_process_open1()
3755 open->op_odstate = alloc_clnt_odstate(clp); in nfsd4_process_open1()
3756 if (!open->op_odstate) in nfsd4_process_open1()
3787 static bool nfsd4_is_deleg_cur(struct nfsd4_open *open) in nfsd4_is_deleg_cur() argument
3789 return open->op_claim_type == NFS4_OPEN_CLAIM_DELEGATE_CUR || in nfsd4_is_deleg_cur()
3790 open->op_claim_type == NFS4_OPEN_CLAIM_DELEG_CUR_FH; in nfsd4_is_deleg_cur()
3794 nfs4_check_deleg(struct nfs4_client *cl, struct nfsd4_open *open, in nfs4_check_deleg() argument
3801 deleg = find_deleg_stateid(cl, &open->op_delegate_stateid); in nfs4_check_deleg()
3804 flags = share_access_to_flags(open->op_share_access); in nfs4_check_deleg()
3812 if (!nfsd4_is_deleg_cur(open)) in nfs4_check_deleg()
3816 open->op_openowner->oo_flags |= NFS4_OO_CONFIRMED; in nfs4_check_deleg()
3821 nfsd4_find_existing_open(struct nfs4_file *fp, struct nfsd4_open *open) in nfsd4_find_existing_open() argument
3824 struct nfs4_openowner *oo = open->op_openowner; in nfsd4_find_existing_open()
3854 struct nfsd4_open *open) in nfsd4_truncate() argument
3860 if (!open->op_truncate) in nfsd4_truncate()
3862 if (!(open->op_share_access & NFS4_SHARE_ACCESS_WRITE)) in nfsd4_truncate()
3869 struct nfsd4_open *open) in nfs4_get_vfs_file() argument
3873 int oflag = nfs4_access_to_omode(open->op_share_access); in nfs4_get_vfs_file()
3874 int access = nfs4_access_to_access(open->op_share_access); in nfs4_get_vfs_file()
3883 status = nfs4_file_check_deny(fp, open->op_share_deny); in nfs4_get_vfs_file()
3890 status = nfs4_file_get_access(fp, open->op_share_access); in nfs4_get_vfs_file()
3898 set_access(open->op_share_access, stp); in nfs4_get_vfs_file()
3902 set_deny(open->op_share_deny, stp); in nfs4_get_vfs_file()
3903 fp->fi_share_deny |= (open->op_share_deny & NFS4_SHARE_DENY_BOTH); in nfs4_get_vfs_file()
3920 status = nfsd4_truncate(rqstp, cur_fh, open); in nfs4_get_vfs_file()
3927 nfs4_file_put_access(fp, open->op_share_access); in nfs4_get_vfs_file()
3933 … struct nfs4_file *fp, struct svc_fh *cur_fh, struct nfs4_ol_stateid *stp, struct nfsd4_open *open) in nfs4_upgrade_open() argument
3938 if (!test_access(open->op_share_access, stp)) in nfs4_upgrade_open()
3939 return nfs4_get_vfs_file(rqstp, fp, cur_fh, stp, open); in nfs4_upgrade_open()
3943 status = nfs4_file_check_deny(fp, open->op_share_deny); in nfs4_upgrade_open()
3946 set_deny(open->op_share_deny, stp); in nfs4_upgrade_open()
3948 (open->op_share_deny & NFS4_SHARE_DENY_BOTH); in nfs4_upgrade_open()
3955 status = nfsd4_truncate(rqstp, cur_fh, open); in nfs4_upgrade_open()
3962 nfs4_set_claim_prev(struct nfsd4_open *open, bool has_session) in nfs4_set_claim_prev() argument
3964 open->op_openowner->oo_flags |= NFS4_OO_CONFIRMED; in nfs4_set_claim_prev()
4111 static void nfsd4_open_deleg_none_ext(struct nfsd4_open *open, int status) in nfsd4_open_deleg_none_ext() argument
4113 open->op_delegate_type = NFS4_OPEN_DELEGATE_NONE_EXT; in nfsd4_open_deleg_none_ext()
4115 open->op_why_no_deleg = WND4_CONTENTION; in nfsd4_open_deleg_none_ext()
4117 open->op_why_no_deleg = WND4_RESOURCE; in nfsd4_open_deleg_none_ext()
4118 switch (open->op_deleg_want) { in nfsd4_open_deleg_none_ext()
4124 open->op_why_no_deleg = WND4_CANCELLED; in nfsd4_open_deleg_none_ext()
4139 nfs4_open_delegation(struct svc_fh *fh, struct nfsd4_open *open, in nfs4_open_delegation() argument
4149 open->op_recall = 0; in nfs4_open_delegation()
4150 switch (open->op_claim_type) { in nfs4_open_delegation()
4153 open->op_recall = 1; in nfs4_open_delegation()
4154 if (open->op_delegate_type != NFS4_OPEN_DELEGATE_READ) in nfs4_open_delegation()
4174 if (open->op_share_access & NFS4_SHARE_ACCESS_WRITE) in nfs4_open_delegation()
4176 if (open->op_create == NFS4_OPEN_CREATE) in nfs4_open_delegation()
4186 memcpy(&open->op_delegate_stateid, &dp->dl_stid.sc_stateid, sizeof(dp->dl_stid.sc_stateid)); in nfs4_open_delegation()
4190 open->op_delegate_type = NFS4_OPEN_DELEGATE_READ; in nfs4_open_delegation()
4194 open->op_delegate_type = NFS4_OPEN_DELEGATE_NONE; in nfs4_open_delegation()
4195 if (open->op_claim_type == NFS4_OPEN_CLAIM_PREVIOUS && in nfs4_open_delegation()
4196 open->op_delegate_type != NFS4_OPEN_DELEGATE_NONE) { in nfs4_open_delegation()
4198 open->op_recall = 1; in nfs4_open_delegation()
4202 if (open->op_deleg_want) in nfs4_open_delegation()
4203 nfsd4_open_deleg_none_ext(open, status); in nfs4_open_delegation()
4207 static void nfsd4_deleg_xgrade_none_ext(struct nfsd4_open *open, in nfsd4_deleg_xgrade_none_ext() argument
4210 if (open->op_deleg_want == NFS4_SHARE_WANT_READ_DELEG && in nfsd4_deleg_xgrade_none_ext()
4212 open->op_delegate_type = NFS4_OPEN_DELEGATE_NONE_EXT; in nfsd4_deleg_xgrade_none_ext()
4213 open->op_why_no_deleg = WND4_NOT_SUPP_DOWNGRADE; in nfsd4_deleg_xgrade_none_ext()
4214 } else if (open->op_deleg_want == NFS4_SHARE_WANT_WRITE_DELEG && in nfsd4_deleg_xgrade_none_ext()
4216 open->op_delegate_type = NFS4_OPEN_DELEGATE_NONE_EXT; in nfsd4_deleg_xgrade_none_ext()
4217 open->op_why_no_deleg = WND4_NOT_SUPP_UPGRADE; in nfsd4_deleg_xgrade_none_ext()
4226 nfsd4_process_open2(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_open *open) in nfsd4_process_open2() argument
4229 struct nfs4_client *cl = open->op_openowner->oo_owner.so_client; in nfsd4_process_open2()
4240 fp = find_or_add_file(open->op_file, ¤t_fh->fh_handle); in nfsd4_process_open2()
4241 if (fp != open->op_file) { in nfsd4_process_open2()
4242 status = nfs4_check_deleg(cl, open, &dp); in nfsd4_process_open2()
4245 stp = nfsd4_find_existing_open(fp, open); in nfsd4_process_open2()
4247 open->op_file = NULL; in nfsd4_process_open2()
4249 if (nfsd4_is_deleg_cur(open)) in nfsd4_process_open2()
4260 status = nfs4_upgrade_open(rqstp, fp, current_fh, stp, open); in nfsd4_process_open2()
4266 stp = open->op_stp; in nfsd4_process_open2()
4267 open->op_stp = NULL; in nfsd4_process_open2()
4268 init_open_stateid(stp, fp, open); in nfsd4_process_open2()
4270 status = nfs4_get_vfs_file(rqstp, fp, current_fh, stp, open); in nfsd4_process_open2()
4278 open->op_odstate); in nfsd4_process_open2()
4279 if (stp->st_clnt_odstate == open->op_odstate) in nfsd4_process_open2()
4280 open->op_odstate = NULL; in nfsd4_process_open2()
4283 memcpy(&open->op_stateid, &stp->st_stid.sc_stateid, sizeof(stateid_t)); in nfsd4_process_open2()
4287 if (open->op_deleg_want & NFS4_SHARE_WANT_NO_DELEG) { in nfsd4_process_open2()
4288 open->op_delegate_type = NFS4_OPEN_DELEGATE_NONE_EXT; in nfsd4_process_open2()
4289 open->op_why_no_deleg = WND4_NOT_WANTED; in nfsd4_process_open2()
4298 nfs4_open_delegation(current_fh, open, stp); in nfsd4_process_open2()
4306 if (open->op_delegate_type == NFS4_OPEN_DELEGATE_NONE && dp && in nfsd4_process_open2()
4307 open->op_deleg_want) in nfsd4_process_open2()
4308 nfsd4_deleg_xgrade_none_ext(open, dp); in nfsd4_process_open2()
4312 if (status == 0 && open->op_claim_type == NFS4_OPEN_CLAIM_PREVIOUS) in nfsd4_process_open2()
4313 nfs4_set_claim_prev(open, nfsd4_has_session(&resp->cstate)); in nfsd4_process_open2()
4317 open->op_rflags = NFS4_OPEN_RESULT_LOCKTYPE_POSIX; in nfsd4_process_open2()
4318 if (!(open->op_openowner->oo_flags & NFS4_OO_CONFIRMED) && in nfsd4_process_open2()
4320 open->op_rflags |= NFS4_OPEN_RESULT_CONFIRM; in nfsd4_process_open2()
4330 struct nfsd4_open *open) in nfsd4_cleanup_open_state() argument
4332 if (open->op_openowner) { in nfsd4_cleanup_open_state()
4333 struct nfs4_stateowner *so = &open->op_openowner->oo_owner; in nfsd4_cleanup_open_state()
4338 if (open->op_file) in nfsd4_cleanup_open_state()
4339 kmem_cache_free(file_slab, open->op_file); in nfsd4_cleanup_open_state()
4340 if (open->op_stp) in nfsd4_cleanup_open_state()
4341 nfs4_put_stid(&open->op_stp->st_stid); in nfsd4_cleanup_open_state()
4342 if (open->op_odstate) in nfsd4_cleanup_open_state()
4343 kmem_cache_free(odstate_slab, open->op_odstate); in nfsd4_cleanup_open_state()
6775 nfsd4_set_openstateid(struct nfsd4_compound_state *cstate, struct nfsd4_open *open) in nfsd4_set_openstateid() argument
6777 put_stateid(cstate, &open->op_stateid); in nfsd4_set_openstateid()