Date: Sun, 22 Jul 2012 14:37:29 +0000 (UTC) From: Attilio Rao <attilio@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r238692 - projects/fuse/sys/fs/fuse Message-ID: <201207221437.q6MEbTjO094869@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: attilio Date: Sun Jul 22 14:37:28 2012 New Revision: 238692 URL: http://svn.freebsd.org/changeset/base/238692 Log: - Add a lock assert - Remove a wrong assert because the aw could be rescheduled again while the lock was dropped. Reported by: pho Tested by: pho Modified: projects/fuse/sys/fs/fuse/fuse_device.c projects/fuse/sys/fs/fuse/fuse_ipc.h Modified: projects/fuse/sys/fs/fuse/fuse_device.c ============================================================================== --- projects/fuse/sys/fs/fuse/fuse_device.c Sun Jul 22 14:33:14 2012 (r238691) +++ projects/fuse/sys/fs/fuse/fuse_device.c Sun Jul 22 14:37:28 2012 (r238692) @@ -428,7 +428,12 @@ fuse_device_write(struct cdev *dev, stru /* pretender doesn't wanna do anything with answer */ DEBUG("stuff devalidated, so we drop it\n"); } - FUSE_ASSERT_AW_DONE(tick); + + /* + * As aw_mtx was not held during the callback execution the + * ticket may have been inserted again. However, this is safe + * because fuse_ticket_drop() will deal with refcount anyway. + */ fuse_ticket_drop(tick); } else { /* no callback at all! */ Modified: projects/fuse/sys/fs/fuse/fuse_ipc.h ============================================================================== --- projects/fuse/sys/fs/fuse/fuse_ipc.h Sun Jul 22 14:33:14 2012 (r238691) +++ projects/fuse/sys/fs/fuse/fuse_ipc.h Sun Jul 22 14:37:28 2012 (r238692) @@ -320,6 +320,7 @@ fuse_aw_remove(struct fuse_ticket *ftick { DEBUGX(FUSE_DEBUG_IPC, "ftick=%p refcount=%d\n", ftick, ftick->tk_refcount); + mtx_assert(&ftick->tk_data->aw_mtx, MA_OWNED); TAILQ_REMOVE(&ftick->tk_data->aw_head, ftick, tk_aw_link); #ifdef INVARIANTS ftick->tk_aw_link.tqe_next = NULL;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201207221437.q6MEbTjO094869>