Re: [Qemu-devel] [PATCH v2] raw-posix: Fetch max sectors for host block device

2016-06-03 Thread Kevin Wolf
Am 03.06.2016 um 04:07 hat Fam Zheng geschrieben:
> This is sometimes a useful value we should count in.
> 
> Signed-off-by: Fam Zheng 

Thanks, applied to the block branch.

Kevin



Re: [Qemu-devel] [PATCH v2] raw-posix: Fetch max sectors for host block device

2016-06-02 Thread Fam Zheng
On Thu, 06/02 20:42, Eric Blake wrote:
> On 06/02/2016 08:07 PM, Fam Zheng wrote:
> > This is sometimes a useful value we should count in.
> > 
> > Signed-off-by: Fam Zheng 
> > ---
> >  block/raw-posix.c | 24 
> >  1 file changed, 24 insertions(+)
> > 
> 
> Will conflict with patches I'm about to post to rework BlockLimits to be
> byte-based, rather than a mix of byte- and sector values.  First one in
> gets to watch the other rebase :)

Thanks!  I'm looking forward to a byte based BlockLimits!

Fam



Re: [Qemu-devel] [PATCH v2] raw-posix: Fetch max sectors for host block device

2016-06-02 Thread Eric Blake
On 06/02/2016 08:07 PM, Fam Zheng wrote:
> This is sometimes a useful value we should count in.
> 
> Signed-off-by: Fam Zheng 
> ---
>  block/raw-posix.c | 24 
>  1 file changed, 24 insertions(+)
> 

Will conflict with patches I'm about to post to rework BlockLimits to be
byte-based, rather than a mix of byte- and sector values.  First one in
gets to watch the other rebase :)

Reviewed-by: Eric Blake 

-- 
Eric Blake   eblake redhat com+1-919-301-3266
Libvirt virtualization library http://libvirt.org



signature.asc
Description: OpenPGP digital signature


[Qemu-devel] [PATCH v2] raw-posix: Fetch max sectors for host block device

2016-06-02 Thread Fam Zheng
This is sometimes a useful value we should count in.

Signed-off-by: Fam Zheng 
---
 block/raw-posix.c | 24 
 1 file changed, 24 insertions(+)

diff --git a/block/raw-posix.c b/block/raw-posix.c
index a4f5a1b..32f9596 100644
--- a/block/raw-posix.c
+++ b/block/raw-posix.c
@@ -729,9 +729,33 @@ static void raw_reopen_abort(BDRVReopenState *state)
 state->opaque = NULL;
 }
 
+static int hdev_get_max_transfer_length(int fd)
+{
+#ifdef BLKSECTGET
+int max_sectors = 0;
+if (ioctl(fd, BLKSECTGET, _sectors) == 0) {
+return max_sectors;
+} else {
+return -errno;
+}
+#else
+return -ENOSYS;
+#endif
+}
+
 static void raw_refresh_limits(BlockDriverState *bs, Error **errp)
 {
 BDRVRawState *s = bs->opaque;
+struct stat st;
+
+if (!fstat(s->fd, )) {
+if (S_ISBLK(st.st_mode)) {
+int ret = hdev_get_max_transfer_length(s->fd);
+if (ret >= 0) {
+bs->bl.max_transfer_length = ret;
+}
+}
+}
 
 raw_probe_alignment(bs, s->fd, errp);
 bs->bl.min_mem_alignment = s->buf_align;
-- 
2.8.2