From 58f9a6a8e5585a84c3c561c995ea5d73b376d77a Mon Sep 17 00:00:00 2001 From: Eric Sandeen Date: Mon, 14 Jun 2021 12:07:17 -0500 Subject: [PATCH] New upstream version 1.3.0 --- .gitignore | 2 + 0001-fix-parallel-build-failures.patch | 70 - ...x-parallel-build-of-btt-and-blkiomon.patch | 38 - F7D358FB2971E0A6.asc | 1830 +++++++++++++++++ blktrace-fix-btt-overflow.patch | 144 -- blktrace-python3.patch | 192 -- blktrace.spec | 29 +- sources | 3 +- 8 files changed, 1850 insertions(+), 458 deletions(-) delete mode 100644 0001-fix-parallel-build-failures.patch delete mode 100644 0001-fix-parallel-build-of-btt-and-blkiomon.patch create mode 100644 F7D358FB2971E0A6.asc delete mode 100644 blktrace-fix-btt-overflow.patch delete mode 100644 blktrace-python3.patch diff --git a/.gitignore b/.gitignore index ed7f581..fe97cb2 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,5 @@ blktrace-1.0.1.tar.bz2 /blktrace-1.0.5.tar.bz2 /blktrace-1.1.0.tar.bz2 /blktrace-1.2.0.tar.bz2 +/blktrace-1.3.0.tar.bz2 +/blktrace-1.3.0.tar.bz2.asc diff --git a/0001-fix-parallel-build-failures.patch b/0001-fix-parallel-build-failures.patch deleted file mode 100644 index b501dd8..0000000 --- a/0001-fix-parallel-build-failures.patch +++ /dev/null @@ -1,70 +0,0 @@ -From 519fd9a5d08d85f3d9cb4192d624fe8351e40232 Mon Sep 17 00:00:00 2001 -From: "Robin H. Johnson" -Date: Tue, 23 Jan 2018 17:57:55 -0500 -Subject: [PATCH] fix parallel build failures - -When building in parallel, the btreplay/btrecord and btreplay/btreplay -targets cause make to kick off two jobs for `make -C btreplay` and they -sometimes end up clobbering each other. We could fix this by making one -a dependency of the other, but it's a bit cleaner to refactor things to -be based on subdirs. This way changes in subdirs also get noticed: - $ touch btreplay/*.[ch] - $ make - - -Signed-off-by: Robin H. Johnson -Signed-off-by: Mike Frysinger -Signed-off-by: Jens Axboe ---- - Makefile | 24 ++++++++++-------------- - 1 file changed, 10 insertions(+), 14 deletions(-) - -diff --git a/Makefile b/Makefile -index 68de591..5917814 100644 ---- a/Makefile -+++ b/Makefile -@@ -4,23 +4,19 @@ ALL_CFLAGS = $(CFLAGS) -D_GNU_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 - PROGS = blkparse blktrace verify_blkparse blkrawverify blkiomon - LIBS = -lpthread - SCRIPTS = btrace -+SUBDIRS = btreplay btt iowatcher - --ALL = $(PROGS) $(SCRIPTS) btt/btt btreplay/btrecord btreplay/btreplay \ -+ALL = $(PROGS) $(SCRIPTS) -+INSTALL_ALL = $(ALL) btt/btt btreplay/btrecord btreplay/btreplay \ - btt/bno_plot.py iowatcher/iowatcher - --all: $(ALL) -+all: $(ALL) $(SUBDIRS) - --btt/btt: -- $(MAKE) -C btt -- --iowatcher/iowatcher: -- $(MAKE) -C iowatcher -- --btreplay/btrecord: -- $(MAKE) -C btreplay -- --btreplay/btreplay: -- $(MAKE) -C btreplay -+# We always descend into subdirs because they contain their own dependency -+# information which we don't track in this top level Makefile. -+$(SUBDIRS): -+ $(MAKE) -C $@ -+.PHONY: $(SUBDIRS) - - %.o: %.c - $(CC) -o $*.o -c $(ALL_CFLAGS) $< -@@ -85,7 +81,7 @@ install: all - $(INSTALL) -m 755 -d $(DESTDIR)$(bindir) - $(INSTALL) -m 755 -d $(DESTDIR)$(mandir)/man1 - $(INSTALL) -m 755 -d $(DESTDIR)$(mandir)/man8 -- $(INSTALL) -m 755 $(ALL) $(DESTDIR)$(bindir) -+ $(INSTALL) -m 755 $(INSTALL_ALL) $(DESTDIR)$(bindir) - $(INSTALL) -m 644 doc/*.1 $(DESTDIR)$(mandir)/man1 - $(INSTALL) -m 644 doc/*.8 $(DESTDIR)$(mandir)/man8 - --- -2.25.3 - diff --git a/0001-fix-parallel-build-of-btt-and-blkiomon.patch b/0001-fix-parallel-build-of-btt-and-blkiomon.patch deleted file mode 100644 index 794f93a..0000000 --- a/0001-fix-parallel-build-of-btt-and-blkiomon.patch +++ /dev/null @@ -1,38 +0,0 @@ -From f4f8ef7cdea138cfaa2f3ca0ee31fa23d3bcf1cc Mon Sep 17 00:00:00 2001 -From: Gwendal Grignou -Date: Thu, 16 Jan 2020 12:33:26 -0800 -Subject: [PATCH] fix parallel build of btt and blkiomon - -rbtree.c is used by both binaries. It is possible that when make -C btt -is invoked rbtree.o does not exist yet, but is already schedule by the -compilation of blkiomon. That could result in recompiling rbtree.o again -for btt/btt. -In that case, at install time, make will recompile blkiomon which can -fail in gentoo, because CC variable is not overriden by ebuild script at -install time. (see https://bugs.gentoo.org/705594) - -Add a dependency on SUBDIRS to wait for all binary in . to be compiled. -It will guarante rbtree.o exists. - -Signed-off-by: Gwendal Grignou -Signed-off-by: Jens Axboe ---- - Makefile | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/Makefile b/Makefile -index 5917814..eb3c6a1 100644 ---- a/Makefile -+++ b/Makefile -@@ -14,7 +14,7 @@ all: $(ALL) $(SUBDIRS) - - # We always descend into subdirs because they contain their own dependency - # information which we don't track in this top level Makefile. --$(SUBDIRS): -+$(SUBDIRS): $(PROGS) - $(MAKE) -C $@ - .PHONY: $(SUBDIRS) - --- -2.25.3 - diff --git a/F7D358FB2971E0A6.asc b/F7D358FB2971E0A6.asc new file mode 100644 index 0000000..f187fa5 --- /dev/null +++ b/F7D358FB2971E0A6.asc @@ -0,0 +1,1830 @@ + + + +F7D358FB2971E0A6.asc « keys - kernel/pgpkeys.git - Kernel developers PGP keys + + + + + + + + + + +
+ + + + +
+aboutsummaryrefslogtreecommitdiffstats
+ + + +
+
+
blob: 509310cb901a1bac74982f250bc0fee51d80e57e (plain) + + +
1
+2
+3
+4
+5
+6
+7
+8
+9
+10
+11
+12
+13
+14
+15
+16
+17
+18
+19
+20
+21
+22
+23
+24
+25
+26
+27
+28
+29
+30
+31
+32
+33
+34
+35
+36
+37
+38
+39
+40
+41
+42
+43
+44
+45
+46
+47
+48
+49
+50
+51
+52
+53
+54
+55
+56
+57
+58
+59
+60
+61
+62
+63
+64
+65
+66
+67
+68
+69
+70
+71
+72
+73
+74
+75
+76
+77
+78
+79
+80
+81
+82
+83
+84
+85
+86
+87
+88
+89
+90
+91
+92
+93
+94
+95
+96
+97
+98
+99
+100
+101
+102
+103
+104
+105
+106
+107
+108
+109
+110
+111
+112
+113
+114
+115
+116
+117
+118
+119
+120
+121
+122
+123
+124
+125
+126
+127
+128
+129
+130
+131
+132
+133
+134
+135
+136
+137
+138
+139
+140
+141
+142
+143
+144
+145
+146
+147
+148
+149
+150
+151
+152
+153
+154
+155
+156
+157
+158
+159
+160
+161
+162
+163
+164
+165
+166
+167
+168
+169
+170
+171
+172
+173
+174
+175
+176
+177
+178
+179
+180
+181
+182
+183
+184
+185
+186
+187
+188
+189
+190
+191
+192
+193
+194
+195
+196
+197
+198
+199
+200
+201
+202
+203
+204
+205
+206
+207
+208
+209
+210
+211
+212
+213
+214
+215
+216
+217
+218
+219
+220
+221
+222
+223
+224
+225
+226
+227
+228
+229
+230
+231
+232
+233
+234
+235
+236
+237
+238
+239
+240
+241
+242
+243
+244
+245
+246
+247
+248
+249
+250
+251
+252
+253
+254
+255
+256
+257
+258
+259
+260
+261
+262
+263
+264
+265
+266
+267
+268
+269
+270
+271
+272
+273
+274
+275
+276
+277
+278
+279
+280
+281
+282
+283
+284
+285
+286
+287
+288
+289
+290
+291
+292
+293
+294
+295
+296
+297
+298
+299
+300
+301
+302
+303
+304
+305
+306
+307
+308
+309
+310
+311
+312
+313
+314
+315
+316
+317
+318
+319
+320
+321
+322
+323
+324
+325
+326
+327
+328
+329
+330
+331
+332
+333
+334
+335
+336
+337
+338
+339
+340
+341
+342
+343
+344
+345
+346
+347
+348
+349
+350
+351
+352
+353
+354
+355
+356
+357
+358
+359
+360
+361
+362
+363
+364
+365
+366
+367
+368
+369
+370
+371
+372
+373
+374
+375
+376
+377
+378
+379
+380
+381
+382
+383
+384
+385
+386
+387
+388
+389
+390
+391
+392
+393
+394
+395
+396
+397
+398
+399
+400
+401
+402
+403
+404
+405
+406
+407
+408
+409
+410
+411
+412
+413
+414
+415
+416
+417
+418
+419
+420
+421
+422
+423
+424
+425
+426
+427
+428
+429
+430
+431
+432
+433
+434
+435
+436
+437
+438
+439
+440
+441
+442
+443
+444
+445
+446
+447
+448
+449
+450
+451
+452
+453
+454
+455
+456
+457
+458
+459
+460
+461
+462
+463
+464
+465
+466
+467
+468
+469
+470
+471
+472
+473
+474
+475
+476
+477
+478
+479
+480
+481
+482
+483
+484
+485
+486
+487
+488
+489
+490
+491
+492
+493
+494
+495
+496
+497
+498
+499
+500
+501
+502
+503
+504
+505
+506
+507
+508
+509
+510
+511
+512
+513
+514
+515
+516
+517
+518
+519
+520
+521
+522
+523
+524
+525
+526
+527
+528
+529
+530
+531
+532
+533
+534
+535
+536
+537
+538
+539
+540
+541
+542
+543
+544
+545
+546
+547
+548
+549
+550
+551
+552
+553
+554
+555
+556
+557
+558
+559
+560
+561
+562
+563
+564
+565
+566
+567
+568
+569
+570
+571
+572
+573
+574
+575
+576
+577
+578
+579
+580
+581
+582
+583
+584
+585
+586
+587
+588
+589
+590
+591
+592
+593
+594
+595
+596
+597
+598
+599
+600
+601
+602
+603
+604
+605
+606
+607
+608
+609
+610
+611
+612
+613
+614
+615
+616
+617
+618
+619
+620
+621
+622
+623
+624
+625
+626
+627
+628
+629
+630
+631
+632
+633
+634
+635
+636
+637
+638
+639
+640
+641
+642
+643
+644
+645
+646
+647
+648
+649
+650
+651
+652
+653
+654
+655
+656
+657
+658
+659
+660
+661
+662
+663
+664
+665
+666
+667
+668
+669
+670
+671
+672
+673
+674
+675
+676
+677
+678
+679
+680
+681
+682
+683
+684
+685
+686
+687
+688
+689
+690
+691
+692
+693
+694
+695
+696
+697
+698
+699
+700
+701
+702
+703
+704
+705
+706
+707
+708
+709
+710
+711
+712
+713
+714
+715
+716
+717
+718
+719
+720
+721
+722
+723
+724
+725
+726
+727
+728
+729
+730
+731
+732
+733
+734
+735
+736
+737
+738
+739
+740
+741
+742
+743
+744
+745
+746
+747
+748
+749
+750
+751
+752
+753
+754
+755
+756
+757
+758
+759
+760
+761
+762
+763
+764
+765
+766
+767
+768
+769
+770
+771
+772
+773
+774
+775
+776
+777
+778
+779
+780
+781
+782
+783
+784
+785
+786
+787
+788
+789
+790
+791
+792
+793
+794
+795
+796
+797
+798
+799
+800
+801
+802
+803
+804
+805
+806
+807
+808
+809
+810
+811
+812
+813
+814
+815
+816
+817
+818
+819
+820
+821
+822
+823
+824
+825
+826
+827
+828
+829
+830
+831
+832
+833
+834
+835
+836
+837
+838
+839
+840
+841
+842
+843
+844
+845
+846
+847
+848
+849
+850
+851
+852
+853
+854
+855
+856
+857
+858
+859
+860
+
pub   rsa4096 2011-10-17 [SC]
+      C0FC392DCADE26D975FA5E4AF7D358FB2971E0A6
+uid                      Jens Axboe <axboe@kernel.dk>
+uid                      [jpeg image of size 5172]
+sub   rsa4096 2011-10-17 [E]
+      2C5DCF0DAFBC972930D1DE5F28C8BEF174494BD8
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+mA36L4ShYnujbVLmjyarBGRBCqrhRbAT1orY88yOirrVADov9l1fFsXa9++aVuBZ
+BCBaCW2PB4nj0PaZVEOFUR/rUi1n/nNQ658Giw7uo/yYS4r7MKTr65vw4GnQtk1J
+mJYHH1K3T0QMAZCQpGEclSsE8QzqBhwM+MmaNZb6yPdIGw9JlH7iUJHPobQNagTu
+PydBgZlOKgaG5qPK2m6mwbc2XL8Jwiq56yLhstg0SgIXyM9NYaUPS085pykQWKOg
+plkkfMr+dehSt9gnFSyQ3LUVltzWHTxgG/KcojtpjOjf1Fe/FnQeblooMRim72sd
+aw+JAhwEEAEIAAYFAk6oZLkACgkQ4PNz83v5CZo54w/+MCK3zx4B3beGRoYqDXYZ
+YDvfJB7hCkUHRMHST6Y10L3oh5HxE5bzUInu0h8C/E6LQj4RMqKz+UGqRgCE8rSC
+/LtfVgaCRq/SqjC07mbx60M1BWfS+ww33MPeAPtiG5HHDNq7fLZs/mdCVlT6YU9W
+XHDWr2EMAm3BKF5U9WAhQb1d01ueNd/an0JYIp7OZfcI4k5o8kh+x9H7vY6S6cLb
+Ses7lpt6HBQoeziKnRRghkHH6AISLOFpyr3DkIULKTBoBID872pTHc7LCCpdyROV
+F+Mx2yd7bZV/BBvL2MgkLEkWBQesqo7xs6UV0yjEn6HOblC6oDXnSxgkR7cuW0Zw
+ehU2+nRBI96YX52vBKwg7/V5X+qQz2BeLT+mio7KhMKRxA94h8kUgD2i6SBVAVmZ
+XLLiwKD5TbiaztcNXQPSFBadCx1phZbpaDNu2WLQN62y+PsNSBoz6CNs/lD3nV5r
+LtinNOaAf5LXZkZHMIOxPQx0TvNL/abGXJ+0XTudtVgkqgi0MyNYJbGTbBckRjmT
+jjnDI7WUxrZoyMWNBYR1FK4JuugHEg3mhTxmxzft+e6/6kbkx50Ni/ujB4Oz/KCm
+xCYFAw+OnivvXGQqcJ9U1YJZA4WBzRpXGMezmbkOodNCggu1Z0ql2myz1LBZY7O/
+4crH5y/P7vIpRaWfgOBDKnaJAhwEEwECAAYFAk6ml/0ACgkQwaRgcltRy8/Mog/6
+AkoDNOsu0NEMnPymTrd3u85D2SyUrOGYYBtwh/Uv7O7ZiNVw5VyYKFx+ffZhDG44
+wtkx9+gUG58O6VA39P8cKWxMM43I7jhi4aAmDaXy/ic3WTOiR9c4oTzeVBtV3zgT
+VI4Hd5iEiNqSwYClODGzAOfh7oVEwFZ5kmX5n0KW08E+vuQ+vBcwt5nNyb+mIn4e
+k4UavKP3Rs0KqNDLqssKkDWW/I8T0cnr3ooHJxoRG7LrmfZEZxAD/2sSMH3v1lxV
+Aq2Xq3mM3KfM1p95qRJ+PgHDoosBfDArDenhAg1WM6ewuJyMiXSDuXiaCPiPS4y4
+4lvEy5zZmvtqXdoI4dAH34qOvXrWHx8Pk/hhYKIzD5D712PyKQbpoifKH9TfQbd3
+QStbR2GO97QLJ1BhOQ1pwqjTUOouf+jZPNpgDRMjVB5DSiQh7co6bNBrwqn3DgeU
+Jp3QdGkxhQ4iBFWJELnyIWhv8ftq5zSAhEMeBqhdSDbOZuhFKM0UeJ8TZJqTmGc9
+lvz7tUjhbAEMzrrsimnrhZ2NzKszvtxNlQHpC4xUwkIeD/d9HKoJgzRDTqPg8bg0
+n2hqPtWhNDL7Qgq6CToKXgdoNQlD+tNOY0jdSoHi6SRbEtftXKDObz2/Jx2LVQMU
+3InKnwQiLqMd28F/F8X/H9P5+G39nTYHnmGyg9IZT3mJAjoEEwEIACQCGwMCHgEC
+F4AFCwkIBwMFFQoJCAsFFgIDAQAFAk6by5sCGQEACgkQ99NY+ylx4KaVYRAAwuCH
+OG7iwOSMfQ4LYiuxlzcdf7Y/tkyJAX6R8t6a5eT9sDOZBmpPnoL40emJLsHqqRTU
+HqzS/GRdaqbQb6pvgVNXrC5CZ/+w5pgqksY34twgbNSnUahwh8sI8Ee41qEJRc4o
+CFC8Q4GhlJOhLXyntHqUm+ejz7073xBRNfRYZJVPROCaSfo6p3zT69JCzqJxVcvC
+6TmARF91Io23pCxLvQVbW6dm4zblrLAorELZnzo5JgXcG35L7uI0lekeSo7KHH4f
+CCMX+m776ms6aBwG4S6ZzI/jHd7rGzB382t2lHEXRFkcws5uSaTnpKToN970YD/W
+pfDqESouJaqIDLAfk3ouOxwuSIBKybB50oY4WXOtGnItMYod9rsTIbm1Kc0S7Iyv
+VRuTSfZBgKetAOlK59r6FKTMLiBS6rzmky2IVQknBfoRXX8HfeAxENsRPvatuuQp
+OfwmpES9n0gEOKfwe4I8FVU8CmeDqix4ZXcWWZSRayo//HneMYFBgrK06nMDM/xL
+e/JfV8nGIRF9hkW57Ka+2XlqWyOLGZg0nRjr1fP9exPzXnxlXts47gXINcBSVDus
+MWVbxSMY0MMkgXKwnEyoW/SSWNAwfV3q0rX02dcJX25QH/0rv7anjX5L4nOr8D88
+jjlkZYYhORNuOn4RxqzRx3Qh5FoMtKIxQN7N4j/R04fThQEQAAEBAAAAAAAAAAAA
+AAAA/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsL
+DBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBD
+AQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy
+MjIyMjIyMjIyMjIyMjIyMjL/wAARCACWAHADASIAAhEBAxEB/8QAHwAAAQUBAQEB
+AQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQR
+BRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3
+ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWW
+l5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo
+6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QA
+tREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMz
+UvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVm
+Z2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6
+wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEA
+PwDktbunu5mmkYlnOTXPSHmte/OF5NYzmtJsqAzNQsMmpqibqaxNCBfkcr2bpU0I
+ycUyRNw9+1SokkSxyujKrnAJGM/SkzajKzsy9FHxVyGLkcUWyBkBFaVpYz3DhYIX
+kY9lXNc8mezThZXPd/hnNDJ4KtY4iN0TMsgHrnP8iK7CvB/D2q3XhGdpJdStrcN/
+rLZj5rN6ZVen1yK19W+MM8kLRabYqhIwZZj/ACUH+tVGdo2Z5VfBTnVbhqmZHxGk
+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
+Sg5mvNyIumY=
+=uQ7E
+-----END PGP PUBLIC KEY BLOCK-----
+
+
+
+ +
+ + diff --git a/blktrace-fix-btt-overflow.patch b/blktrace-fix-btt-overflow.patch deleted file mode 100644 index cabe5fb..0000000 --- a/blktrace-fix-btt-overflow.patch +++ /dev/null @@ -1,144 +0,0 @@ -From d61ff409cb4dda31386373d706ea0cfb1aaac5b7 Mon Sep 17 00:00:00 2001 -From: Jens Axboe -Date: Wed, 2 May 2018 10:24:17 -0600 -Subject: btt: make device/devno use PATH_MAX to avoid overflow - -Herbo Zhang reports: - -I found a bug in blktrace/btt/devmap.c. The code is just as follows: - -https://git.kernel.org/pub/scm/linux/kernel/git/axboe/blktrace.git/tree/btt/devmap.c?id=8349ad2f2d19422a6241f94ea84d696b21de4757 - - struct devmap { - -struct list_head head; -char device[32], devno[32]; // #1 -}; - -LIST_HEAD(all_devmaps); - -static int dev_map_add(char *line) -{ -struct devmap *dmp; - -if (strstr(line, "Device") != NULL) -return 1; - -dmp = malloc(sizeof(struct devmap)); -if (sscanf(line, "%s %s", dmp->device, dmp->devno) != 2) { //#2 -free(dmp); -return 1; -} - -list_add_tail(&dmp->head, &all_devmaps); -return 0; -} - -int dev_map_read(char *fname) -{ -char line[256]; // #3 -FILE *fp = my_fopen(fname, "r"); - -if (!fp) { -perror(fname); -return 1; -} - -while (fscanf(fp, "%255[a-zA-Z0-9 :.,/_-]\n", line) == 1) { -if (dev_map_add(line)) -break; -} - -fclose(fp); -return 0; -} - - The line length is 256, but the dmp->device, dmp->devno max length -is only 32. We can put strings longer than 32 into dmp->device and -dmp->devno , and then they will be overflowed. - - we can trigger this bug just as follows: - - $ python -c "print 'A'*256" > ./test - $ btt -M ./test - - *** Error in btt': free(): invalid next size (fast): 0x000055ad7349b250 *** - ======= Backtrace: ========= - /lib/x86_64-linux-gnu/libc.so.6(+0x777e5)[0x7f7f158ce7e5] - /lib/x86_64-linux-gnu/libc.so.6(+0x7fe0a)[0x7f7f158d6e0a] - /lib/x86_64-linux-gnu/libc.so.6(cfree+0x4c)[0x7f7f158da98c] - btt(+0x32e0)[0x55ad7306f2e0] - btt(+0x2c5f)[0x55ad7306ec5f] - btt(+0x251f)[0x55ad7306e51f] - /lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7f7f15877830] - btt(+0x26b9)[0x55ad7306e6b9] - ======= Memory map: ======== - 55ad7306c000-55ad7307f000 r-xp 00000000 08:14 3698139 - /usr/bin/btt - 55ad7327e000-55ad7327f000 r--p 00012000 08:14 3698139 - /usr/bin/btt - 55ad7327f000-55ad73280000 rw-p 00013000 08:14 3698139 - /usr/bin/btt - 55ad73280000-55ad73285000 rw-p 00000000 00:00 0 - 55ad7349a000-55ad734bb000 rw-p 00000000 00:00 0 - [heap] - 7f7f10000000-7f7f10021000 rw-p 00000000 00:00 0 - 7f7f10021000-7f7f14000000 ---p 00000000 00:00 0 - 7f7f15640000-7f7f15656000 r-xp 00000000 08:14 14942237 - /lib/x86_64-linux-gnu/libgcc_s.so.1 - 7f7f15656000-7f7f15855000 ---p 00016000 08:14 14942237 - /lib/x86_64-linux-gnu/libgcc_s.so.1 - 7f7f15855000-7f7f15856000 r--p 00015000 08:14 14942237 - /lib/x86_64-linux-gnu/libgcc_s.so.1 - 7f7f15856000-7f7f15857000 rw-p 00016000 08:14 14942237 - /lib/x86_64-linux-gnu/libgcc_s.so.1 - 7f7f15857000-7f7f15a16000 r-xp 00000000 08:14 14948477 - /lib/x86_64-linux-gnu/libc-2.23.so - 7f7f15a16000-7f7f15c16000 ---p 001bf000 08:14 14948477 - /lib/x86_64-linux-gnu/libc-2.23.so - 7f7f15c16000-7f7f15c1a000 r--p 001bf000 08:14 14948477 - /lib/x86_64-linux-gnu/libc-2.23.so - 7f7f15c1a000-7f7f15c1c000 rw-p 001c3000 08:14 14948477 - /lib/x86_64-linux-gnu/libc-2.23.so - 7f7f15c1c000-7f7f15c20000 rw-p 00000000 00:00 0 - 7f7f15c20000-7f7f15c46000 r-xp 00000000 08:14 14948478 - /lib/x86_64-linux-gnu/ld-2.23.so - 7f7f15e16000-7f7f15e19000 rw-p 00000000 00:00 0 - 7f7f15e42000-7f7f15e45000 rw-p 00000000 00:00 0 - 7f7f15e45000-7f7f15e46000 r--p 00025000 08:14 14948478 - /lib/x86_64-linux-gnu/ld-2.23.so - 7f7f15e46000-7f7f15e47000 rw-p 00026000 08:14 14948478 - /lib/x86_64-linux-gnu/ld-2.23.so - 7f7f15e47000-7f7f15e48000 rw-p 00000000 00:00 0 - 7ffdebe5c000-7ffdebe7d000 rw-p 00000000 00:00 0 - [stack] - 7ffdebebc000-7ffdebebe000 r--p 00000000 00:00 0 - [vvar] - 7ffdebebe000-7ffdebec0000 r-xp 00000000 00:00 0 - [vdso] - ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 - [vsyscall] - [1] 6272 abort btt -M test - -Signed-off-by: Jens Axboe ---- - btt/devmap.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/btt/devmap.c b/btt/devmap.c -index 0553a9e..5fc1cb2 100644 ---- a/btt/devmap.c -+++ b/btt/devmap.c -@@ -23,7 +23,7 @@ - - struct devmap { - struct list_head head; -- char device[32], devno[32]; -+ char device[PATH_MAX], devno[PATH_MAX]; - }; - - LIST_HEAD(all_devmaps); --- -cgit v1.1 - - diff --git a/blktrace-python3.patch b/blktrace-python3.patch deleted file mode 100644 index 23fe5fb..0000000 --- a/blktrace-python3.patch +++ /dev/null @@ -1,192 +0,0 @@ -make btt scripts python3-ready - -Many distributions are moving to python3 by default. Here's -an attempt to make the python scripts in blktrace python3-ready. - -Most of this was done with automated tools. I hand fixed some -space-vs tab issues, and cast an array index to integer. It -passes rudimentary testing when run under python2.7 as well -as python3. - -This doesn't do anything with the shebangs, it leaves them both -invoking whatever "env python" coughs up on the system. - -Signed-off-by: Eric Sandeen ---- - -I am not a python guru at all. Happy to have review by anyone more -pythonic than I am. Hopefully this helps at least move things -toward python3-readiness. Thanks! - -Index: blktrace-1.2.0/btt/bno_plot.py -=================================================================== ---- blktrace-1.2.0.orig/btt/bno_plot.py -+++ blktrace-1.2.0/btt/bno_plot.py -@@ -1,4 +1,4 @@ --#! /usr/bin/env python -+#!/usr/bin/python3 - # - # btt blkno plotting interface - # -@@ -38,6 +38,8 @@ automatically push the keys under the gr - To exit the plotter, enter 'quit' or ^D at the 'gnuplot> ' prompt. - """ - -+from __future__ import absolute_import -+from __future__ import print_function - import getopt, glob, os, sys, tempfile - - verbose = 0 -@@ -60,14 +62,14 @@ def parse_args(in_args): - - try: - (opts, args) = getopt.getopt(in_args, s_opts, l_opts) -- except getopt.error, msg: -- print >>sys.stderr, msg -- print >>sys.stderr, __doc__ -+ except getopt.error as msg: -+ print(msg, file=sys.stderr) -+ print(__doc__, file=sys.stderr) - sys.exit(1) - - for (o, a) in opts: - if o in ('-h', '--help'): -- print __doc__ -+ print(__doc__) - sys.exit(0) - elif o in ('-v', '--verbose'): - verbose += 1 -@@ -84,10 +86,10 @@ if __name__ == '__main__': - (bnos, keys_below) = parse_args(sys.argv[1:]) - - if verbose: -- print 'Using files:', -- for bno in bnos: print bno, -- if keys_below: print '\nKeys are to be placed below graph' -- else: print '' -+ print('Using files:', end=' ') -+ for bno in bnos: print(bno, end=' ') -+ if keys_below: print('\nKeys are to be placed below graph') -+ else: print('') - - tmpdir = tempfile.mktemp() - os.mkdir(tmpdir) -@@ -99,7 +101,7 @@ if __name__ == '__main__': - fo = open(t, 'w') - for line in open(f, 'r'): - fld = line.split(None) -- print >>fo, fld[0], fld[1], int(fld[2])-int(fld[1]) -+ print(fld[0], fld[1], int(fld[2])-int(fld[1]), file=fo) - fo.close() - - t = t[t.rfind('/')+1:] -@@ -107,16 +109,16 @@ if __name__ == '__main__': - else: plot_cmd = "%s,'%s'" % (plot_cmd, t) - - fo = open('%s/plot.cmds' % tmpdir, 'w') -- print >>fo, cmds -- if len(bnos) > 10 or keys_below: print >>fo, 'set key below' -- print >>fo, plot_cmd -+ print(cmds, file=fo) -+ if len(bnos) > 10 or keys_below: print('set key below', file=fo) -+ print(plot_cmd, file=fo) - fo.close() - - pid = os.fork() - if pid == 0: - cmd = 'gnuplot %s/plot.cmds -' % tmpdir - -- if verbose: print 'Executing %s' % cmd -+ if verbose: print('Executing %s' % cmd) - - os.chdir(tmpdir) - os.system(cmd) -Index: blktrace-1.2.0/btt/btt_plot.py -=================================================================== ---- blktrace-1.2.0.orig/btt/btt_plot.py -+++ blktrace-1.2.0/btt/btt_plot.py -@@ -1,4 +1,4 @@ --#! /usr/bin/env python -+#!/usr/bin/python3 - # - # btt_plot.py: Generate matplotlib plots for BTT generate data files - # -@@ -55,6 +55,10 @@ Arguments: - but the -o (--output) and -T (--title) options will be ignored. - """ - -+from __future__ import absolute_import -+from __future__ import print_function -+import six -+from six.moves import range - __author__ = 'Alan D. Brunelle ' - - #------------------------------------------------------------------------------ -@@ -82,7 +86,7 @@ get_base = lambda file: file[file.find( - def fatal(msg): - """Generate fatal error message and exit""" - -- print >>sys.stderr, 'FATAL: %s' % msg -+ print('FATAL: %s' % msg, file=sys.stderr) - sys.exit(1) - - #------------------------------------------------------------------------------ -@@ -163,7 +167,7 @@ def get_data(files): - if not os.path.exists(file): - fatal('%s not found' % file) - elif verbose: -- print 'Processing %s' % file -+ print('Processing %s' % file) - - xs = [] - ys = [] -@@ -214,8 +218,8 @@ def parse_args(args): - - try: - (opts, args) = getopt.getopt(args[1:], s_opts, l_opts) -- except getopt.error, msg: -- print >>sys.stderr, msg -+ except getopt.error as msg: -+ print(msg, file=sys.stderr) - fatal(__doc__) - - for (o, a) in opts: -@@ -293,15 +297,15 @@ def generate_output(type, db): - def color(idx, style): - """Returns a color/symbol type based upon the index passed.""" - -- colors = [ 'b', 'g', 'r', 'c', 'm', 'y', 'k' ] -+ colors = [ 'b', 'g', 'r', 'c', 'm', 'y', 'k' ] - l_styles = [ '-', ':', '--', '-.' ] - m_styles = [ 'o', '+', '.', ',', 's', 'v', 'x', '<', '>' ] - - color = colors[idx % len(colors)] - if style == 'line': -- style = l_styles[(idx / len(l_styles)) % len(l_styles)] -+ style = l_styles[int((idx / len(l_styles)) % len(l_styles))] - elif style == 'marker': -- style = m_styles[(idx / len(m_styles)) % len(m_styles)] -+ style = m_styles[int((idx / len(m_styles)) % len(m_styles))] - - return '%s%s' % (color, style) - -@@ -314,7 +318,7 @@ def generate_output(type, db): - ofile = '%s.png' % type - - if verbose: -- print 'Generating plot into %s' % ofile -+ print('Generating plot into %s' % ofile) - - fig = plt.figure(figsize=plot_size) - ax = fig.add_subplot(111) -@@ -329,7 +333,7 @@ def generate_output(type, db): - legends = None - - keys = [] -- for file in db.iterkeys(): -+ for file in six.iterkeys(db): - if not file in ['min_x', 'max_x', 'min_y', 'max_y']: - keys.append(file) - - - diff --git a/blktrace.spec b/blktrace.spec index 61a1773..15f8fee 100644 --- a/blktrace.spec +++ b/blktrace.spec @@ -1,9 +1,12 @@ Summary: Utilities for performing block layer IO tracing in the Linux kernel Name: blktrace -Version: 1.2.0 -Release: 17%{?dist} +Version: 1.3.0 +Release: 1%{?dist} License: GPLv2+ -Source: http://brick.kernel.dk/snaps/blktrace-%{version}.tar.bz2 +Source0: http://brick.kernel.dk/snaps/blktrace-%{version}.tar.bz2 +Source1: https://brick.kernel.dk/snaps/blktrace-%{version}.tar.bz2.asc +Source2: https://git.kernel.org/pub/scm/docs/kernel/pgpkeys.git/tree/keys/F7D358FB2971E0A6.asc + Url: http://brick.kernel.dk/snaps Requires: librsvg2-tools @@ -12,11 +15,6 @@ BuildRequires: python3-devel BuildRequires: gcc, libaio-devel, librsvg2-devel BuildRequires: make -Patch0: blktrace-fix-btt-overflow.patch -Patch1: blktrace-python3.patch -Patch2: 0001-fix-parallel-build-failures.patch -Patch3: 0001-fix-parallel-build-of-btt-and-blkiomon.patch - %description blktrace is a block layer IO tracing mechanism which provides detailed information about request queue operations to user space. This package @@ -27,11 +25,12 @@ You should install the blktrace package if you need to gather detailed information about IO patterns. %prep -%setup -q -%patch0 -p1 -%patch1 -p1 -%patch2 -p1 -%patch3 -p1 +%autosetup -p1 +%{gpgverify} --keyring='%{SOURCE2}' --signature='%{SOURCE1}' --data='%{SOURCE0}' + +pathfix.py -i %{__python3} -pn \ + btt/bno_plot.py \ + btt/btt_plot.py sed -i '1s=^#!/usr/bin/python3=#!%{__python3}=' \ btt/{btt_plot.py,bno_plot.py} @@ -85,6 +84,10 @@ information about IO patterns. %{_mandir}/man1/iowatcher.* %changelog +* Mon Jun 14 2021 Eric Sandeen - 1.3.0-1 +- New upstream version 1.3.0 +- Add signature validation to specfile + * Tue Jan 26 2021 Fedora Release Engineering - 1.2.0-17 - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild diff --git a/sources b/sources index c348b8b..6da0aec 100644 --- a/sources +++ b/sources @@ -1 +1,2 @@ -SHA512 (blktrace-1.2.0.tar.bz2) = ce82c8010ca5c2868746d8eb7c6a107fc7382c05df949eeff79e612f5b1a98301a5aa5ab39de0766ea1c074f95e378ba985401cbeba9a296e3182da7d7a23b86 +SHA512 (blktrace-1.3.0.tar.bz2) = 4cc3d8e0d77e934bd70f447e1bb462400d3c9982460802f093d260e3cb69a66c6f61a63a05af55b84c35c5bdf18027e571d55cebea8c89d0be6d00c7ca9b9174 +SHA512 (blktrace-1.3.0.tar.bz2.asc) = bfe890f5984b7373eb6e38ee4163b2a44861218920e5db0c8e358879e13c42952cef9edeb99d24ce69ff99114152271255a72e4eed38b67df44e4410364df135