diff --git a/block/bio.c b/block/bio.c
index 3d28d4723f6f2f30c59bb2ef72d888e3b564ca22..dd3b2a01c9bfaacd1dd3d45d2fe97960ebe7a522 100644
--- a/block/bio.c
+++ b/block/bio.c
@@ -1081,15 +1081,15 @@ int bio_iov_iter_get_pages(struct bio *bio, struct iov_iter *iter)
 		bio_iov_bvec_set(bio, iter);
 		bio_set_flag(bio, BIO_NO_PAGE_REF);
 		return 0;
-	} else {
-		do {
-			if (bio_op(bio) == REQ_OP_ZONE_APPEND)
-				ret = __bio_iov_append_get_pages(bio, iter);
-			else
-				ret = __bio_iov_iter_get_pages(bio, iter);
-		} while (!ret && iov_iter_count(iter) && !bio_full(bio, 0));
 	}
 
+	do {
+		if (bio_op(bio) == REQ_OP_ZONE_APPEND)
+			ret = __bio_iov_append_get_pages(bio, iter);
+		else
+			ret = __bio_iov_iter_get_pages(bio, iter);
+	} while (!ret && iov_iter_count(iter) && !bio_full(bio, 0));
+
 	/* don't account direct I/O as memory stall */
 	bio_clear_flag(bio, BIO_WORKINGSET);
 	return bio->bi_vcnt ? 0 : ret;