Lines Matching full:ls
155 void nfsd4_close_layout(struct nfs4_layout_stateid *ls) in nfsd4_close_layout() argument
159 spin_lock(&ls->ls_stid.sc_file->fi_lock); in nfsd4_close_layout()
160 fl = ls->ls_file; in nfsd4_close_layout()
161 ls->ls_file = NULL; in nfsd4_close_layout()
162 spin_unlock(&ls->ls_stid.sc_file->fi_lock); in nfsd4_close_layout()
165 if (!nfsd4_layout_ops[ls->ls_layout_type]->disable_recalls) in nfsd4_close_layout()
167 (void **)&ls); in nfsd4_close_layout()
175 struct nfs4_layout_stateid *ls = layoutstateid(stid); in nfsd4_free_layout_stateid() local
176 struct nfs4_client *clp = ls->ls_stid.sc_client; in nfsd4_free_layout_stateid()
177 struct nfs4_file *fp = ls->ls_stid.sc_file; in nfsd4_free_layout_stateid()
179 trace_nfsd_layoutstate_free(&ls->ls_stid.sc_stateid); in nfsd4_free_layout_stateid()
182 list_del_init(&ls->ls_perclnt); in nfsd4_free_layout_stateid()
186 list_del_init(&ls->ls_perfile); in nfsd4_free_layout_stateid()
189 nfsd4_close_layout(ls); in nfsd4_free_layout_stateid()
191 if (ls->ls_recalled) in nfsd4_free_layout_stateid()
192 atomic_dec(&ls->ls_stid.sc_file->fi_lo_recalls); in nfsd4_free_layout_stateid()
194 kmem_cache_free(nfs4_layout_stateid_cache, ls); in nfsd4_free_layout_stateid()
198 nfsd4_layout_setlease(struct nfs4_layout_stateid *ls) in nfsd4_layout_setlease() argument
203 if (nfsd4_layout_ops[ls->ls_layout_type]->disable_recalls) in nfsd4_layout_setlease()
213 fl->c.flc_owner = ls; in nfsd4_layout_setlease()
215 fl->c.flc_file = ls->ls_file->nf_file; in nfsd4_layout_setlease()
232 struct nfs4_layout_stateid *ls; in nfsd4_alloc_layout_stateid() local
243 ls = layoutstateid(stp); in nfsd4_alloc_layout_stateid()
244 INIT_LIST_HEAD(&ls->ls_perclnt); in nfsd4_alloc_layout_stateid()
245 INIT_LIST_HEAD(&ls->ls_perfile); in nfsd4_alloc_layout_stateid()
246 spin_lock_init(&ls->ls_lock); in nfsd4_alloc_layout_stateid()
247 INIT_LIST_HEAD(&ls->ls_layouts); in nfsd4_alloc_layout_stateid()
248 mutex_init(&ls->ls_mutex); in nfsd4_alloc_layout_stateid()
249 ls->ls_layout_type = layout_type; in nfsd4_alloc_layout_stateid()
250 nfsd4_init_cb(&ls->ls_recall, clp, &nfsd4_cb_layout_ops, in nfsd4_alloc_layout_stateid()
254 ls->ls_file = nfsd_file_get(fp->fi_deleg_file); in nfsd4_alloc_layout_stateid()
256 ls->ls_file = find_any_file(fp); in nfsd4_alloc_layout_stateid()
257 BUG_ON(!ls->ls_file); in nfsd4_alloc_layout_stateid()
259 if (nfsd4_layout_setlease(ls)) { in nfsd4_alloc_layout_stateid()
260 nfsd_file_put(ls->ls_file); in nfsd4_alloc_layout_stateid()
262 kmem_cache_free(nfs4_layout_stateid_cache, ls); in nfsd4_alloc_layout_stateid()
268 list_add(&ls->ls_perclnt, &clp->cl_lo_states); in nfsd4_alloc_layout_stateid()
272 list_add(&ls->ls_perfile, &fp->fi_lo_states); in nfsd4_alloc_layout_stateid()
275 trace_nfsd_layoutstate_alloc(&ls->ls_stid.sc_stateid); in nfsd4_alloc_layout_stateid()
276 return ls; in nfsd4_alloc_layout_stateid()
284 struct nfs4_layout_stateid *ls; in nfsd4_preprocess_layout_stateid() local
304 ls = nfsd4_alloc_layout_stateid(cstate, stid, layout_type); in nfsd4_preprocess_layout_stateid()
308 if (!ls) in nfsd4_preprocess_layout_stateid()
310 mutex_lock(&ls->ls_mutex); in nfsd4_preprocess_layout_stateid()
312 ls = container_of(stid, struct nfs4_layout_stateid, ls_stid); in nfsd4_preprocess_layout_stateid()
315 mutex_lock(&ls->ls_mutex); in nfsd4_preprocess_layout_stateid()
318 if (layout_type != ls->ls_layout_type) in nfsd4_preprocess_layout_stateid()
322 *lsp = ls; in nfsd4_preprocess_layout_stateid()
326 mutex_unlock(&ls->ls_mutex); in nfsd4_preprocess_layout_stateid()
334 nfsd4_recall_file_layout(struct nfs4_layout_stateid *ls) in nfsd4_recall_file_layout() argument
336 spin_lock(&ls->ls_lock); in nfsd4_recall_file_layout()
337 if (ls->ls_recalled) in nfsd4_recall_file_layout()
340 if (list_empty(&ls->ls_layouts)) in nfsd4_recall_file_layout()
343 ls->ls_recalled = true; in nfsd4_recall_file_layout()
344 atomic_inc(&ls->ls_stid.sc_file->fi_lo_recalls); in nfsd4_recall_file_layout()
345 trace_nfsd_layout_recall(&ls->ls_stid.sc_stateid); in nfsd4_recall_file_layout()
347 if (!test_and_set_bit(NFSD4_CALLBACK_RUNNING, &ls->ls_recall.cb_flags)) { in nfsd4_recall_file_layout()
348 refcount_inc(&ls->ls_stid.sc_count); in nfsd4_recall_file_layout()
349 nfsd4_run_cb(&ls->ls_recall); in nfsd4_recall_file_layout()
352 spin_unlock(&ls->ls_lock); in nfsd4_recall_file_layout()
399 nfsd4_recall_conflict(struct nfs4_layout_stateid *ls) in nfsd4_recall_conflict() argument
401 struct nfs4_file *fp = ls->ls_stid.sc_file; in nfsd4_recall_conflict()
408 if (l != ls) { in nfsd4_recall_conflict()
418 nfsd4_insert_layout(struct nfsd4_layoutget *lgp, struct nfs4_layout_stateid *ls) in nfsd4_insert_layout() argument
421 struct nfs4_file *fp = ls->ls_stid.sc_file; in nfsd4_insert_layout()
426 nfserr = nfsd4_recall_conflict(ls); in nfsd4_insert_layout()
429 spin_lock(&ls->ls_lock); in nfsd4_insert_layout()
430 list_for_each_entry(lp, &ls->ls_layouts, lo_perstate) { in nfsd4_insert_layout()
434 spin_unlock(&ls->ls_lock); in nfsd4_insert_layout()
441 new->lo_state = ls; in nfsd4_insert_layout()
444 nfserr = nfsd4_recall_conflict(ls); in nfsd4_insert_layout()
447 spin_lock(&ls->ls_lock); in nfsd4_insert_layout()
448 list_for_each_entry(lp, &ls->ls_layouts, lo_perstate) { in nfsd4_insert_layout()
453 refcount_inc(&ls->ls_stid.sc_count); in nfsd4_insert_layout()
454 list_add_tail(&new->lo_perstate, &ls->ls_layouts); in nfsd4_insert_layout()
457 nfs4_inc_and_copy_stateid(&lgp->lg_sid, &ls->ls_stid); in nfsd4_insert_layout()
458 spin_unlock(&ls->ls_lock); in nfsd4_insert_layout()
509 struct nfs4_layout_stateid *ls; in nfsd4_return_file_layouts() local
517 &ls); in nfsd4_return_file_layouts()
523 spin_lock(&ls->ls_lock); in nfsd4_return_file_layouts()
524 list_for_each_entry_safe(lp, n, &ls->ls_layouts, lo_perstate) { in nfsd4_return_file_layouts()
530 if (!list_empty(&ls->ls_layouts)) { in nfsd4_return_file_layouts()
532 nfs4_inc_and_copy_stateid(&lrp->lr_sid, &ls->ls_stid); in nfsd4_return_file_layouts()
535 trace_nfsd_layoutstate_unhash(&ls->ls_stid.sc_stateid); in nfsd4_return_file_layouts()
536 ls->ls_stid.sc_status |= SC_STATUS_CLOSED; in nfsd4_return_file_layouts()
539 spin_unlock(&ls->ls_lock); in nfsd4_return_file_layouts()
541 mutex_unlock(&ls->ls_mutex); in nfsd4_return_file_layouts()
542 nfs4_put_stid(&ls->ls_stid); in nfsd4_return_file_layouts()
552 struct nfs4_layout_stateid *ls, *n; in nfsd4_return_client_layouts() local
560 list_for_each_entry_safe(ls, n, &clp->cl_lo_states, ls_perclnt) { in nfsd4_return_client_layouts()
561 if (ls->ls_layout_type != lrp->lr_layout_type) in nfsd4_return_client_layouts()
565 !fh_fsid_match(&ls->ls_stid.sc_file->fi_fhandle, in nfsd4_return_client_layouts()
569 spin_lock(&ls->ls_lock); in nfsd4_return_client_layouts()
570 list_for_each_entry_safe(lp, t, &ls->ls_layouts, lo_perstate) { in nfsd4_return_client_layouts()
575 spin_unlock(&ls->ls_lock); in nfsd4_return_client_layouts()
584 nfsd4_return_all_layouts(struct nfs4_layout_stateid *ls, in nfsd4_return_all_layouts() argument
587 spin_lock(&ls->ls_lock); in nfsd4_return_all_layouts()
588 list_splice_init(&ls->ls_layouts, reaplist); in nfsd4_return_all_layouts()
589 spin_unlock(&ls->ls_lock); in nfsd4_return_all_layouts()
595 struct nfs4_layout_stateid *ls, *n; in nfsd4_return_all_client_layouts() local
599 list_for_each_entry_safe(ls, n, &clp->cl_lo_states, ls_perclnt) in nfsd4_return_all_client_layouts()
600 nfsd4_return_all_layouts(ls, &reaplist); in nfsd4_return_all_client_layouts()
609 struct nfs4_layout_stateid *ls, *n; in nfsd4_return_all_file_layouts() local
613 list_for_each_entry_safe(ls, n, &fp->fi_lo_states, ls_perfile) { in nfsd4_return_all_file_layouts()
614 if (ls->ls_stid.sc_client == clp) in nfsd4_return_all_file_layouts()
615 nfsd4_return_all_layouts(ls, &reaplist); in nfsd4_return_all_file_layouts()
623 nfsd4_cb_layout_fail(struct nfs4_layout_stateid *ls, struct nfsd_file *file) in nfsd4_cb_layout_fail() argument
625 struct nfs4_client *clp = ls->ls_stid.sc_client; in nfsd4_cb_layout_fail()
659 struct nfs4_layout_stateid *ls = in nfsd4_cb_layout_prepare() local
662 mutex_lock(&ls->ls_mutex); in nfsd4_cb_layout_prepare()
663 nfs4_inc_and_copy_stateid(&ls->ls_recall_sid, &ls->ls_stid); in nfsd4_cb_layout_prepare()
664 mutex_unlock(&ls->ls_mutex); in nfsd4_cb_layout_prepare()
670 struct nfs4_layout_stateid *ls = in nfsd4_cb_layout_done() local
677 trace_nfsd_cb_layout_done(&ls->ls_stid.sc_stateid, task); in nfsd4_cb_layout_done()
686 if (list_empty(&ls->ls_layouts)) in nfsd4_cb_layout_done()
691 nn = net_generic(ls->ls_stid.sc_client->net, nfsd_net_id); in nfsd4_cb_layout_done()
706 trace_nfsd_layout_recall_fail(&ls->ls_stid.sc_stateid); in nfsd4_cb_layout_done()
708 fl = nfsd_file_get(ls->ls_file); in nfsd4_cb_layout_done()
711 ops = nfsd4_layout_ops[ls->ls_layout_type]; in nfsd4_cb_layout_done()
713 ops->fence_client(ls, fl); in nfsd4_cb_layout_done()
715 nfsd4_cb_layout_fail(ls, fl); in nfsd4_cb_layout_done()
720 trace_nfsd_layout_recall_done(&ls->ls_stid.sc_stateid); in nfsd4_cb_layout_done()
729 struct nfs4_layout_stateid *ls = in nfsd4_cb_layout_release() local
733 trace_nfsd_layout_recall_release(&ls->ls_stid.sc_stateid); in nfsd4_cb_layout_release()
735 nfsd4_return_all_layouts(ls, &reaplist); in nfsd4_cb_layout_release()
737 nfs4_put_stid(&ls->ls_stid); in nfsd4_cb_layout_release()