Skip site navigation (1)Skip section navigation (2)
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>