On Fri, Mar 25, 2011 at 10:35:13AM -0400, Laine Stump wrote:
On 03/25/2011 03:00 AM, Hu Tao wrote:
>On Thu, Mar 24, 2011 at 03:45:26PM -0600, Eric Blake wrote:
>>On 03/24/2011 02:46 AM, Hu Tao wrote:
>>>If two or more disks are mapped to the same image file, operating
>>>on these disks at the same time may corrupt data stored in the
>>>image file.
>>>
>>>changes:
>>>
>>>v2:
>>>
>>>- allow it for read-only disks
>>>- compare source files by inode number
>>>
>>>+
>>>+ if (stat(disk->src,&stat1)) {
>>>+ if (errno != ENOENT) {
>>>+ /* Can't stat file, for safety treate it as conflicted */
>>s/treate/treat/
>>
>>Won't this will fail on root-squash NFS from qemu:///system? (Or does
>>root-squash meant that root can still stat() but just not open() a file?)
>I think it won't. man stat says:
>
> No permissions are required on the file itself (to stat it)
>
>But needs 'r' bit to open().
root-squash means that root can only do what user "nobody" could do
with the filesystem. Although it doesn't need read access on the
file itself, stat() *will* fail if the current user isn't able to
read the directory containing the file being stat'ed. So, if user
nobody doesn't have access to the parent directory (ie if
permissions are xx0, which is very common), then root will not be
able to stat the file - it will just return -1.
To make this work properly for root-squash, you'll need to either 1)
fork a child that does setuid to the qemu user:group and does the
stat() (a real pain, since you'll need to pass the results back to
the parent, and can't reasonably log errors while in the child ==
not recommended), or 2) use virFileOpenAs() to open the file as the
qemu user (virFileOpenAs() uses SCM_RIGHTS and a child process to do
this), then do fstat() of the file to get the info you need, and
close it.
Keeping libvirt working properly with save images, disk images, and
pools on root-squash NFS is a never-ending battle (and can lead to
an intense hatred of NFS!) Basically any time new code is added that
needs to access any of these things, operation on root-squash is
broken. Now that we have virFileOpenAs(), it should be much more
straightforward to code so that root-squash scenarios keep working.
If anyone is adding some code that does anything with files on disk,
they don't have a root-squash NFS setup, and they want some testing
to make sure they haven't broken it, please point out the patch to
me, and I'll make the time to apply it locally and try it on my NFS
setup. (I know I should automatically just see it, but the volume on
libvir-list has increased *a lot* lately, and I frequently find
myself several days behind).
>>Overall, I'm worried that this patch is repeating some of danpb's bigger
>>efforts to integrate a sanlock disk contention avoidance [1]. If a
>>resource manager is properly hooked to all disks, then we can prevent
>>contention between domains (and not limit ourself to just single-domain
>>contention, as in this patch). On the other hand, this seems like an
>>easy enough check to do for a single domain
My opinion is that it's probably much more likely that someone would
mistakenly use the same disk in two different domains (due to
cut-paste of XML) rather than using it twice in the same domain
(that's much easier to notice since the definitions are close to
each other in the same file).
Agreed.
So beyond the fact that this patch can't eliminate all erroneous
duplicate usage, it's not looking for the category that is most
likely, and thus it will probably have more an effect of providing a
false sense of security, rather than of catching any duplicate
usage. That makes me think this may actually do more harm than good.
Agreed.
>>whether or not we get the
>>sanlock code completed (that is, timing wise this looks like it could be
>>ready prior to 0.9.0 while Dan's work is bigger in scope and probably
>>missed the feature freeze for this month's release). So I'm not sure
>>whether to ack this.
Assuming this patch (or something similar) was accepted, would
anybody (aside from those of us using upstream builds directly) ever
get a release that contained this patch, but didn't contain Dan's?
If the answer is no, then I think that's another reason to NACK this
and wait for the Dan's patch.
And thanks to all people involved in this thread for your applies. Now
it's clear that danp's snalock patch is a much better solution, so plz
skip this one.
--
Thanks,
Hu Tao