From: Jeff Cody <jcody@redhat.com>
To: qemu-devel@nongnu.org
Cc: kwolf@redhat.com, stefanha@redhat.com
Subject: [Qemu-devel] [PATCH v8 12/19] block: vhdx - remove BAT file offset bit shifting
Date: Wed, 30 Oct 2013 10:44:49 -0400 [thread overview]
Message-ID: <0f93424a1d29f6716f6de70ce975e6602d866cf5.1383143104.git.jcody@redhat.com> (raw)
In-Reply-To: <cover.1383143104.git.jcody@redhat.com>
In-Reply-To: <cover.1383143104.git.jcody@redhat.com>
Bit shifting can be fun, but in this case it was unnecessary. The
upper 44 bits of the 64-bit BAT entry is specifies the File Offset,
so we shifted the bits to get access to the value.
However, per the spec the value is in MB. So we dutifully shifted back
to the left by 20 bits, to convert to a true uint64_t file offset.
This replaces those steps with just a bit mask, to get rid of the lower
20 bits instead.
Signed-off-by: Jeff Cody <jcody@redhat.com>
---
block/vhdx.c | 6 ++----
block/vhdx.h | 1 -
2 files changed, 2 insertions(+), 5 deletions(-)
diff --git a/block/vhdx.c b/block/vhdx.c
index 050f071..158edab 100644
--- a/block/vhdx.c
+++ b/block/vhdx.c
@@ -985,7 +985,7 @@ static void vhdx_block_translate(BDRVVHDXState *s, int64_t sector_num,
sinfo->bytes_avail = sinfo->sectors_avail << s->logical_sector_size_bits;
- sinfo->file_offset = s->bat[sinfo->bat_idx] >> VHDX_BAT_FILE_OFF_BITS;
+ sinfo->file_offset = s->bat[sinfo->bat_idx] & VHDX_BAT_FILE_OFF_MASK;
sinfo->block_offset = block_offset << s->logical_sector_size_bits;
@@ -999,7 +999,6 @@ static void vhdx_block_translate(BDRVVHDXState *s, int64_t sector_num,
* in the block, and add in the payload data block offset
* in the file, in bytes, to get the final read address */
- sinfo->file_offset <<= 20; /* now in bytes, rather than 1MB units */
sinfo->file_offset += sinfo->block_offset;
}
@@ -1098,8 +1097,7 @@ static void vhdx_update_bat_table_entry(BlockDriverState *bs, BDRVVHDXState *s,
{
/* The BAT entry is a uint64, with 44 bits for the file offset in units of
* 1MB, and 3 bits for the block state. */
- s->bat[sinfo->bat_idx] = ((sinfo->file_offset>>20) <<
- VHDX_BAT_FILE_OFF_BITS);
+ s->bat[sinfo->bat_idx] = sinfo->file_offset;
s->bat[sinfo->bat_idx] |= state & VHDX_BAT_STATE_BIT_MASK;
diff --git a/block/vhdx.h b/block/vhdx.h
index f331548..d3598e0 100644
--- a/block/vhdx.h
+++ b/block/vhdx.h
@@ -229,7 +229,6 @@ typedef struct QEMU_PACKED VHDXLogDataSector {
/* upper 44 bits are the file offset in 1MB units lower 3 bits are the state
other bits are reserved */
#define VHDX_BAT_STATE_BIT_MASK 0x07
-#define VHDX_BAT_FILE_OFF_BITS (64 - 44)
#define VHDX_BAT_FILE_OFF_MASK 0xFFFFFFFFFFF00000 /* upper 44 bits */
typedef uint64_t VHDXBatEntry;
--
1.8.3.1
next prev parent reply other threads:[~2013-10-30 14:45 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-30 14:44 [Qemu-devel] [PATCH v8 00/19] VHDX log replay and write support, .bdrv_create() Jeff Cody
2013-10-30 14:44 ` [Qemu-devel] [PATCH v8 01/19] block: vhdx - minor comments and typo correction Jeff Cody
2013-10-30 14:44 ` [Qemu-devel] [PATCH v8 02/19] block: vhdx - add header update capability Jeff Cody
2013-10-30 14:44 ` [Qemu-devel] [PATCH v8 03/19] block: vhdx code movement - VHDXMetadataEntries and BDRVVHDXState to header Jeff Cody
2013-10-30 14:44 ` [Qemu-devel] [PATCH v8 04/19] block: vhdx - log support struct and defines Jeff Cody
2013-10-30 14:44 ` [Qemu-devel] [PATCH v8 05/19] block: vhdx - break endian translation functions out Jeff Cody
2013-10-30 14:44 ` [Qemu-devel] [PATCH v8 06/19] block: vhdx - update log guid in header, and first write tracker Jeff Cody
2013-10-30 14:44 ` [Qemu-devel] [PATCH v8 07/19] block: vhdx code movement - move vhdx_close() above vhdx_open() Jeff Cody
2013-10-30 14:44 ` [Qemu-devel] [PATCH v8 08/19] block: vhdx - log parsing, replay, and flush support Jeff Cody
2013-10-30 14:44 ` [Qemu-devel] [PATCH v8 09/19] block: vhdx - add region overlap detection for image files Jeff Cody
2013-10-30 14:44 ` [Qemu-devel] [PATCH v8 10/19] block: vhdx - add log write support Jeff Cody
2013-10-30 14:44 ` [Qemu-devel] [PATCH v8 11/19] block: vhdx " Jeff Cody
2013-10-30 14:44 ` Jeff Cody [this message]
2013-10-30 14:44 ` [Qemu-devel] [PATCH v8 13/19] block: vhdx - move more endian translations to vhdx-endian.c Jeff Cody
2013-10-30 14:44 ` [Qemu-devel] [PATCH v8 14/19] block: vhdx - break out code operations to functions Jeff Cody
2013-10-30 14:44 ` [Qemu-devel] [PATCH v8 15/19] block: vhdx - fix comment typos in header, fix incorrect struct fields Jeff Cody
2013-10-30 14:44 ` [Qemu-devel] [PATCH v8 16/19] block: vhdx - add .bdrv_create() support Jeff Cody
2013-10-31 13:09 ` Stefan Hajnoczi
2013-10-30 14:44 ` [Qemu-devel] [PATCH v8 17/19] block: vhdx - update _make_test_img() to filter out vhdx options Jeff Cody
2013-10-30 14:44 ` [Qemu-devel] [PATCH v8 18/19] block: qemu-iotests for vhdx, add write test support Jeff Cody
2013-10-30 14:44 ` [Qemu-devel] [PATCH v8 19/19] block: vhdx qemu-iotest - log replay of data sector Jeff Cody
2013-10-31 13:10 ` [Qemu-devel] [PATCH v8 00/19] VHDX log replay and write support, .bdrv_create() Stefan Hajnoczi
2013-11-01 15:32 ` Jeff Cody
2013-11-04 11:41 ` Kevin Wolf
2013-11-01 5:04 ` [Qemu-devel] VHD suport in QEMU? Philipp Hahn
2013-11-01 9:20 ` Stefan Hajnoczi
2013-11-01 11:53 ` Jeff Cody
2013-11-06 14:34 ` [Qemu-devel] [PATCH v8 00/19] VHDX log replay and write support, .bdrv_create() Stefan Hajnoczi
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=0f93424a1d29f6716f6de70ce975e6602d866cf5.1383143104.git.jcody@redhat.com \
--to=jcody@redhat.com \
--cc=kwolf@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanha@redhat.com \
/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).