Re: [dm-devel] Re: [PATCH 3/3] Add timeout feature
From: Eric Sandeen <hidden>
Date: 2008-07-03 14:46:42
Also in:
dm-devel, linux-fsdevel, linux-xfs, lkml
Takashi Sato wrote:
Hi Christoph and Alasdair,quoted
On Tue, Jul 01, 2008 at 04:10:26AM -0400, Christoph Hellwig wrote:quoted
I still disagree with this whole patch.Same here - if you want a timeout, what stops you from implementing it in a userspace process? If your concern is that the process might die without thawing the filesystem, take a look at the userspace LVM/multipath code for ideas - lock into memory, disable OOM killer, run from ramdisk etc. In practice, those techniques seem to be good enough.If the freezer accesses the frozen filesystem and causes a deadlock, the above ideas can't solve it. The timeout is useful to solve such a deadlock. If you don't need the timeout, you can disable it by specifying "0" as the timeout period.quoted
Similarly if a device-mapper device is involved, how should the following sequence behave - A, B or C? 1. dmsetup suspend (freezes) 2. FIFREEZE 3. FITHAW 4. dmsetup resume (thaws)[...]quoted
C: 1 succeeds, freezes 2 fails, remains frozen 3 fails (because device-mapper owns the freeze/thaw), remains frozen 4 succeeds, thawsI think C is appropriate and the following change makes it possible. How do you think? 1. Add the new bit flag(BD_FREEZE_DM) in block_device.bd_state. It means that the volume is frozen by the device-mapper.
Will we add a new bit/flag for every possible subysstem that may call freeze/thaw? This seems odd to me. They are different paths to the same underlying mechanism; it should not matter if it is an existing freeze from DM or via FIFREEZE or via the xfs ioctl, or any other mechanism should it? I don't think this generic interface should use any flag named *_DM, personally. It seems that nested freeze requests must be handled in a generic way regardless of what initiates any of the requests? Refcounting freezes as Alasdair suggests seems to make sense to me, i.e. freeze, freeze, thaw, thaw leads to:
quoted
quoted
quoted
1 (freeze) succeeds, freezes (frozen++) 2 (freeze) succeeds, remains frozen (frozen++) 3 (thaw) succeeds, remains frozen (frozen--) 4 (thaw) succeeds, thaws (frozen--)
that way each caller of freeze is guaranteed that the fs is frozen at least until they call thaw? Thanks, -Eric