Revision 7d8abfcb qemu-io.c
b/qemu-io.c | ||
---|---|---|
358 | 358 |
|
359 | 359 |
if (cnt < 0) { |
360 | 360 |
printf("read failed: %s\n", strerror(-cnt)); |
361 |
return 0;
|
|
361 |
goto out;
|
|
362 | 362 |
} |
363 | 363 |
|
364 | 364 |
if (Pflag) { |
... | ... | |
373 | 373 |
} |
374 | 374 |
|
375 | 375 |
if (qflag) |
376 |
return 0;
|
|
376 |
goto out;
|
|
377 | 377 |
|
378 | 378 |
if (vflag) |
379 | 379 |
dump_buffer(buf, offset, count); |
... | ... | |
382 | 382 |
t2 = tsub(t2, t1); |
383 | 383 |
print_report("read", &t2, offset, count, total, cnt, Cflag); |
384 | 384 |
|
385 |
out: |
|
385 | 386 |
qemu_io_free(buf); |
386 | 387 |
|
387 | 388 |
return 0; |
... | ... | |
480 | 481 |
|
481 | 482 |
if (cnt < 0) { |
482 | 483 |
printf("readv failed: %s\n", strerror(-cnt)); |
483 |
return 0;
|
|
484 |
goto out;
|
|
484 | 485 |
} |
485 | 486 |
|
486 | 487 |
if (Pflag) { |
... | ... | |
495 | 496 |
} |
496 | 497 |
|
497 | 498 |
if (qflag) |
498 |
return 0;
|
|
499 |
goto out;
|
|
499 | 500 |
|
500 | 501 |
if (vflag) |
501 | 502 |
dump_buffer(buf, offset, qiov.size); |
... | ... | |
504 | 505 |
t2 = tsub(t2, t1); |
505 | 506 |
print_report("read", &t2, offset, qiov.size, total, cnt, Cflag); |
506 | 507 |
|
508 |
out: |
|
507 | 509 |
qemu_io_free(buf); |
508 |
|
|
509 | 510 |
return 0; |
510 | 511 |
} |
511 | 512 |
|
... | ... | |
613 | 614 |
|
614 | 615 |
if (cnt < 0) { |
615 | 616 |
printf("write failed: %s\n", strerror(-cnt)); |
616 |
return 0;
|
|
617 |
goto out;
|
|
617 | 618 |
} |
618 | 619 |
|
619 | 620 |
if (qflag) |
620 |
return 0;
|
|
621 |
goto out;
|
|
621 | 622 |
|
622 | 623 |
/* Finally, report back -- -C gives a parsable format */ |
623 | 624 |
t2 = tsub(t2, t1); |
624 | 625 |
print_report("wrote", &t2, offset, count, total, cnt, Cflag); |
625 | 626 |
|
627 |
out: |
|
626 | 628 |
qemu_io_free(buf); |
627 | 629 |
|
628 | 630 |
return 0; |
... | ... | |
713 | 715 |
|
714 | 716 |
if (cnt < 0) { |
715 | 717 |
printf("writev failed: %s\n", strerror(-cnt)); |
716 |
return 0;
|
|
718 |
goto out;
|
|
717 | 719 |
} |
718 | 720 |
|
719 | 721 |
if (qflag) |
720 |
return 0;
|
|
722 |
goto out;
|
|
721 | 723 |
|
722 | 724 |
/* Finally, report back -- -C gives a parsable format */ |
723 | 725 |
t2 = tsub(t2, t1); |
724 | 726 |
print_report("wrote", &t2, offset, qiov.size, total, cnt, Cflag); |
725 |
|
|
727 |
out: |
|
726 | 728 |
qemu_io_free(buf); |
727 |
|
|
728 | 729 |
return 0; |
729 | 730 |
} |
730 | 731 |
|
... | ... | |
761 | 762 |
|
762 | 763 |
if (ret < 0) { |
763 | 764 |
printf("aio_write failed: %s\n", strerror(-ret)); |
764 |
return;
|
|
765 |
goto out;
|
|
765 | 766 |
} |
766 | 767 |
|
767 | 768 |
if (ctx->qflag) { |
768 |
return;
|
|
769 |
goto out;
|
|
769 | 770 |
} |
770 | 771 |
|
771 | 772 |
/* Finally, report back -- -C gives a parsable format */ |
772 | 773 |
t2 = tsub(t2, ctx->t1); |
773 | 774 |
print_report("wrote", &t2, ctx->offset, ctx->qiov.size, |
774 | 775 |
ctx->qiov.size, 1, ctx->Cflag); |
775 |
|
|
776 |
out: |
|
776 | 777 |
qemu_io_free(ctx->buf); |
777 | 778 |
free(ctx); |
778 | 779 |
} |
... | ... | |
789 | 790 |
|
790 | 791 |
if (ret < 0) { |
791 | 792 |
printf("readv failed: %s\n", strerror(-ret)); |
792 |
return;
|
|
793 |
goto out;
|
|
793 | 794 |
} |
794 | 795 |
|
795 | 796 |
if (ctx->Pflag) { |
... | ... | |
805 | 806 |
} |
806 | 807 |
|
807 | 808 |
if (ctx->qflag) { |
808 |
return;
|
|
809 |
goto out;
|
|
809 | 810 |
} |
810 | 811 |
|
811 | 812 |
if (ctx->vflag) { |
... | ... | |
816 | 817 |
t2 = tsub(t2, ctx->t1); |
817 | 818 |
print_report("read", &t2, ctx->offset, ctx->qiov.size, |
818 | 819 |
ctx->qiov.size, 1, ctx->Cflag); |
819 |
|
|
820 |
out: |
|
820 | 821 |
qemu_io_free(ctx->buf); |
821 | 822 |
free(ctx); |
822 | 823 |
} |
... | ... | |
865 | 866 |
ctx->vflag = 1; |
866 | 867 |
break; |
867 | 868 |
default: |
869 |
free(ctx); |
|
868 | 870 |
return command_usage(&aio_read_cmd); |
869 | 871 |
} |
870 | 872 |
} |
871 | 873 |
|
872 |
if (optind > argc - 2) |
|
874 |
if (optind > argc - 2) { |
|
875 |
free(ctx); |
|
873 | 876 |
return command_usage(&aio_read_cmd); |
874 |
|
|
877 |
} |
|
875 | 878 |
|
876 | 879 |
ctx->offset = cvtnum(argv[optind]); |
877 | 880 |
if (ctx->offset < 0) { |
878 | 881 |
printf("non-numeric length argument -- %s\n", argv[optind]); |
882 |
free(ctx); |
|
879 | 883 |
return 0; |
880 | 884 |
} |
881 | 885 |
optind++; |
... | ... | |
883 | 887 |
if (ctx->offset & 0x1ff) { |
884 | 888 |
printf("offset %lld is not sector aligned\n", |
885 | 889 |
(long long)ctx->offset); |
890 |
free(ctx); |
|
886 | 891 |
return 0; |
887 | 892 |
} |
888 | 893 |
|
... | ... | |
892 | 897 |
gettimeofday(&ctx->t1, NULL); |
893 | 898 |
acb = bdrv_aio_readv(bs, ctx->offset >> 9, &ctx->qiov, |
894 | 899 |
ctx->qiov.size >> 9, aio_read_done, ctx); |
895 |
if (!acb) |
|
900 |
if (!acb) { |
|
901 |
free(ctx->buf); |
|
902 |
free(ctx); |
|
896 | 903 |
return -EIO; |
904 |
} |
|
897 | 905 |
|
898 | 906 |
return 0; |
899 | 907 |
} |
... | ... | |
952 | 960 |
pattern = atoi(optarg); |
953 | 961 |
break; |
954 | 962 |
default: |
963 |
free(ctx); |
|
955 | 964 |
return command_usage(&aio_write_cmd); |
956 | 965 |
} |
957 | 966 |
} |
958 | 967 |
|
959 |
if (optind > argc - 2) |
|
968 |
if (optind > argc - 2) { |
|
969 |
free(ctx); |
|
960 | 970 |
return command_usage(&aio_write_cmd); |
971 |
} |
|
961 | 972 |
|
962 | 973 |
ctx->offset = cvtnum(argv[optind]); |
963 | 974 |
if (ctx->offset < 0) { |
964 | 975 |
printf("non-numeric length argument -- %s\n", argv[optind]); |
976 |
free(ctx); |
|
965 | 977 |
return 0; |
966 | 978 |
} |
967 | 979 |
optind++; |
... | ... | |
969 | 981 |
if (ctx->offset & 0x1ff) { |
970 | 982 |
printf("offset %lld is not sector aligned\n", |
971 | 983 |
(long long)ctx->offset); |
984 |
free(ctx); |
|
972 | 985 |
return 0; |
973 | 986 |
} |
974 | 987 |
|
... | ... | |
978 | 991 |
gettimeofday(&ctx->t1, NULL); |
979 | 992 |
acb = bdrv_aio_writev(bs, ctx->offset >> 9, &ctx->qiov, |
980 | 993 |
ctx->qiov.size >> 9, aio_write_done, ctx); |
981 |
if (!acb) |
|
994 |
if (!acb) { |
|
995 |
free(ctx->buf); |
|
996 |
free(ctx); |
|
982 | 997 |
return -EIO; |
998 |
} |
|
983 | 999 |
|
984 | 1000 |
return 0; |
985 | 1001 |
} |
Also available in: Unified diff