Lines Matching full:cp
59 static void smb_co_init(struct smb_connobj *cp, int level, char *ilockname,
61 static void smb_co_done(struct smb_connobj *cp);
63 static void smb_vc_free(struct smb_connobj *cp);
64 static void smb_vc_gone(struct smb_connobj *cp, struct smb_cred *scred);
232 smb_co_init(struct smb_connobj *cp, int level, char *ilockname, char *lockname) in smb_co_init() argument
234 SLIST_INIT(&cp->co_children); in smb_co_init()
235 sx_init_flags(&cp->co_interlock, ilockname, SX_RECURSE); in smb_co_init()
236 cv_init(&cp->co_lock, "smblock"); in smb_co_init()
237 cp->co_lockcnt = 0; in smb_co_init()
238 cp->co_locker = NULL; in smb_co_init()
239 cp->co_level = level; in smb_co_init()
240 cp->co_usecount = 1; in smb_co_init()
241 sx_xlock(&cp->co_interlock); in smb_co_init()
242 smb_co_lock(cp); in smb_co_init()
243 sx_unlock(&cp->co_interlock); in smb_co_init()
247 smb_co_done(struct smb_connobj *cp) in smb_co_done() argument
250 sx_destroy(&cp->co_interlock); in smb_co_done()
251 cv_destroy(&cp->co_lock); in smb_co_done()
252 cp->co_locker = NULL; in smb_co_done()
253 cp->co_flags = 0; in smb_co_done()
254 cp->co_lockcnt = 0; in smb_co_done()
258 smb_co_gone(struct smb_connobj *cp, struct smb_cred *scred) in smb_co_gone() argument
262 if (cp->co_gone) in smb_co_gone()
263 cp->co_gone(cp, scred); in smb_co_gone()
264 parent = cp->co_parent; in smb_co_gone()
269 SLIST_REMOVE(&parent->co_children, cp, smb_connobj, co_next); in smb_co_gone()
272 if (cp->co_free) in smb_co_gone()
273 cp->co_free(cp); in smb_co_gone()
277 smb_co_ref(struct smb_connobj *cp) in smb_co_ref() argument
280 sx_xlock(&cp->co_interlock); in smb_co_ref()
281 cp->co_usecount++; in smb_co_ref()
282 sx_unlock(&cp->co_interlock); in smb_co_ref()
286 smb_co_rele(struct smb_connobj *cp, struct smb_cred *scred) in smb_co_rele() argument
289 sx_xlock(&cp->co_interlock); in smb_co_rele()
290 smb_co_unlock(cp); in smb_co_rele()
291 if (cp->co_usecount > 1) { in smb_co_rele()
292 cp->co_usecount--; in smb_co_rele()
293 sx_unlock(&cp->co_interlock); in smb_co_rele()
296 if (cp->co_usecount == 0) { in smb_co_rele()
297 SMBERROR("negative use_count for object %d", cp->co_level); in smb_co_rele()
298 sx_unlock(&cp->co_interlock); in smb_co_rele()
301 cp->co_usecount--; in smb_co_rele()
302 cp->co_flags |= SMBO_GONE; in smb_co_rele()
303 sx_unlock(&cp->co_interlock); in smb_co_rele()
304 smb_co_gone(cp, scred); in smb_co_rele()
308 smb_co_get(struct smb_connobj *cp, struct smb_cred *scred) in smb_co_get() argument
312 MPASS(sx_xholder(&cp->co_interlock) == curthread); in smb_co_get()
313 cp->co_usecount++; in smb_co_get()
314 error = smb_co_lock(cp); in smb_co_get()
316 cp->co_usecount--; in smb_co_get()
321 smb_co_put(struct smb_connobj *cp, struct smb_cred *scred) in smb_co_put() argument
324 sx_xlock(&cp->co_interlock); in smb_co_put()
325 if (cp->co_usecount > 1) { in smb_co_put()
326 cp->co_usecount--; in smb_co_put()
327 } else if (cp->co_usecount == 1) { in smb_co_put()
328 cp->co_usecount--; in smb_co_put()
329 cp->co_flags |= SMBO_GONE; in smb_co_put()
333 smb_co_unlock(cp); in smb_co_put()
334 sx_unlock(&cp->co_interlock); in smb_co_put()
335 if ((cp->co_flags & SMBO_GONE) == 0) in smb_co_put()
337 smb_co_gone(cp, scred); in smb_co_put()
341 smb_co_lock(struct smb_connobj *cp) in smb_co_lock() argument
344 MPASS(sx_xholder(&cp->co_interlock) == curthread); in smb_co_lock()
346 if (cp->co_flags & SMBO_GONE) in smb_co_lock()
348 if (cp->co_locker == NULL) { in smb_co_lock()
349 cp->co_locker = curthread; in smb_co_lock()
352 if (cp->co_locker == curthread) { in smb_co_lock()
353 cp->co_lockcnt++; in smb_co_lock()
356 cv_wait(&cp->co_lock, &cp->co_interlock); in smb_co_lock()
361 smb_co_unlock(struct smb_connobj *cp) in smb_co_unlock() argument
364 MPASS(sx_xholder(&cp->co_interlock) == curthread); in smb_co_unlock()
365 MPASS(cp->co_locker == curthread); in smb_co_unlock()
366 if (cp->co_lockcnt != 0) { in smb_co_unlock()
367 cp->co_lockcnt--; in smb_co_unlock()
370 cp->co_locker = NULL; in smb_co_unlock()
371 cv_signal(&cp->co_lock); in smb_co_unlock()
496 smb_vc_free(struct smb_connobj *cp) in smb_vc_free() argument
498 struct smb_vc *vcp = CPTOVC(cp); in smb_vc_free()
537 smb_vc_gone(struct smb_connobj *cp, struct smb_cred *scred) in smb_vc_gone() argument
539 struct smb_vc *vcp = CPTOVC(cp); in smb_vc_gone()
559 struct smb_connobj *cp; in smb_vc_get() local
562 cp = VCTOCP(vcp); in smb_vc_get()
563 sx_xlock(&cp->co_interlock); in smb_vc_get()
564 error = smb_co_get(cp, scred); in smb_vc_get()
565 sx_unlock(&cp->co_interlock); in smb_vc_get()
578 struct smb_connobj *cp; in smb_vc_lock() local
581 cp = VCTOCP(vcp); in smb_vc_lock()
582 sx_xlock(&cp->co_interlock); in smb_vc_lock()
583 error = smb_co_lock(cp); in smb_vc_lock()
584 sx_unlock(&cp->co_interlock); in smb_vc_lock()
592 struct smb_connobj *cp; in smb_vc_unlock() local
594 cp = VCTOCP(vcp); in smb_vc_unlock()
595 sx_xlock(&cp->co_interlock); in smb_vc_unlock()
596 smb_co_unlock(cp); in smb_vc_unlock()
597 sx_unlock(&cp->co_interlock); in smb_vc_unlock()
788 smb_share_free(struct smb_connobj *cp) in smb_share_free() argument
790 struct smb_share *ssp = CPTOSS(cp); in smb_share_free()
800 smb_share_gone(struct smb_connobj *cp, struct smb_cred *scred) in smb_share_gone() argument
802 struct smb_share *ssp = CPTOSS(cp); in smb_share_gone()
822 struct smb_connobj *cp = SSTOCP(ssp); in smb_share_get() local
825 sx_xlock(&cp->co_interlock); in smb_share_get()
826 error = smb_co_get(cp, scred); in smb_share_get()
827 sx_unlock(&cp->co_interlock); in smb_share_get()
841 struct smb_connobj *cp; in smb_share_lock() local
844 cp = SSTOCP(ssp); in smb_share_lock()
845 sx_xlock(&cp->co_interlock); in smb_share_lock()
846 error = smb_co_lock(cp); in smb_share_lock()
847 sx_unlock(&cp->co_interlock); in smb_share_lock()
854 struct smb_connobj *cp; in smb_share_unlock() local
856 cp = SSTOCP(ssp); in smb_share_unlock()
857 sx_xlock(&cp->co_interlock); in smb_share_unlock()
858 smb_co_unlock(cp); in smb_share_unlock()
859 sx_unlock(&cp->co_interlock); in smb_share_unlock()