xfs
[Top] [All Lists]

Re: [PATCH v2 0/10] fs: Introduce FALLOC_FL_INSERT_RANGE for fallocate

To: LukÃÅ Czerner <lczerner@xxxxxxxxxx>
Subject: Re: [PATCH v2 0/10] fs: Introduce FALLOC_FL_INSERT_RANGE for fallocate
From: Theodore Ts'o <tytso@xxxxxxx>
Date: Mon, 2 Jun 2014 11:02:58 -0400
Cc: Namjae Jeon <namjae.jeon@xxxxxxxxxxx>, 'Dave Chinner' <david@xxxxxxxxxxxxx>, 'linux-ext4' <linux-ext4@xxxxxxxxxxxxxxx>, xfs@xxxxxxxxxxx, linux-fsdevel@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx, 'Ashish Sangwan' <a.sangwan@xxxxxxxxxxx>
Delivered-to: xfs@xxxxxxxxxxx
Dkim-signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=thunk.org; s=ef5046eb; h=In-Reply-To:Content-Transfer-Encoding:Content-Type:MIME-Version:References:Message-ID:Subject:Cc:To:From:Date; bh=E2KnvncZeqZPWkScAXj54igcVMu2ny3Fr2jDwp1lT7w=; b=kyPHuxYexmDyI86EEeQ5UQozbbi7cVGwO6qmPZX8hd92nPE88OUS7sUP2QkRBxCGupiKJz0rrUweFbw7HPJKOlpHj1/I8PEEYowe7c75Q0G4ZGLd52x4ZDbnOXzDEol6yGDO5wQsE6Yv14n3AXYkkmKOclO1q8P8E1ubdmhqQ20=;
In-reply-to: <alpine.LFD.2.00.1406021450541.2231@xxxxxxxxxxxxxxxxxxxxx>
Mail-followup-to: Theodore Ts'o <tytso@xxxxxxx>, LukÃÅ Czerner <lczerner@xxxxxxxxxx>, Namjae Jeon <namjae.jeon@xxxxxxxxxxx>, 'Dave Chinner' <david@xxxxxxxxxxxxx>, 'linux-ext4' <linux-ext4@xxxxxxxxxxxxxxx>, xfs@xxxxxxxxxxx, linux-fsdevel@xxxxxxxxxxxxxxx, linux-kernel@xxxxxxxxxxxxxxx, 'Ashish Sangwan' <a.sangwan@xxxxxxxxxxx>
References: <003601cf6aa7$883103b0$98930b10$@samsung.com> <alpine.LFD.2.00.1405301238190.2009@xxxxxxxxxxxxxxxxxxxxx> <000d01cf7ca3$98335c50$c89a14f0$@samsung.com> <alpine.LFD.2.00.1406021204540.2231@xxxxxxxxxxxxxxxxxxxxx> <002201cf7e59$2e684c10$8b38e430$@samsung.com> <alpine.LFD.2.00.1406021450541.2231@xxxxxxxxxxxxxxxxxxxxx>
User-agent: Mutt/1.5.23 (2014-03-12)
On Mon, Jun 02, 2014 at 03:06:13PM +0200, LukÃÅ Czerner wrote:
> > > So what will happen when there is not enough space when "inserting a
> > > range" ? And how should user proceed from there ?
> > If insert range fails with an ENOSPC error, user could use collapse
> > range on the same range to remove the hole.
> > And after freeing more space, he can again try inserting range.
> > Ofcourse, this type of guidance should be properly documented in
> > manpage. When updating fallocate(2) manpage, I will keep  in mind to
> > describe ENOSPC handling.
> 
> Why collapse ? The hole is already there right ? Why not just use
> fallocate to allocate the space for the hole. And that's my point
> actually. Why not do it this way in the first place, because this is
> really counterintuitive.

It's worse than that.  It's possible that the reason why you got the
ENOSPC warning was because the operation to move the extents down
required allocating a block, and it was *that* block allocation which
failed.  So it's not deterministic whether or not the file's extent
mappings were modified after a ENOSPC error, and so it's not clear
whether or not a collapse_range function will undo the range that had
been inserted --- or whether it ends up deleting existing data blocks.

In generally, you really want system calls to have all-or-nothing
effects, where if the system call returns an error, the state of the
file has not been changed.  And for that reason, I agree with LukÃÅ
that it is really a good idea to decouple moving the blocks down, and
allocating space --- and to make sure that if there is any failure
while inserting the range, the state of the file is not modified at all.

Cheers,

                                        - Ted

<Prev in Thread] Current Thread [Next in Thread>