Date: Sun, 26 Jun 2011 09:51:16 GMT From: Ilya Putsikau <ilya@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 195352 for review Message-ID: <201106260951.p5Q9pGTg012520@skunkworks.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/@@195352?ac=10 Change 195352 by ilya@ilya_triton2011 on 2011/06/26 09:50:46 Add fuse_lck_mtx_lock macros Affected files ... .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse.h#9 edit .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_device.c#8 edit .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_internal.c#13 edit .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_ipc.c#8 edit .. //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_vnops.c#25 edit Differences ... ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse.h#9 (text+ko) ==== @@ -105,8 +105,8 @@ #if USE_FUSE_LOCK extern struct mtx fuse_mtx; -#define FUSE_LOCK() mtx_lock(&fuse_mtx) -#define FUSE_UNLOCK() mtx_unlock(&fuse_mtx) +#define FUSE_LOCK() fuse_lck_mtx_lock(fuse_mtx) +#define FUSE_UNLOCK() fuse_lck_mtx_unlock(fuse_mtx) #else #define FUSE_LOCK() #define FUSE_UNLOCK() @@ -142,6 +142,10 @@ #define FUSE_DEBUG_IPC 0 #endif +#ifndef FUSE_DEBUG_LOCK +#define FUSE_DEBUG_LOCK 0 +#endif + #ifndef FUSE_DEBUG_VFSOPS #define FUSE_DEBUG_VFSOPS 0 #endif @@ -158,3 +162,19 @@ if (((cond))) { \ printf("%s: " fmt, __func__, ## __VA_ARGS__); \ } } while (0) + +#define fuse_lck_mtx_lock(mtx) do { \ + DEBUGX(FUSE_DEBUG_LOCK, "0: lock(%s): %s@%d by %d\n", \ + __STRING(mtx), __func__, __LINE__, curthread->td_proc->p_pid); \ + mtx_lock(&(mtx)); \ + DEBUGX(FUSE_DEBUG_LOCK, "1: lock(%s): %s@%d by %d\n", \ + __STRING(mtx), __func__, __LINE__, curthread->td_proc->p_pid); \ + } while (0) + +#define fuse_lck_mtx_unlock(mtx) do { \ + DEBUGX(FUSE_DEBUG_LOCK, "0: unlock(%s): %s@%d by %d\n", \ + __STRING(mtx), __func__, __LINE__, curthread->td_proc->p_pid); \ + mtx_unlock(&(mtx)); \ + DEBUGX(FUSE_DEBUG_LOCK, "1: unlock(%s): %s@%d by %d\n", \ + __STRING(mtx), __func__, __LINE__, curthread->td_proc->p_pid); \ + } while (0) ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_device.c#8 (text+ko) ==== @@ -100,19 +100,19 @@ */ #if DO_GIANT_MANUALLY - mtx_lock(&Giant); + fuse_lck_mtx_lock(Giant); #endif if (fuse_useco < 0) { /* Module unload is going on */ #if DO_GIANT_MANUALLY - mtx_unlock(&Giant); + fuse_lck_mtx_unlock(Giant); #endif DEBUG("caught in the middle of unload\n"); return (ENOENT); } #if DO_GIANT_MANUALLY && USE_FUSE_LOCK fuse_useco++; - mtx_unlock(&Giant); + fuse_lck_mtx_unlock(Giant); #endif if (dev->si_usecount > 1) @@ -136,7 +136,7 @@ } FUSE_UNLOCK(); #if DO_GIANT_MANUALLY && ! USE_FUSE_LOCK - mtx_unlock(&Giant); + fuse_lck_mtx_unlock(Giant); #endif DEBUG("%s: device opened by thread %d.\n", dev->si_name, td->td_tid); @@ -148,7 +148,7 @@ #if USE_FUSE_LOCK fuse_useco--; #else - mtx_unlock(&Giant); + fuse_lck_mtx_unlock(Giant); #endif #endif return (EBUSY); @@ -160,7 +160,7 @@ struct fuse_data *data; #if DO_GIANT_MANUALLY && ! USE_FUSE_LOCK - mtx_lock(&Giant); + fuse_lck_mtx_lock(Giant); #endif FUSE_LOCK(); data = fuse_get_devdata(dev); @@ -170,7 +170,7 @@ ("fuse device is already closed upon close")); fdata_set_dead(data); data->dataflags &= ~FSESS_OPENED; - mtx_lock(&data->aw_mtx); + fuse_lck_mtx_lock(data->aw_mtx); /* wakup poll()ers */ selwakeuppri(&data->ks_rsel, PZERO + 1); @@ -181,13 +181,13 @@ /* Don't let syscall handlers wait in vain */ while ((tick = fuse_aw_pop(data))) { - mtx_lock(&tick->tk_aw_mtx); + fuse_lck_mtx_lock(tick->tk_aw_mtx); fticket_set_answered(tick); tick->tk_aw_errno = ENOTCONN; wakeup(tick); - mtx_unlock(&tick->tk_aw_mtx); + fuse_lck_mtx_unlock(tick->tk_aw_mtx); } - mtx_unlock(&data->aw_mtx); + fuse_lck_mtx_unlock(data->aw_mtx); FUSE_UNLOCK(); goto out; @@ -199,7 +199,7 @@ out: #if DO_GIANT_MANUALLY && ! USE_FUSE_LOCK - mtx_unlock(&Giant); + fuse_lck_mtx_unlock(Giant); #endif fuse_useco--; @@ -216,12 +216,12 @@ data = fuse_get_devdata(dev); if (events & (POLLIN | POLLRDNORM)) { - mtx_lock(&data->ms_mtx); + fuse_lck_mtx_lock(data->ms_mtx); if (fdata_get_dead(data) || STAILQ_FIRST(&data->ms_head)) revents |= events & (POLLIN | POLLRDNORM); else selrecord(td, &data->ks_rsel); - mtx_unlock(&data->ms_mtx); + fuse_lck_mtx_unlock(data->ms_mtx); } if (events & (POLLOUT | POLLWRNORM)) { @@ -250,11 +250,11 @@ DEBUG("fuse device being read on thread %d\n", uio->uio_td->td_tid); - mtx_lock(&data->ms_mtx); + fuse_lck_mtx_lock(data->ms_mtx); again: if (fdata_get_dead(data)) { DEBUG2G("we know early on that reader should be kicked so we don't wait for news\n"); - mtx_unlock(&data->ms_mtx); + fuse_lck_mtx_unlock(data->ms_mtx); return (ENODEV); } @@ -262,13 +262,13 @@ /* check if we may block */ if (ioflag & O_NONBLOCK) { /* get outa here soon */ - mtx_unlock(&data->ms_mtx); + fuse_lck_mtx_unlock(data->ms_mtx); return (EAGAIN); } else { err = msleep(data, &data->ms_mtx, PCATCH, "fu_msg", 0); if (err != 0) { - mtx_unlock(&data->ms_mtx); + fuse_lck_mtx_unlock(data->ms_mtx); return (fdata_get_dead(data) ? ENODEV : err); } tick = fuse_ms_pop(data); @@ -284,7 +284,7 @@ DEBUG("no message on thread #%d\n", uio->uio_td->td_tid); goto again; } - mtx_unlock(&data->ms_mtx); + fuse_lck_mtx_unlock(data->ms_mtx); if (fdata_get_dead(data)) { /* @@ -418,7 +418,7 @@ /* Pass stuff over to callback if there is one installed */ /* Looking for ticket with the unique id of header */ - mtx_lock(&data->aw_mtx); + fuse_lck_mtx_lock(data->aw_mtx); TAILQ_FOREACH_SAFE(tick, &data->aw_head, tk_aw_link, x_tick) { DEBUG("bumped into callback #%llu\n", @@ -429,7 +429,7 @@ break; } } - mtx_unlock(&data->aw_mtx); + fuse_lck_mtx_unlock(data->aw_mtx); if (found) { if (tick->tk_aw_handler) { ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_internal.c#13 (text+ko) ==== @@ -621,10 +621,10 @@ fdata_set_dead(data); } - mtx_lock(&data->ticket_mtx); + fuse_lck_mtx_lock(data->ticket_mtx); data->dataflags |= FSESS_INITED; wakeup(&data->ticketer); - mtx_unlock(&data->ticket_mtx); + fuse_lck_mtx_unlock(data->ticket_mtx); return 0; } ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_ipc.c#8 (text+ko) ==== @@ -197,7 +197,7 @@ int err = 0; debug_printf("ftick=%p\n", ftick); - mtx_lock(&ftick->tk_aw_mtx); + fuse_lck_mtx_lock(ftick->tk_aw_mtx); if (fticket_answered(ftick)) { goto out; @@ -212,7 +212,7 @@ err = msleep(ftick, &ftick->tk_aw_mtx, PCATCH, "fu_ans", 0); out: - mtx_unlock(&ftick->tk_aw_mtx); + fuse_lck_mtx_unlock(ftick->tk_aw_mtx); if (!(err || fticket_answered(ftick))) { debug_printf("FUSE: requester was woken up but still no answer"); @@ -346,20 +346,20 @@ { debug_printf("data=%p\n", data); - mtx_lock(&data->ms_mtx); + fuse_lck_mtx_lock(data->ms_mtx); if (fdata_get_dead(data)) { - mtx_unlock(&data->ms_mtx); + fuse_lck_mtx_unlock(data->ms_mtx); return; } data->dataflags |= FSESS_DEAD; wakeup_one(data); selwakeuppri(&data->ks_rsel, PZERO + 1); - mtx_unlock(&data->ms_mtx); + fuse_lck_mtx_unlock(data->ms_mtx); - mtx_lock(&data->ticket_mtx); + fuse_lck_mtx_lock(data->ticket_mtx); wakeup(&data->ticketer); - mtx_unlock(&data->ticket_mtx); + fuse_lck_mtx_unlock(data->ticket_mtx); } static __inline__ @@ -435,15 +435,15 @@ debug_printf("data=%p\n", data); - mtx_lock(&data->ticket_mtx); + fuse_lck_mtx_lock(data->ticket_mtx); if (data->freeticket_counter == 0) { - mtx_unlock(&data->ticket_mtx); + fuse_lck_mtx_unlock(data->ticket_mtx); ftick = fticket_alloc(data); if (!ftick) { panic("ticket allocation failed"); } - mtx_lock(&data->ticket_mtx); + fuse_lck_mtx_lock(data->ticket_mtx); fuse_push_allticks(ftick); } else { /* locked here */ @@ -457,7 +457,7 @@ err = msleep(&data->ticketer, &data->ticket_mtx, PCATCH | PDROP, "fu_ini", 0); } else { - mtx_unlock(&data->ticket_mtx); + fuse_lck_mtx_unlock(data->ticket_mtx); } if (err) { @@ -474,26 +474,26 @@ debug_printf("ftick=%p\n", ftick); - mtx_lock(&ftick->tk_data->ticket_mtx); + fuse_lck_mtx_lock(ftick->tk_data->ticket_mtx); if (fuse_max_freetickets >= 0 && fuse_max_freetickets <= ftick->tk_data->freeticket_counter) { die = 1; } else { - mtx_unlock(&ftick->tk_data->ticket_mtx); + fuse_lck_mtx_unlock(ftick->tk_data->ticket_mtx); fticket_refresh(ftick); - mtx_lock(&ftick->tk_data->ticket_mtx); + fuse_lck_mtx_lock(ftick->tk_data->ticket_mtx); } /* locked here */ if (die) { fuse_remove_allticks(ftick); - mtx_unlock(&ftick->tk_data->ticket_mtx); + fuse_lck_mtx_unlock(ftick->tk_data->ticket_mtx); fticket_destroy(ftick); } else { fuse_push_freeticks(ftick); - mtx_unlock(&ftick->tk_data->ticket_mtx); + fuse_lck_mtx_unlock(ftick->tk_data->ticket_mtx); } } @@ -518,9 +518,9 @@ ftick->tk_aw_handler = handler; - mtx_lock(&ftick->tk_data->aw_mtx); + fuse_lck_mtx_lock(ftick->tk_data->aw_mtx); fuse_aw_push(ftick); - mtx_unlock(&ftick->tk_data->aw_mtx); + fuse_lck_mtx_unlock(ftick->tk_data->aw_mtx); } void @@ -538,11 +538,11 @@ return; } - mtx_lock(&ftick->tk_data->ms_mtx); + fuse_lck_mtx_lock(ftick->tk_data->ms_mtx); fuse_ms_push(ftick); wakeup_one(ftick->tk_data); selwakeuppri(&ftick->tk_data->ks_rsel, PZERO + 1); - mtx_unlock(&ftick->tk_data->ms_mtx); + fuse_lck_mtx_unlock(ftick->tk_data->ms_mtx); } static int @@ -752,7 +752,7 @@ err = fticket_pull(ftick, uio); - mtx_lock(&ftick->tk_aw_mtx); + fuse_lck_mtx_lock(ftick->tk_aw_mtx); if (fticket_answered(ftick)) { /* The requester was interrupted and she set the "answered" flag @@ -766,7 +766,7 @@ wakeup(ftick); } - mtx_unlock(&ftick->tk_aw_mtx); + fuse_lck_mtx_unlock(ftick->tk_aw_mtx); if (dropflag) { fuse_ticket_drop(ftick); @@ -848,7 +848,7 @@ debug_printf("IPC: interrupted, err = %d\n", err); - mtx_lock(&fdip->tick->tk_aw_mtx); + fuse_lck_mtx_lock(fdip->tick->tk_aw_mtx); if (fticket_answered(fdip->tick)) { /* @@ -857,7 +857,7 @@ * So we drop the ticket and exit as usual. */ debug_printf("IPC: already answered\n"); - mtx_unlock(&fdip->tick->tk_aw_mtx); + fuse_lck_mtx_unlock(fdip->tick->tk_aw_mtx); goto out; } else { /* @@ -868,7 +868,7 @@ debug_printf("IPC: setting to answered\n"); age = fdip->tick->tk_age; fticket_set_answered(fdip->tick); - mtx_unlock(&fdip->tick->tk_aw_mtx); + fuse_lck_mtx_unlock(fdip->tick->tk_aw_mtx); #ifndef DONT_TRY_HARD_PREVENT_IO_IN_VAIN /* * If we are willing to pay with one more locking, we @@ -878,7 +878,7 @@ * won't even be called. (No guarantee though for * being fast.) */ - mtx_lock(&fdip->tick->tk_data->aw_mtx); + fuse_lck_mtx_lock(fdip->tick->tk_data->aw_mtx); TAILQ_FOREACH(tick, &fdip->tick->tk_data->aw_head, tk_aw_link) { if (tick == fdip->tick) { if (fdip->tick->tk_age == age) { @@ -889,7 +889,7 @@ } } - mtx_unlock(&fdip->tick->tk_data->aw_mtx); + fuse_lck_mtx_unlock(fdip->tick->tk_data->aw_mtx); #endif return err; } ==== //depot/projects/soc2011/ilya_fuse/fuse_module/fuse_vnops.c#25 (text+ko) ==== @@ -1151,7 +1151,7 @@ if (!isdir && (fvdat->flag & FN_CREATING)) { - mtx_lock(&fvdat->createlock); + fuse_lck_mtx_lock(fvdat->createlock); if (fvdat->flag & FN_CREATING) { // check again if (fvdat->creator == curthread->td_tid) { @@ -1180,7 +1180,7 @@ fvdat->flag &= ~FN_CREATING; - mtx_unlock(&fvdat->createlock); + fuse_lck_mtx_unlock(fvdat->createlock); wakeup((caddr_t)&fvdat->creator); // wake up all goto ok; /* return 0 */ } else { @@ -1203,7 +1203,7 @@ } } } else { - mtx_unlock(&fvdat->createlock); + fuse_lck_mtx_unlock(fvdat->createlock); /* Can proceed from here. */ } }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201106260951.p5Q9pGTg012520>