From owner-svn-src-projects@FreeBSD.ORG Sun Jul 22 14:37:29 2012 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id B8FD9106566B; Sun, 22 Jul 2012 14:37:29 +0000 (UTC) (envelope-from attilio@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id A3C3F8FC12; Sun, 22 Jul 2012 14:37:29 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id q6MEbT7c094872; Sun, 22 Jul 2012 14:37:29 GMT (envelope-from attilio@svn.freebsd.org) Received: (from attilio@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id q6MEbTjO094869; Sun, 22 Jul 2012 14:37:29 GMT (envelope-from attilio@svn.freebsd.org) Message-Id: <201207221437.q6MEbTjO094869@svn.freebsd.org> From: Attilio Rao Date: Sun, 22 Jul 2012 14:37:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r238692 - projects/fuse/sys/fs/fuse X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 22 Jul 2012 14:37:29 -0000 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;