From mboxrd@z Thu Jan 1 00:00:00 1970 From: Al Viro Subject: Re: [PATCH 1/2 linux-next] Revert "ufs: fix deadlocks introduced by sb mutex merge" Date: Fri, 5 Jun 2015 23:03:48 +0100 Message-ID: <20150605220348.GA14402@ZenIV.linux.org.uk> References: <1432754131-27425-1-git-send-email-fabf@skynet.be> <20150527145735.e3d1913bc66426038d53be32@linux-foundation.org> <20150604050123.GL7232@ZenIV.linux.org.uk> <1122467636.634568.1433521621076.open-xchange@webmail.nmp.proximus.be> <20150605185018.GX7232@ZenIV.linux.org.uk> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: Andrew Morton , Alexey Khoroshilov , Ian Campbell , Roger Pau Monne , Ian Jackson , Jan Kara , xen-devel , Evgeniy Dushistov , linux-fsdevel@vger.kernel.org To: Fabian Frederick Return-path: Received: from zeniv.linux.org.uk ([195.92.253.2]:33419 "EHLO ZenIV.linux.org.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751028AbbFEWD5 (ORCPT ); Fri, 5 Jun 2015 18:03:57 -0400 Content-Disposition: inline In-Reply-To: <20150605185018.GX7232@ZenIV.linux.org.uk> Sender: linux-fsdevel-owner@vger.kernel.org List-ID: On Fri, Jun 05, 2015 at 07:50:18PM +0100, Al Viro wrote: > Basically, we have > i_mutex: file size changes, contents-affecting syscalls. Per-inode. > truncate_mutex: block pointers changes. Per-inode. > s_lock: block and inode bitmaps changes. Per-filesystem. > > For UFS it's slightly more complicated due to tail packing they are doing for > short files, but most of that complexity is due to having that stuff handled > way too deep in call chain. Oh, lovely... commit 10e5dc Author: Evgeniy Dushistov Date: Sat Jul 1 04:36:24 2006 -0700 [PATCH] ufs: truncate should allocate block for last byte had removed ->truncate() method and missed the fact that vmtrucate() had callers outside of ->setattr(), such as handling of ->prepare_write() partial failures and short copies on write(2) in general. Then we had a long and convoluted series of conversions that ended up with vmtruncate() lifted into ufs_write_failed() and replaced with truncate_pagecache() in there. Through all that, everybody (me included) had not noticed that we *still* do not free blocks allocated by ufs_write_begin() failing halfway through. While we are at it, ufs_write_end() ought to call ufs_write_failed() in case when we'd been called after a short copy (and do the same block freeing). Joy... Folks, is anybody actively maintaining fs/ufs these days?