diff mbox

[2/3] mirror: limit niov to IOV_MAX elements, again

Message ID 1466625064-11280-3-git-send-email-jsnow@redhat.com (mailing list archive)
State New, archived
Headers show

Commit Message

John Snow June 22, 2016, 7:51 p.m. UTC
During the refactor of mirror_iteration in e5b43573,
we regressed the fix introduced in cae98cb8.

This patch re-adds IOV_MAX checking to cases where we
aren't checking alignment (and size) already.

Signed-off-by: John Snow <jsnow@redhat.com>
---
 block/mirror.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Eric Blake June 22, 2016, 8:29 p.m. UTC | #1
On 06/22/2016 01:51 PM, John Snow wrote:
> During the refactor of mirror_iteration in e5b43573,
> we regressed the fix introduced in cae98cb8.
> 
> This patch re-adds IOV_MAX checking to cases where we
> aren't checking alignment (and size) already.
> 
> Signed-off-by: John Snow <jsnow@redhat.com>
> ---
>  block/mirror.c | 3 +++
>  1 file changed, 3 insertions(+)

Reviewed-by: Eric Blake <eblake@redhat.com>

> 
> diff --git a/block/mirror.c b/block/mirror.c
> index 2ba9642..377339d 100644
> --- a/block/mirror.c
> +++ b/block/mirror.c
> @@ -231,11 +231,14 @@ static int mirror_do_read(MirrorBlockJob *s, int64_t sector_num,
>      int sectors_per_chunk, nb_chunks;
>      int ret;
>      MirrorOp *op;
> +    int max_sectors;
>  
>      sectors_per_chunk = s->granularity >> BDRV_SECTOR_BITS;
> +    max_sectors = sectors_per_chunk * s->max_iov;
>  
>      /* We can only handle as much as buf_size at a time. */
>      nb_sectors = MIN(s->buf_size >> BDRV_SECTOR_BITS, nb_sectors);
> +    nb_sectors = MIN(max_sectors, nb_sectors);
>      assert(nb_sectors);
>      ret = nb_sectors;
>  
>
Fam Zheng June 23, 2016, 12:39 a.m. UTC | #2
On Wed, 06/22 15:51, John Snow wrote:
> During the refactor of mirror_iteration in e5b43573,
> we regressed the fix introduced in cae98cb8.
> 
> This patch re-adds IOV_MAX checking to cases where we
> aren't checking alignment (and size) already.
> 
> Signed-off-by: John Snow <jsnow@redhat.com>
> ---
>  block/mirror.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/block/mirror.c b/block/mirror.c
> index 2ba9642..377339d 100644
> --- a/block/mirror.c
> +++ b/block/mirror.c
> @@ -231,11 +231,14 @@ static int mirror_do_read(MirrorBlockJob *s, int64_t sector_num,
>      int sectors_per_chunk, nb_chunks;
>      int ret;
>      MirrorOp *op;
> +    int max_sectors;
>  
>      sectors_per_chunk = s->granularity >> BDRV_SECTOR_BITS;
> +    max_sectors = sectors_per_chunk * s->max_iov;
>  
>      /* We can only handle as much as buf_size at a time. */
>      nb_sectors = MIN(s->buf_size >> BDRV_SECTOR_BITS, nb_sectors);
> +    nb_sectors = MIN(max_sectors, nb_sectors);
>      assert(nb_sectors);
>      ret = nb_sectors;
>  
> -- 
> 2.4.11
> 

Reviewed-by: Fam Zheng <famz@redhat.com>
diff mbox

Patch

diff --git a/block/mirror.c b/block/mirror.c
index 2ba9642..377339d 100644
--- a/block/mirror.c
+++ b/block/mirror.c
@@ -231,11 +231,14 @@  static int mirror_do_read(MirrorBlockJob *s, int64_t sector_num,
     int sectors_per_chunk, nb_chunks;
     int ret;
     MirrorOp *op;
+    int max_sectors;
 
     sectors_per_chunk = s->granularity >> BDRV_SECTOR_BITS;
+    max_sectors = sectors_per_chunk * s->max_iov;
 
     /* We can only handle as much as buf_size at a time. */
     nb_sectors = MIN(s->buf_size >> BDRV_SECTOR_BITS, nb_sectors);
+    nb_sectors = MIN(max_sectors, nb_sectors);
     assert(nb_sectors);
     ret = nb_sectors;