mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-24 14:45:24 +00:00
virfile: Handle directories in virFileBindMountDevice()
The @src is not always a file. It may also be a directory (for instance qemuDomainCreateDeviceRecursive() assumes that) - even though it doesn't happen usually. Anyway, mount() can mount only a dir onto a dir and a file onto a file. Signed-off-by: Michal Privoznik <mprivozn@redhat.com> Reviewed-by: Pavel Mores <pmores@redhat.com>
This commit is contained in:
parent
140036237e
commit
ed8c503ae8
@ -3743,8 +3743,17 @@ int
|
|||||||
virFileBindMountDevice(const char *src,
|
virFileBindMountDevice(const char *src,
|
||||||
const char *dst)
|
const char *dst)
|
||||||
{
|
{
|
||||||
if (virFileTouch(dst, 0666) < 0)
|
if (!virFileExists(dst)) {
|
||||||
return -1;
|
if (virFileIsDir(src)) {
|
||||||
|
if (virFileMakePath(dst) < 0) {
|
||||||
|
virReportSystemError(errno, _("Unable to make dir %s"), dst);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (virFileTouch(dst, 0666) < 0)
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (mount(src, dst, "none", MS_BIND, NULL) < 0) {
|
if (mount(src, dst, "none", MS_BIND, NULL) < 0) {
|
||||||
virReportSystemError(errno, _("Failed to bind %s on to %s"), src,
|
virReportSystemError(errno, _("Failed to bind %s on to %s"), src,
|
||||||
|
Loading…
Reference in New Issue
Block a user