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__26848.6935332932$1433541962$gmane$org@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" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: <20150605185018.GX7232@ZenIV.linux.org.uk> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Fabian Frederick Cc: Jan Kara , Ian Campbell , Ian Jackson , xen-devel , linux-fsdevel@vger.kernel.org, Evgeniy Dushistov , Andrew Morton , Alexey Khoroshilov , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org 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?