From owner-freebsd-fs@freebsd.org Sat Jan 16 23:20:34 2016 Return-Path: Delivered-To: freebsd-fs@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 07D1FA85355 for ; Sat, 16 Jan 2016 23:20:34 +0000 (UTC) (envelope-from rmacklem@uoguelph.ca) Received: from esa-annu.net.uoguelph.ca (esa-annu.mail.uoguelph.ca [131.104.91.36]) by mx1.freebsd.org (Postfix) with ESMTP id AA8DF1567 for ; Sat, 16 Jan 2016 23:20:33 +0000 (UTC) (envelope-from rmacklem@uoguelph.ca) IronPort-PHdr: 9a23:RfAOiRf58O09C9LXdmtrKkawlGMj4u6mDksu8pMizoh2WeGdxc6yYB7h7PlgxGXEQZ/co6odzbGG7eaxAidZvcvJmUtBWaIPfidNsd8RkQ0kDZzNImzAB9muURYHGt9fXkRu5XCxPBsdMs//Y1rPvi/6tmZKSV3BPAZ4bt74BpTVx5zukbvipduCOE4R2Gf1SIgxBSv1hD2ZjtMRj4pmJ/R54TryiVwMRd5rw3h1L0mYhRf265T41pdi9yNNp6BprJYYAu3SNp41Rr1ADTkgL3t9pIiy7UGCHkOz4S4/VWMNjhNOHwnDpDv3WpDsqSzk/r5+3zKGPM78QLQcVjGr7qMtQxjt3nQpLTk8pVvWgc84qatQoxasolQr2Yvda4KROf9WY6TSYN4eXWoHVc8HBH8JOZ+1c4ZaV7lJBu1ftYSo4gJW9RY= X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: A2DOAQA7z5pW/61jaINehH+IULMvAQ2BY4YPAoFZFAEBAQEBAQEBgQmCLYIIAQEEIwRSEAIBCA4KAgINGQICVwIEiC6vMJAGAQEBAQEBAQECAQEBAQEBAQEbgQCFVYR/h3SBSQWOOYhhnGBEjhcCIAEBQoQpIIZLgQgBAQE X-IronPort-AV: E=Sophos;i="5.22,306,1449550800"; d="scan'208";a="263227470" Received: from nipigon.cs.uoguelph.ca (HELO zcs1.mail.uoguelph.ca) ([131.104.99.173]) by esa-annu.net.uoguelph.ca with ESMTP; 16 Jan 2016 18:20:32 -0500 Received: from localhost (localhost [127.0.0.1]) by zcs1.mail.uoguelph.ca (Postfix) with ESMTP id 8A59F15F55D; Sat, 16 Jan 2016 18:20:32 -0500 (EST) Received: from zcs1.mail.uoguelph.ca ([127.0.0.1]) by localhost (zcs1.mail.uoguelph.ca [127.0.0.1]) (amavisd-new, port 10032) with ESMTP id P7GTd2spEJii; Sat, 16 Jan 2016 18:20:32 -0500 (EST) Received: from localhost (localhost [127.0.0.1]) by zcs1.mail.uoguelph.ca (Postfix) with ESMTP id 11E8115F565; Sat, 16 Jan 2016 18:20:32 -0500 (EST) X-Virus-Scanned: amavisd-new at zcs1.mail.uoguelph.ca Received: from zcs1.mail.uoguelph.ca ([127.0.0.1]) by localhost (zcs1.mail.uoguelph.ca [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id D6Q9EhYKCbMH; Sat, 16 Jan 2016 18:20:31 -0500 (EST) Received: from zcs1.mail.uoguelph.ca (zcs1.mail.uoguelph.ca [172.17.95.18]) by zcs1.mail.uoguelph.ca (Postfix) with ESMTP id EA0D615F55D; Sat, 16 Jan 2016 18:20:31 -0500 (EST) Date: Sat, 16 Jan 2016 18:20:31 -0500 (EST) From: Rick Macklem To: Konstantin Belousov Cc: FreeBSD Filesystems , Kirk McKusick Message-ID: <853868666.163292727.1452986431921.JavaMail.zimbra@uoguelph.ca> In-Reply-To: <20160116191116.GI3942@kib.kiev.ua> References: <1696608910.154845456.1452438117036.JavaMail.zimbra@uoguelph.ca> <1773157955.158922767.1452698181137.JavaMail.zimbra@uoguelph.ca> <1351730674.159022044.1452699617235.JavaMail.zimbra@uoguelph.ca> <20160114092934.GL72455@kib.kiev.ua> <964333498.161527381.1452827658163.JavaMail.zimbra@uoguelph.ca> <20160115095749.GC3942@kib.kiev.ua> <1817287612.162823118.1452909605928.JavaMail.zimbra@uoguelph.ca> <20160116191116.GI3942@kib.kiev.ua> Subject: Re: panic ffs_truncate3 (maybe fuse being evil) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-Originating-IP: [172.17.95.11] X-Mailer: Zimbra 8.0.9_GA_6191 (ZimbraWebClient - FF43 (Win)/8.0.9_GA_6191) Thread-Topic: panic ffs_truncate3 (maybe fuse being evil) Thread-Index: vlYzyP6+/0R7IKjPIHye/djPI/6TZw== X-BeenThere: freebsd-fs@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: Filesystems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 16 Jan 2016 23:20:34 -0000 Kostik wrote: > On Fri, Jan 15, 2016 at 09:00:05PM -0500, Rick Macklem wrote: > > --- ufs/ffs/ffs_inode.c.sav 2016-01-10 20:11:46.406682000 -0500 > > +++ ufs/ffs/ffs_inode.c 2016-01-15 17:22:58.465991000 -0500 > > @@ -544,7 +544,12 @@ done: > > BO_LOCK(bo); > > if (length == 0 && > > (fs->fs_magic != FS_UFS2_MAGIC || ip->i_din2->di_extsize == 0) && > > - (bo->bo_dirty.bv_cnt > 0 || bo->bo_clean.bv_cnt > 0)) > > + ((bo->bo_dirty.bv_cnt > 0 && (TAILQ_EMPTY(&bo->bo_dirty.bv_hd) || > > + TAILQ_FIRST(&bo->bo_dirty.bv_hd)->b_lblkno >= 0 || > > + TAILQ_FIRST(&bo->bo_dirty.bv_hd)->b_lblkno < -2)) || > > + (bo->bo_clean.bv_cnt > 0 && (TAILQ_EMPTY(&bo->bo_clean.bv_hd) || > > + TAILQ_FIRST(&bo->bo_clean.bv_hd)->b_lblkno >= 0 || > > + TAILQ_FIRST(&bo->bo_clean.bv_hd)->b_lblkno < -2)))) > > panic("ffs_truncate3"); > > BO_UNLOCK(bo); > > #endif /* INVARIANTS */ > > So I tried to rewrite the assert to be more readable, and noted a thing > which I should have noted much earlier. > > The ip->i_din2->di_extsize == 0 test ensures that both extattr blocks > are deallocated. In other words, even with the new information about > lba of the leaked buffers, the assert is still correct, it catched > stray buffer which should not be there. > > Was IO_EXT flag passed to the ffs_truncate() invocation where the > assert ffs_truncate3 fired ? > Yes. The only call to UFS_TRUNCATE() in ufs_inactive() specified both IO_EXT | IO_NORMAL. rick