Here's a progress report on tracking down the data corruption bug.

I created a 1 Gb file containing random data, except that every 1000 bytes
the file contains "XXXXXXXXXXXXXXXXXXXX" followed by a block number in the
range 0 to 999999.  I wrote some code to detect the pattern of Xs and print
out block numbers.  Every data packet in an sk_buff should have 0, 1, or 2
visible block numbers, unless perhaps two sk_buffs are linked together,
since I'm only looking at the first right now.  Sometimes the Xs will be
split between blocks, so occasionally the debug code will fail to detect a
block number.

I modified compat-wireless-2010-05-18/net/mac80211/rx.c so that function
__ieee80211_rx_handle_packet() prints incoming block numbers of the file I'm
transferring.  The debugging print statement is at the beginning of the
function.

I've included debugging output below for an FTP transfer that ended with a
corrupted file on my Acer, about 1400 bytes of duplicated data containing
file block numbers 7534 and 7535.  The destination data file is missing the
block that should contain label 7533.

If you search for 7533 below, you'll see that the block was received:

Jun  4 11:28:35 ugg kernel: [226561.545606] ZZ 0 block 7532 0
Jun  4 11:28:35 ugg kernel: [226561.546623] ZZ 0 block 7533 0
Jun  4 11:28:35 ugg kernel: [226561.547020] ZZ 0 block 7478 0
Jun  4 11:28:35 ugg kernel: [226561.547439] ZZ 0 block 7536 0

Strangely, a very old block 7478 was received instead of 7534/7535.  Block
7478 had already been received some time earlier.  Later, 7534/7535 is
received again:

Jun  4 11:28:35 ugg kernel: [226561.592907] ZZ 0 block 7627 7628
Jun  4 11:28:35 ugg kernel: [226561.593327] ZZ 0 block 7629 0
Jun  4 11:28:35 ugg kernel: [226561.594004] ZZ 0 block 7630 0
Jun  4 11:28:35 ugg kernel: [226561.594349] ZZ 0 block 7534 7535
Jun  4 11:28:35 ugg kernel: [226561.595505] ZZ 0 block 7632 0
Jun  4 11:28:35 ugg kernel: [226561.595852] ZZ 0 block 7633 0

There's no debugging output showing that block 7631 was received, but it
must have been, since it's in the destination file.  As I mentioned above,
the debugging code is not perfect, so it can miss detecting a block number.
Also, it may be possible that the sk_buff containing 7534/7535 is linked in
a list with another block, since I'm not following skb->next.

I'm printing blocks received by the mac80211 layer.  I should also print
blocks that ath5k is seeing.  There were a couple of resets during the file
transfer, but none right around the bad data.  The 80211 layer received
packets while the resets were happening, but none contained blocks labels so
they were not from my file.  I'll add more debugging print code ....


By the way, I noticed while reading the code that the packet defragmenting
data structures in net/mac80211/rx.c don't seem to be protected by a lock:

  sdata->fragment_next;
  sdata->fragments[]

Is it possible for two threads to call __ieee80211_rx_handle_packet() at the
same time?  I don't think it's possible with ath5k, because ath5k_tasklet_rx
locks

  &sc->rxbuflock

but maybe there's another unlocked path or perhaps other wireless drivers
assume two threads can receive packets simultaneously.

bob


====================

Jun  4 11:28:35 ugg kernel: [226561.504683] ZZ 0 block 7453 7454
Jun  4 11:28:35 ugg kernel: [226561.509593] ZZ 0 block 0 0
Jun  4 11:28:35 ugg kernel: [226561.510259] ZZ 0 block 7455 0
Jun  4 11:28:35 ugg kernel: [226561.510659] ZZ 0 block 7456 7457
Jun  4 11:28:35 ugg kernel: [226561.510997] ZZ 0 block 7458 0
Jun  4 11:28:35 ugg kernel: [226561.511524] ZZ 0 block 7459 7460
Jun  4 11:28:35 ugg kernel: [226561.511866] ZZ 0 block 7461 0
Jun  4 11:28:35 ugg kernel: [226561.512881] ZZ 0 block 7462 7463
Jun  4 11:28:35 ugg kernel: [226561.513325] ZZ 0 block 7464 0
Jun  4 11:28:35 ugg kernel: [226561.513704] ZZ 0 block 7465 0
Jun  4 11:28:35 ugg kernel: [226561.514245] ZZ 0 block 7466 7467
Jun  4 11:28:35 ugg kernel: [226561.515253] ZZ 0 block 7468 0
Jun  4 11:28:35 ugg kernel: [226561.515729] ZZ 0 block 7469 7470
Jun  4 11:28:35 ugg kernel: [226561.516299] ZZ 0 block 7471 0
Jun  4 11:28:35 ugg kernel: [226561.517097] ZZ 0 block 7472 7473
Jun  4 11:28:35 ugg kernel: [226561.517549] ZZ 0 block 7474 0
Jun  4 11:28:35 ugg kernel: [226561.517981] ZZ 0 block 7475 7476
Jun  4 11:28:35 ugg kernel: [226561.518380] ZZ 0 block 7477 0
Jun  4 11:28:35 ugg kernel: [226561.518827] ZZ 0 block 7478 0
Jun  4 11:28:35 ugg kernel: [226561.519985] ZZ 0 block 7479 7480
Jun  4 11:28:35 ugg kernel: [226561.520471] ZZ 0 block 7481 0
Jun  4 11:28:35 ugg kernel: [226561.521552] ZZ 0 block 7482 7483
Jun  4 11:28:35 ugg kernel: [226561.526336] ZZ 0 block 7484 0
Jun  4 11:28:35 ugg kernel: [226561.526741] ZZ 0 block 7485 7486
Jun  4 11:28:35 ugg kernel: [226561.527190] ZZ 0 block 7487 0
Jun  4 11:28:35 ugg kernel: [226561.527685] ZZ 0 block 7488 7489
Jun  4 11:28:35 ugg kernel: [226561.528123] ZZ 0 block 7490 0
Jun  4 11:28:35 ugg kernel: [226561.528629] ZZ 0 block 7491 0
Jun  4 11:28:35 ugg kernel: [226561.529053] ZZ 0 block 7492 7493
Jun  4 11:28:35 ugg kernel: [226561.529496] ZZ 0 block 7494 0
Jun  4 11:28:35 ugg kernel: [226561.530049] ZZ 0 block 7495 7496
Jun  4 11:28:35 ugg kernel: [226561.530579] ZZ 0 block 7497 0
Jun  4 11:28:35 ugg kernel: [226561.531002] ZZ 0 block 7498 7499
Jun  4 11:28:35 ugg kernel: [226561.531571] ZZ 0 block 7500 0
Jun  4 11:28:35 ugg kernel: [226561.531966] ZZ 0 block 7501 7502
Jun  4 11:28:35 ugg kernel: [226561.532286] ZZ 0 block 7503 0
Jun  4 11:28:35 ugg kernel: [226561.532746] ZZ 0 block 7504 7505
Jun  4 11:28:35 ugg kernel: [226561.533120] ZZ 0 block 7506 0
Jun  4 11:28:35 ugg kernel: [226561.533576] ZZ 0 block 7507 0
Jun  4 11:28:35 ugg kernel: [226561.533883] ZZ 0 block 7508 7509
Jun  4 11:28:35 ugg kernel: [226561.534890] ZZ 0 block 7510 0
Jun  4 11:28:35 ugg kernel: [226561.535350] ZZ 0 block 7511 7512
Jun  4 11:28:35 ugg kernel: [226561.535744] ZZ 0 block 7513 0
Jun  4 11:28:35 ugg kernel: [226561.536178] ZZ 0 block 7514 7515
Jun  4 11:28:35 ugg kernel: [226561.536519] ZZ 0 block 7516 0
Jun  4 11:28:35 ugg kernel: [226561.536906] ZZ 0 block 7517 7518
Jun  4 11:28:35 ugg kernel: [226561.537338] ZZ 0 block 7519 0
Jun  4 11:28:35 ugg kernel: [226561.539376] ZZ 0 block 7520 0
Jun  4 11:28:35 ugg kernel: [226561.540200] ZZ 0 block 7521 7522
Jun  4 11:28:35 ugg kernel: [226561.540850] ZZ 0 block 7523 0
Jun  4 11:28:35 ugg kernel: [226561.541317] ZZ 0 block 7524 7525
Jun  4 11:28:35 ugg kernel: [226561.542002] ZZ 0 block 7524 7525
Jun  4 11:28:35 ugg kernel: [226561.542236] ZZ 0 block 7526 0
Jun  4 11:28:35 ugg kernel: [226561.542736] ZZ 0 block 7527 7528
Jun  4 11:28:35 ugg kernel: [226561.543112] ZZ 0 block 7529 0
Jun  4 11:28:35 ugg kernel: [226561.544077] ZZ 0 block 7530 7531
Jun  4 11:28:35 ugg kernel: [226561.545606] ZZ 0 block 7532 0
Jun  4 11:28:35 ugg kernel: [226561.546623] ZZ 0 block 7533 0
Jun  4 11:28:35 ugg kernel: [226561.547020] ZZ 0 block 7478 0
Jun  4 11:28:35 ugg kernel: [226561.547439] ZZ 0 block 7536 0
Jun  4 11:28:35 ugg kernel: [226561.547792] ZZ 0 block 7537 7538
Jun  4 11:28:35 ugg kernel: [226561.548181] ZZ 0 block 7539 0
Jun  4 11:28:35 ugg kernel: [226561.549150] ZZ 0 block 7540 7541
Jun  4 11:28:35 ugg kernel: [226561.549675] ZZ 0 block 7542 0
Jun  4 11:28:35 ugg kernel: [226561.549987] ZZ 0 block 7543 7544
Jun  4 11:28:35 ugg kernel: [226561.550630] ZZ 0 block 7545 0
Jun  4 11:28:35 ugg kernel: [226561.551199] ZZ 0 block 7546 754
Jun  4 11:28:35 ugg kernel: [226561.551981] ZZ 0 block 7548 0
Jun  4 11:28:35 ugg kernel: [226561.552571] ZZ 0 block 7549 0
Jun  4 11:28:35 ugg kernel: [226561.553071] ZZ 0 block 7550 7551
Jun  4 11:28:35 ugg kernel: [226561.553461] ZZ 0 block 7552 0
Jun  4 11:28:35 ugg kernel: [226561.554430] ZZ 0 block 7553 7554
Jun  4 11:28:35 ugg kernel: [226561.554822] ZZ 0 block 7555 0
Jun  4 11:28:35 ugg kernel: [226561.556707] ZZ 0 block 0 0
Jun  4 11:28:35 ugg kernel: [226561.556997] ZZ 0 block 7556 7557
Jun  4 11:28:35 ugg kernel: [226561.557369] ZZ 0 block 7558 0
Jun  4 11:28:35 ugg kernel: [226561.557883] ZZ 0 block 7559 7560
Jun  4 11:28:35 ugg kernel: [226561.558397] ZZ 0 block 7561 0
Jun  4 11:28:35 ugg kernel: [226561.559088] ZZ 0 block 7562 0
Jun  4 11:28:35 ugg kernel: [226561.559620] ZZ 0 block 7563 7564
Jun  4 11:28:35 ugg kernel: [226561.560192] ZZ 0 block 7565 0
Jun  4 11:28:35 ugg kernel: [226561.560589] ZZ 0 block 7566 7567
Jun  4 11:28:35 ugg kernel: [226561.560997] ZZ 0 block 7568 0
Jun  4 11:28:35 ugg kernel: [226561.561444] ZZ 0 block 7569 7570
Jun  4 11:28:35 ugg kernel: [226561.561941] ZZ 0 block 7571 0
Jun  4 11:28:35 ugg kernel: [226561.562548] ZZ 0 block 7572 7573
Jun  4 11:28:35 ugg kernel: [226561.563094] ZZ 0 block 7574 0
Jun  4 11:28:35 ugg kernel: [226561.563538] ZZ 0 block 7575 0
Jun  4 11:28:35 ugg kernel: [226561.564614] ZZ 0 block 7576 7577
Jun  4 11:28:35 ugg kernel: [226561.564963] ZZ 0 block 7578 0
Jun  4 11:28:35 ugg kernel: [226561.565747] ZZ 0 block 7579 7580
Jun  4 11:28:35 ugg kernel: [226561.566450] ZZ 0 block 7581 0
Jun  4 11:28:35 ugg kernel: [226561.566941] ZZ 0 block 7582 7583
Jun  4 11:28:35 ugg kernel: [226561.567436] ZZ 0 block 7584 0
Jun  4 11:28:35 ugg kernel: [226561.567931] ZZ 0 block 7585 7586
Jun  4 11:28:35 ugg kernel: [226561.568252] ZZ 0 block 7587 0
Jun  4 11:28:35 ugg kernel: [226561.568804] ZZ 0 block 7588 0
Jun  4 11:28:35 ugg kernel: [226561.569314] ZZ 0 block 7590 0
Jun  4 11:28:35 ugg kernel: [226561.569866] ZZ 0 block 7591 0
Jun  4 11:28:35 ugg kernel: [226561.570384] ZZ 0 block 7592 7593
Jun  4 11:28:35 ugg kernel: [226561.571535] ZZ 0 block 7594 0
Jun  4 11:28:35 ugg kernel: [226561.571937] ZZ 0 block 7595 7596
Jun  4 11:28:35 ugg kernel: [226561.572327] ZZ 0 block 7597 0
Jun  4 11:28:35 ugg kernel: [226561.572884] ZZ 0 block 7598 7599
Jun  4 11:28:35 ugg kernel: [226561.573932] ZZ 0 block 7600 0
Jun  4 11:28:35 ugg kernel: [226561.574294] ZZ 0 block 7601 7602
Jun  4 11:28:35 ugg kernel: [226561.575955] ZZ 0 block 7603 0
Jun  4 11:28:35 ugg kernel: [226561.576384] ZZ 0 block 7604 0
Jun  4 11:28:35 ugg kernel: [226561.576687] ZZ 0 block 7605 7606
Jun  4 11:28:35 ugg kernel: [226561.577236] ZZ 0 block 7607 0
Jun  4 11:28:35 ugg kernel: [226561.578089] ZZ 0 block 7608 7609
Jun  4 11:28:35 ugg kernel: [226561.578518] ZZ 0 block 7610 0
Jun  4 11:28:35 ugg kernel: [226561.579006] ZZ 0 block 7611 7612
Jun  4 11:28:35 ugg kernel: [226561.579553] ZZ 0 block 7613 0
Jun  4 11:28:35 ugg kernel: [226561.579988] ZZ 0 block 7614 7615
Jun  4 11:28:35 ugg kernel: [226561.580912] ZZ 0 block 7616 0
Jun  4 11:28:35 ugg kernel: [226561.581290] ZZ 0 block 7617 0
Jun  4 11:28:35 ugg kernel: [226561.581802] ZZ 0 block 7618 7619
Jun  4 11:28:35 ugg kernel: [226561.583627] ZZ 0 block 7620 0
Jun  4 11:28:35 ugg kernel: [226561.583934] ZZ 0 block 7621 7622
Jun  4 11:28:35 ugg kernel: [226561.584382] ZZ 0 block 7623 0
Jun  4 11:28:35 ugg kernel: [226561.587023] ZZ 0 block 7624 7625
Jun  4 11:28:35 ugg kernel: [226561.588381] ZZ 0 block 7626 0
Jun  4 11:28:35 ugg kernel: [226561.592574] ZZ 0 block 0 0
Jun  4 11:28:35 ugg kernel: [226561.592907] ZZ 0 block 7627 7628
Jun  4 11:28:35 ugg kernel: [226561.593327] ZZ 0 block 7629 0
Jun  4 11:28:35 ugg kernel: [226561.594004] ZZ 0 block 7630 0
Jun  4 11:28:35 ugg kernel: [226561.594349] ZZ 0 block 7534 7535
Jun  4 11:28:35 ugg kernel: [226561.595505] ZZ 0 block 7632 0
Jun  4 11:28:35 ugg kernel: [226561.595852] ZZ 0 block 7633 0
Jun  4 11:28:35 ugg kernel: [226561.596634] ZZ 0 block 7634 7635
Jun  4 11:28:35 ugg kernel: [226561.597044] ZZ 0 block 7636 0
Jun  4 11:28:35 ugg kernel: [226561.597870] ZZ 0 block 7637 7638
Jun  4 11:28:35 ugg kernel: [226561.598432] ZZ 0 block 7639 0
Jun  4 11:28:35 ugg kernel: [226561.599391] ZZ 0 block 7640 7641
Jun  4 11:28:35 ugg kernel: [226561.599722] ZZ 0 block 7642 0
Jun  4 11:28:35 ugg kernel: [226561.600167] ZZ 0 block 7643 7644
Jun  4 11:28:35 ugg kernel: [226561.600695] ZZ 0 block 7645 0
Jun  4 11:28:35 ugg kernel: [226561.601107] ZZ 0 block 7646 0
Jun  4 11:28:36 ugg kernel: [226561.604904] ZZ 0 block 7647 7648
Jun  4 11:28:36 ugg kernel: [226561.605260] ZZ 0 block 7649 0
Jun  4 11:28:36 ugg kernel: [226561.606232] ZZ 0 block 7650 7651
Jun  4 11:28:36 ugg kernel: [226561.606628] ZZ 0 block 7652 0
Jun  4 11:28:36 ugg kernel: [226561.606967] ZZ 0 block 7653 7654
Jun  4 11:28:36 ugg kernel: [226561.607360] ZZ 0 block 7655 0
Jun  4 11:28:36 ugg kernel: [226561.607786] ZZ 0 block 7656 7657
_______________________________________________
ath5k-devel mailing list
ath5k-devel@lists.ath5k.org
https://lists.ath5k.org/mailman/listinfo/ath5k-devel

Reply via email to