ext4_blockdev: don't make zero length block read/write operations
authorgkostka <kostka.grzegorz@gmail.com>
Thu, 1 Dec 2016 15:37:23 +0000 (16:37 +0100)
committergkostka <kostka.grzegorz@gmail.com>
Thu, 1 Dec 2016 15:37:23 +0000 (16:37 +0100)
Patch submitted by g.tywanczuk@posnet.com.

src/ext4_blockdev.c

index 19653bb8d8c0603d6f804946a08a315780009d91..205cd7a9ace9f6bfaae020842c0920259dcc4953 100644 (file)
@@ -350,14 +350,16 @@ int ext4_block_writebytes(struct ext4_blockdev *bdev, uint64_t off,
 
        /*Aligned data*/
        blen = len / bdev->bdif->ph_bsize;
-       r = ext4_bdif_bwrite(bdev, p, block_idx, blen);
-       if (r != EOK)
-               return r;
+       if (blen != 0) {
+               r = ext4_bdif_bwrite(bdev, p, block_idx, blen);
+               if (r != EOK)
+                       return r;
 
-       p += bdev->bdif->ph_bsize * blen;
-       len -= bdev->bdif->ph_bsize * blen;
+               p += bdev->bdif->ph_bsize * blen;
+               len -= bdev->bdif->ph_bsize * blen;
 
-       block_idx += blen;
+               block_idx += blen;
+       }
 
        /*Rest of the data*/
        if (len) {
@@ -416,14 +418,16 @@ int ext4_block_readbytes(struct ext4_blockdev *bdev, uint64_t off, void *buf,
        /*Aligned data*/
        blen = len / bdev->bdif->ph_bsize;
 
-       r = ext4_bdif_bread(bdev, p, block_idx, blen);
-       if (r != EOK)
-               return r;
+       if (blen != 0) {
+               r = ext4_bdif_bread(bdev, p, block_idx, blen);
+               if (r != EOK)
+                       return r;
 
-       p += bdev->bdif->ph_bsize * blen;
-       len -= bdev->bdif->ph_bsize * blen;
+               p += bdev->bdif->ph_bsize * blen;
+               len -= bdev->bdif->ph_bsize * blen;
 
-       block_idx += blen;
+               block_idx += blen;
+       }
 
        /*Rest of the data*/
        if (len) {