All of lore.kernel.org
 help / color / mirror / Atom feed
* It is safe to execute a fallocate on a opened and in-use  file?
@ 2017-06-10 18:09 Gionatan Danti
  2017-06-10 21:18 ` Darrick J. Wong
  0 siblings, 1 reply; 3+ messages in thread
From: Gionatan Danti @ 2017-06-10 18:09 UTC (permalink / raw)
  To: linux-xfs; +Cc: g.danti

Hi all,
I would like to understand if it is safe, or not, to execute a fallocate 
on a opened an possibly in-use file.

Scenario: a running Qemu/KVM virtual machine that need its RAW-image 
vdisk to be expanded.

I normally stop the virtual machine and issue "fallocate -l <newsize> 
<filename>", then I restart it. I wonder if I can skip the stop/start 
phases, going directly for the fallocate.

Reasoning on the question, I naively think that fallocating when the VM 
is writing on the file has the potential to cause corruption, due to 
this racing condition:
- I execute fallocate;
- the filesystem begins searching for to-be-allocated chunks, and finds 
one;
- the VM suddenly writes to the very same block found on the previous 
step;
- the filesystem continue allocating the previos block, accidentally 
discarding the just-written data.

This scenario can be avoided if the relevant critical path are protected 
with mutex (or equivalent structures). Is it the case?

In general, how to consider concurrent metadata updates for the same 
file/block? Should I expect file corruption, similar to concurrently 
writing data to the same file/block?

Thanks.

-- 
Danti Gionatan
Supporto Tecnico
Assyoma S.r.l. - www.assyoma.it
email: g.danti@assyoma.it - info@assyoma.it
GPG public key ID: FF5F32A8

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2017-06-10 22:00 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-06-10 18:09 It is safe to execute a fallocate on a opened and in-use file? Gionatan Danti
2017-06-10 21:18 ` Darrick J. Wong
2017-06-10 22:00   ` Gionatan Danti

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.