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