From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:35844) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WCQ2b-0003eL-W8 for qemu-devel@nongnu.org; Sun, 09 Feb 2014 03:47:12 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WCQ2V-0001A4-V4 for qemu-devel@nongnu.org; Sun, 09 Feb 2014 03:47:05 -0500 Received: from mx1.redhat.com ([209.132.183.28]:7085) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WCQ2V-00019v-Mx for qemu-devel@nongnu.org; Sun, 09 Feb 2014 03:46:59 -0500 From: Kevin Wolf Date: Sun, 9 Feb 2014 09:46:25 +0100 Message-Id: <1391935590-12264-14-git-send-email-kwolf@redhat.com> In-Reply-To: <1391935590-12264-1-git-send-email-kwolf@redhat.com> References: <1391935590-12264-1-git-send-email-kwolf@redhat.com> Subject: [Qemu-devel] [PULL 13/18] raw: Fix BlockLimits passthrough List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: anthony@codemonkey.ws Cc: kwolf@redhat.com, qemu-devel@nongnu.org raw copies over the BlockLimits of bs->file during bdrv_open(). However, since commit d34682cd it is immediately overwritten during bdrv_refresh_limits(). This caused all fields except for opt_transfer_length and opt_mem_alignment (which happen to be correctly inherited in generic code) to be zeroed. Move the BlockLimit assignment to a .bdrv_refresh_limits() callback to make it work again for all fields. Reported-by: Laszlo Ersek Signed-off-by: Kevin Wolf Reviewed-by: Laszlo Ersek --- block/raw_bsd.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/block/raw_bsd.c b/block/raw_bsd.c index 978ae7a..af8706d 100644 --- a/block/raw_bsd.c +++ b/block/raw_bsd.c @@ -90,6 +90,12 @@ static int raw_get_info(BlockDriverState *bs, BlockDriverInfo *bdi) return bdrv_get_info(bs->file, bdi); } +static int raw_refresh_limits(BlockDriverState *bs) +{ + bs->bl = bs->file->bl; + return 0; +} + static int raw_truncate(BlockDriverState *bs, int64_t offset) { return bdrv_truncate(bs->file, offset); @@ -150,7 +156,6 @@ static int raw_open(BlockDriverState *bs, QDict *options, int flags, Error **errp) { bs->sg = bs->file->sg; - bs->bl = bs->file->bl; return 0; } @@ -182,6 +187,7 @@ static BlockDriver bdrv_raw = { .bdrv_getlength = &raw_getlength, .has_variable_length = true, .bdrv_get_info = &raw_get_info, + .bdrv_refresh_limits = &raw_refresh_limits, .bdrv_is_inserted = &raw_is_inserted, .bdrv_media_changed = &raw_media_changed, .bdrv_eject = &raw_eject, -- 1.8.1.4