On 05/24/2013 09:06 AM, Kevin Wolf wrote:
Am 23.05.2013 um 19:44 hat Corey Bryant geschrieben:
Provides low-level VNVRAM functionality that reads and writes data,
such as an entry's binary blob, to a drive image using the block
driver.
Signed-off-by: Corey Bryant <cor...@linux.vnet.ibm.com>
+/*
+ * Increase the drive size if it's too small to fit the VNVRAM data
+ */
+static int vnvram_drv_adjust_size(VNVRAM *vnvram)
+{
+ int rc = 0;
+ int64_t needed_size;
+
+ needed_size = 0;
+
+ if (bdrv_getlength(vnvram->bds) < needed_size) {
+ rc = bdrv_truncate(vnvram->bds, needed_size);
+ if (rc != 0) {
+ DPRINTF("%s: VNVRAM drive too small\n", __func__);
+ }
+ }
+
+ return rc;
+}
This function doesn't make a whole lot of sense. It truncates the file
to size 0 if and only if bdrv_getlength() returns an error.
There's a later patch that adds a "get size" function and changes the
initialization of needed_size to the actual size needed to store VNVRAM
data. Anyway I should probably just include that change in this patch.
I think I'll still need this function or part of it with the new
simplified approach that it looks like we're going to take.
+
+/*
+ * Write a header to the drive with entry count of zero
+ */
+static int vnvram_drv_hdr_create_empty(VNVRAM *vnvram)
+{
+ VNVRAMDrvHdr hdr;
+
+ hdr.version = VNVRAM_CURRENT_VERSION;
+ hdr.magic = VNVRAM_MAGIC;
+ hdr.num_entries = 0;
+
+ vnvram_drv_hdr_cpu_to_be((&hdr));
+
+ if (bdrv_pwrite(vnvram->bds, 0, (&hdr), sizeof(hdr)) != sizeof(hdr)) {
+ DPRINTF("%s: Write of header to drive failed\n", __func__);
+ return -EIO;
+ }
+
+ vnvram->end_offset = sizeof(VNVRAMDrvHdr);
+
+ return 0;
+}
+
+/*
+ * Read the header from the drive
+ */
+static int vnvram_drv_hdr_read(VNVRAM *vnvram, VNVRAMDrvHdr *hdr)
+{
+ if (bdrv_pread(vnvram->bds, 0, hdr, sizeof(*hdr)) != sizeof(*hdr)) {
+ DPRINTF("%s: Read of header from drive failed\n", __func__);
+ return -EIO;
+ }
Why do you turn all errors into -EIO instead of returning the real error
code? (More instances of the same thing follow)
Good point, there's no reason to mask the original error code.
+
+ vnvram_drv_hdr_be_to_cpu(hdr);
+
+ return 0;
+}
+}
Kevin
--
Regards,
Corey Bryant