qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: Haozhong Zhang <haozhong.zhang@intel.com>,
	qemu-devel@nongnu.org, Eduardo Habkost <ehabkost@redhat.com>,
	Igor Mammedov <imammedo@redhat.com>
Cc: Peter Crosthwaite <crosthwaite.peter@gmail.com>,
	Richard Henderson <rth@twiddle.net>
Subject: Re: [Qemu-devel] [PATCH v2 0/3] Improve truncation behavior of memory-backend-file
Date: Thu, 27 Oct 2016 14:03:53 +0200	[thread overview]
Message-ID: <dc094c30-291b-1553-f9a5-02a16cc40660@redhat.com> (raw)
In-Reply-To: <20161027042300.5929-1-haozhong.zhang@intel.com>



On 27/10/2016 06:22, Haozhong Zhang wrote:
> For a mmeory backend file, e.g.
>     -object memory-backend-file,mem-path=foo,size=SZ,...
> the size of the backend file 'foo' is specified by the 'size'
> option. If the specified size 'SZ' does not match the actual size of
> file 'foo', QEMU will truncate the backend file 'foo'. In certain
> usage scenarios (e.g. vNVDIMM), the truncation may corrupt the
> existing data in the file.
> 
> Patch 1 in this series avoids such data corruption by disabling
> truncating non-empty backend files. If a non-existing file, an empty
> file or a directory is specified by 'mem-path' option, QEMU will
> truncate the backend file to the size specified by 'size' option.
> 
> Patch 2 adds an additional check to avoid creating a memory backend
> that can not be hold in the backend file. For a non-empty backend
> file, if its size is smaller than 'size' option, QEMU will report
> error.
> 
> Patch 3 makes the option 'size' optional. It's to avoid the misusing
> of 'size' option. If the user is uncertain about the backend file
> size, they can skip the 'size' option and let QEMU use the actual file
> size.  If a non-existing file, an empty file or a directory is
> specified by 'mem-path' option, the 'size' option is still needed.
> 
> Changes since v1:
>  * Fix errors in v1 patches.
>  * Split truncation skip and size check into separate patches.
>  * Do not error out for backend file whose size is unknown.
>  * Only error out when file size is smaller than 'size' option.
>  * Change the error handling path of file_backend_memory_alloc().
>  * Do not duplicate the setting of block->used_length/max_length in
>    file_ram_alloc().

Nice.  I'm squashing this in for slightly better error messages.

Thanks,

Paolo

diff --git a/exec.c b/exec.c
index d9034b1..eea9c10 100644
--- a/exec.c
+++ b/exec.c
@@ -1267,6 +1267,13 @@ static void *file_ram_alloc(RAMBlock *block,
                 break;
             }
         } else if (errno == EISDIR) {
+            if (!mem_size) {
+                error_setg_errno(errp, errno,
+                                 "%s is a directory but no 'size' option was specified",
+                                 path);
+                goto error;
+            }
+
             /* @path names a directory, create a file there */
             /* Make name safe to use with mkstemp by replacing '/' with '_'. */
             sanitized_name = g_strdup(memory_region_name(block->mr));

> 
> Haozhong Zhang (3):
>   exec.c: do not truncate non-empty memory backend file
>   exec.c: check memory backend file size with 'size' option
>   hostmem-file: make option 'size' optional
> 
>  backends/hostmem-file.c | 28 ++++++++++++++++++-------
>  exec.c                  | 56 +++++++++++++++++++++++++++++++++++++++----------
>  2 files changed, 65 insertions(+), 19 deletions(-)
> 

      parent reply	other threads:[~2016-10-27 12:04 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-10-27  4:22 [Qemu-devel] [PATCH v2 0/3] Improve truncation behavior of memory-backend-file Haozhong Zhang
2016-10-27  4:22 ` [Qemu-devel] [PATCH v2 1/3] exec.c: do not truncate non-empty memory backend file Haozhong Zhang
2016-10-27 14:31   ` Eduardo Habkost
2016-10-28  2:07     ` Haozhong Zhang
2016-10-31 17:21       ` Eduardo Habkost
2016-10-27  4:22 ` [Qemu-devel] [PATCH v2 2/3] exec.c: check memory backend file size with 'size' option Haozhong Zhang
2016-10-27 14:32   ` Eduardo Habkost
2016-10-31 17:23   ` Eduardo Habkost
2016-10-31 17:56     ` Paolo Bonzini
2016-11-02  1:05   ` [Qemu-devel] [RESEND PATCH " Haozhong Zhang
2016-10-27  4:23 ` [Qemu-devel] [PATCH v2 3/3] hostmem-file: make option 'size' optional Haozhong Zhang
2016-10-27 14:55   ` Eduardo Habkost
2016-10-28  2:06     ` Haozhong Zhang
2016-10-28  5:57       ` Haozhong Zhang
2016-10-31 18:18       ` Eduardo Habkost
2016-11-02  2:08         ` Haozhong Zhang
2016-10-27 12:03 ` Paolo Bonzini [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=dc094c30-291b-1553-f9a5-02a16cc40660@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=crosthwaite.peter@gmail.com \
    --cc=ehabkost@redhat.com \
    --cc=haozhong.zhang@intel.com \
    --cc=imammedo@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=rth@twiddle.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).