svn commit: r238692 - projects/fuse/sys/fs/fuse
Attilio Rao
attilio at FreeBSD.org
Sun Jul 22 14:37:29 UTC 2012
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;
More information about the svn-src-projects
mailing list