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()
3396 nfsd4_find_existing_open(struct nfs4_file *fp, struct nfsd4_open *open) in nfsd4_find_existing_open() argument
3399 struct nfs4_openowner *oo = open->op_openowner; in nfsd4_find_existing_open()
3417 alloc_init_open_stateowner(unsigned int strhashval, struct nfsd4_open *open, in alloc_init_open_stateowner() argument
3423 oo = alloc_stateowner(openowner_slab, &open->op_owner, clp); in alloc_init_open_stateowner()
3428 oo->oo_owner.so_seqid = open->op_seqid; in alloc_init_open_stateowner()
3436 ret = find_openstateowner_str_locked(strhashval, open, clp); in alloc_init_open_stateowner()
3449 struct nfsd4_open *open) in init_open_stateid() argument
3452 struct nfs4_openowner *oo = open->op_openowner; in init_open_stateid()
3458 retstp = nfsd4_find_existing_open(fp, open); in init_open_stateid()
3772 struct nfsd4_open *open, struct nfsd_net *nn) in nfsd4_process_open1() argument
3774 clientid_t *clientid = &open->op_clientid; in nfsd4_process_open1()
3780 if (STALE_CLIENTID(&open->op_clientid, nn)) in nfsd4_process_open1()
3786 open->op_file = nfsd4_alloc_file(); in nfsd4_process_open1()
3787 if (open->op_file == NULL) in nfsd4_process_open1()
3795 strhashval = ownerstr_hashval(&open->op_owner); in nfsd4_process_open1()
3796 oo = find_openstateowner_str(strhashval, open, clp); in nfsd4_process_open1()
3797 open->op_openowner = oo; in nfsd4_process_open1()
3804 open->op_openowner = NULL; in nfsd4_process_open1()
3807 status = nfsd4_check_seqid(cstate, &oo->oo_owner, open->op_seqid); in nfsd4_process_open1()
3812 oo = alloc_init_open_stateowner(strhashval, open, cstate); in nfsd4_process_open1()
3815 open->op_openowner = oo; in nfsd4_process_open1()
3817 open->op_stp = nfs4_alloc_open_stateid(clp); in nfsd4_process_open1()
3818 if (!open->op_stp) in nfsd4_process_open1()
3823 open->op_odstate = alloc_clnt_odstate(clp); in nfsd4_process_open1()
3824 if (!open->op_odstate) in nfsd4_process_open1()
3855 static bool nfsd4_is_deleg_cur(struct nfsd4_open *open) in nfsd4_is_deleg_cur() argument
3857 return open->op_claim_type == NFS4_OPEN_CLAIM_DELEGATE_CUR || in nfsd4_is_deleg_cur()
3858 open->op_claim_type == NFS4_OPEN_CLAIM_DELEG_CUR_FH; in nfsd4_is_deleg_cur()
3862 nfs4_check_deleg(struct nfs4_client *cl, struct nfsd4_open *open, in nfs4_check_deleg() argument
3869 deleg = find_deleg_stateid(cl, &open->op_delegate_stateid); in nfs4_check_deleg()
3872 flags = share_access_to_flags(open->op_share_access); in nfs4_check_deleg()
3880 if (!nfsd4_is_deleg_cur(open)) in nfs4_check_deleg()
3884 open->op_openowner->oo_flags |= NFS4_OO_CONFIRMED; in nfs4_check_deleg()
3901 struct nfsd4_open *open) in nfsd4_truncate() argument
3907 if (!open->op_truncate) in nfsd4_truncate()
3909 if (!(open->op_share_access & NFS4_SHARE_ACCESS_WRITE)) in nfsd4_truncate()
3916 struct nfsd4_open *open) in nfs4_get_vfs_file() argument
3920 int oflag = nfs4_access_to_omode(open->op_share_access); in nfs4_get_vfs_file()
3921 int access = nfs4_access_to_access(open->op_share_access); in nfs4_get_vfs_file()
3930 status = nfs4_file_check_deny(fp, open->op_share_deny); in nfs4_get_vfs_file()
3937 status = nfs4_file_get_access(fp, open->op_share_access); in nfs4_get_vfs_file()
3945 set_access(open->op_share_access, stp); in nfs4_get_vfs_file()
3949 set_deny(open->op_share_deny, stp); in nfs4_get_vfs_file()
3950 fp->fi_share_deny |= (open->op_share_deny & NFS4_SHARE_DENY_BOTH); in nfs4_get_vfs_file()
3967 status = nfsd4_truncate(rqstp, cur_fh, open); in nfs4_get_vfs_file()
3974 nfs4_file_put_access(fp, open->op_share_access); in nfs4_get_vfs_file()
3980 … struct nfs4_file *fp, struct svc_fh *cur_fh, struct nfs4_ol_stateid *stp, struct nfsd4_open *open) in nfs4_upgrade_open() argument
3985 if (!test_access(open->op_share_access, stp)) in nfs4_upgrade_open()
3986 return nfs4_get_vfs_file(rqstp, fp, cur_fh, stp, open); in nfs4_upgrade_open()
3990 status = nfs4_file_check_deny(fp, open->op_share_deny); in nfs4_upgrade_open()
3992 set_deny(open->op_share_deny, stp); in nfs4_upgrade_open()
3994 (open->op_share_deny & NFS4_SHARE_DENY_BOTH); in nfs4_upgrade_open()
4001 status = nfsd4_truncate(rqstp, cur_fh, open); in nfs4_upgrade_open()
4151 static void nfsd4_open_deleg_none_ext(struct nfsd4_open *open, int status) in nfsd4_open_deleg_none_ext() argument
4153 open->op_delegate_type = NFS4_OPEN_DELEGATE_NONE_EXT; in nfsd4_open_deleg_none_ext()
4155 open->op_why_no_deleg = WND4_CONTENTION; in nfsd4_open_deleg_none_ext()
4157 open->op_why_no_deleg = WND4_RESOURCE; in nfsd4_open_deleg_none_ext()
4158 switch (open->op_deleg_want) { in nfsd4_open_deleg_none_ext()
4164 open->op_why_no_deleg = WND4_CANCELLED; in nfsd4_open_deleg_none_ext()
4179 nfs4_open_delegation(struct svc_fh *fh, struct nfsd4_open *open, in nfs4_open_delegation() argument
4189 open->op_recall = 0; in nfs4_open_delegation()
4190 switch (open->op_claim_type) { in nfs4_open_delegation()
4193 open->op_recall = 1; in nfs4_open_delegation()
4194 if (open->op_delegate_type != NFS4_OPEN_DELEGATE_READ) in nfs4_open_delegation()
4215 if (open->op_share_access & NFS4_SHARE_ACCESS_WRITE) in nfs4_open_delegation()
4217 if (open->op_create == NFS4_OPEN_CREATE) in nfs4_open_delegation()
4227 memcpy(&open->op_delegate_stateid, &dp->dl_stid.sc_stateid, sizeof(dp->dl_stid.sc_stateid)); in nfs4_open_delegation()
4231 open->op_delegate_type = NFS4_OPEN_DELEGATE_READ; in nfs4_open_delegation()
4235 open->op_delegate_type = NFS4_OPEN_DELEGATE_NONE; in nfs4_open_delegation()
4236 if (open->op_claim_type == NFS4_OPEN_CLAIM_PREVIOUS && in nfs4_open_delegation()
4237 open->op_delegate_type != NFS4_OPEN_DELEGATE_NONE) { in nfs4_open_delegation()
4239 open->op_recall = 1; in nfs4_open_delegation()
4243 if (open->op_deleg_want) in nfs4_open_delegation()
4244 nfsd4_open_deleg_none_ext(open, status); in nfs4_open_delegation()
4248 static void nfsd4_deleg_xgrade_none_ext(struct nfsd4_open *open, in nfsd4_deleg_xgrade_none_ext() argument
4251 if (open->op_deleg_want == NFS4_SHARE_WANT_READ_DELEG && in nfsd4_deleg_xgrade_none_ext()
4253 open->op_delegate_type = NFS4_OPEN_DELEGATE_NONE_EXT; in nfsd4_deleg_xgrade_none_ext()
4254 open->op_why_no_deleg = WND4_NOT_SUPP_DOWNGRADE; in nfsd4_deleg_xgrade_none_ext()
4255 } else if (open->op_deleg_want == NFS4_SHARE_WANT_WRITE_DELEG && in nfsd4_deleg_xgrade_none_ext()
4257 open->op_delegate_type = NFS4_OPEN_DELEGATE_NONE_EXT; in nfsd4_deleg_xgrade_none_ext()
4258 open->op_why_no_deleg = WND4_NOT_SUPP_UPGRADE; in nfsd4_deleg_xgrade_none_ext()
4267 nfsd4_process_open2(struct svc_rqst *rqstp, struct svc_fh *current_fh, struct nfsd4_open *open) in nfsd4_process_open2() argument
4270 struct nfs4_client *cl = open->op_openowner->oo_owner.so_client; in nfsd4_process_open2()
4282 fp = find_or_add_file(open->op_file, ¤t_fh->fh_handle); in nfsd4_process_open2()
4283 if (fp != open->op_file) { in nfsd4_process_open2()
4284 status = nfs4_check_deleg(cl, open, &dp); in nfsd4_process_open2()
4288 stp = nfsd4_find_existing_open(fp, open); in nfsd4_process_open2()
4291 open->op_file = NULL; in nfsd4_process_open2()
4293 if (nfsd4_is_deleg_cur(open)) in nfsd4_process_open2()
4304 status = nfs4_upgrade_open(rqstp, fp, current_fh, stp, open); in nfsd4_process_open2()
4310 stp = open->op_stp; in nfsd4_process_open2()
4311 open->op_stp = NULL; in nfsd4_process_open2()
4312 swapstp = init_open_stateid(stp, fp, open); in nfsd4_process_open2()
4318 stp, open); in nfsd4_process_open2()
4326 status = nfs4_get_vfs_file(rqstp, fp, current_fh, stp, open); in nfsd4_process_open2()
4334 open->op_odstate); in nfsd4_process_open2()
4335 if (stp->st_clnt_odstate == open->op_odstate) in nfsd4_process_open2()
4336 open->op_odstate = NULL; in nfsd4_process_open2()
4339 nfs4_inc_and_copy_stateid(&open->op_stateid, &stp->st_stid); in nfsd4_process_open2()
4343 if (open->op_deleg_want & NFS4_SHARE_WANT_NO_DELEG) { in nfsd4_process_open2()
4344 open->op_delegate_type = NFS4_OPEN_DELEGATE_NONE_EXT; in nfsd4_process_open2()
4345 open->op_why_no_deleg = WND4_NOT_WANTED; in nfsd4_process_open2()
4354 nfs4_open_delegation(current_fh, open, stp); in nfsd4_process_open2()
4362 if (open->op_delegate_type == NFS4_OPEN_DELEGATE_NONE && dp && in nfsd4_process_open2()
4363 open->op_deleg_want) in nfsd4_process_open2()
4364 nfsd4_deleg_xgrade_none_ext(open, dp); in nfsd4_process_open2()
4368 if (status == 0 && open->op_claim_type == NFS4_OPEN_CLAIM_PREVIOUS) in nfsd4_process_open2()
4369 open->op_openowner->oo_flags |= NFS4_OO_CONFIRMED; in nfsd4_process_open2()
4373 open->op_rflags = NFS4_OPEN_RESULT_LOCKTYPE_POSIX; in nfsd4_process_open2()
4374 if (!(open->op_openowner->oo_flags & NFS4_OO_CONFIRMED) && in nfsd4_process_open2()
4376 open->op_rflags |= NFS4_OPEN_RESULT_CONFIRM; in nfsd4_process_open2()
4386 struct nfsd4_open *open) in nfsd4_cleanup_open_state() argument
4388 if (open->op_openowner) { in nfsd4_cleanup_open_state()
4389 struct nfs4_stateowner *so = &open->op_openowner->oo_owner; in nfsd4_cleanup_open_state()
4394 if (open->op_file) in nfsd4_cleanup_open_state()
4395 kmem_cache_free(file_slab, open->op_file); in nfsd4_cleanup_open_state()
4396 if (open->op_stp) in nfsd4_cleanup_open_state()
4397 nfs4_put_stid(&open->op_stp->st_stid); in nfsd4_cleanup_open_state()
4398 if (open->op_odstate) in nfsd4_cleanup_open_state()
4399 kmem_cache_free(odstate_slab, open->op_odstate); in nfsd4_cleanup_open_state()
6854 nfsd4_set_openstateid(struct nfsd4_compound_state *cstate, struct nfsd4_open *open) in nfsd4_set_openstateid() argument
6856 put_stateid(cstate, &open->op_stateid); in nfsd4_set_openstateid()