From owner-freebsd-fs@freebsd.org Sat Jan 16 19:11:24 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 10D54A85C60 for ; Sat, 16 Jan 2016 19:11:24 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from kib.kiev.ua (kib.kiev.ua [IPv6:2001:470:d5e7:1::1]) (using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 806A31E28 for ; Sat, 16 Jan 2016 19:11:23 +0000 (UTC) (envelope-from kostikbel@gmail.com) Received: from tom.home (kostik@localhost [127.0.0.1]) by kib.kiev.ua (8.15.2/8.15.2) with ESMTPS id u0GJBHPO077942 (version=TLSv1 cipher=DHE-RSA-CAMELLIA256-SHA bits=256 verify=NO); Sat, 16 Jan 2016 21:11:17 +0200 (EET) (envelope-from kostikbel@gmail.com) DKIM-Filter: OpenDKIM Filter v2.10.3 kib.kiev.ua u0GJBHPO077942 Received: (from kostik@localhost) by tom.home (8.15.2/8.15.2/Submit) id u0GJBGId077940; Sat, 16 Jan 2016 21:11:16 +0200 (EET) (envelope-from kostikbel@gmail.com) X-Authentication-Warning: tom.home: kostik set sender to kostikbel@gmail.com using -f Date: Sat, 16 Jan 2016 21:11:16 +0200 From: Konstantin Belousov To: Rick Macklem Cc: FreeBSD Filesystems , Kirk McKusick Subject: Re: panic ffs_truncate3 (maybe fuse being evil) Message-ID: <20160116191116.GI3942@kib.kiev.ua> References: <1696608910.154845456.1452438117036.JavaMail.zimbra@uoguelph.ca> <20160110154518.GU3625@kib.kiev.ua> <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> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1817287612.162823118.1452909605928.JavaMail.zimbra@uoguelph.ca> User-Agent: Mutt/1.5.24 (2015-08-30) X-Spam-Status: No, score=-2.0 required=5.0 tests=ALL_TRUSTED,BAYES_00, DKIM_ADSP_CUSTOM_MED,FREEMAIL_FROM,NML_ADSP_CUSTOM_MED autolearn=no autolearn_force=no version=3.4.1 X-Spam-Checker-Version: SpamAssassin 3.4.1 (2015-04-28) on tom.home 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 19:11:24 -0000 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 ?