From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Date: Sun, 24 Mar 2002 20:25:05 +0300 From: Sergey Vlasov To: devel@altlinux.ru Subject: Re: [devel] linux/drivers/usb/scanner.c Message-Id: <20020324202505.3d7b013d.vsu@mivlgu.murom.ru> In-Reply-To: <20020324152536.1350c825.vsu@mivlgu.murom.ru> References: <20020324152536.1350c825.vsu@mivlgu.murom.ru> X-Mailer: Sylpheed version 0.7.4 (GTK+ 1.2.10; i586-alt-linux) Mime-Version: 1.0 Content-Type: multipart/signed; protocol="application/pgp-signature"; micalg=pgp-sha1; boundary="=.CavwK,A5s:XI4O" Sender: devel-admin@altlinux.ru Errors-To: devel-admin@altlinux.ru X-BeenThere: devel@altlinux.ru X-Mailman-Version: 2.0 Precedence: bulk Reply-To: devel@altlinux.ru List-Help: List-Post: List-Subscribe: , List-Id: List-Unsubscribe: , List-Archive: Archived-At: List-Archive: List-Post: --=.CavwK,A5s:XI4O Content-Type: multipart/mixed; boundary="Multipart_Sun__24_Mar_2002_20:25:05_+0300_084baa40" --Multipart_Sun__24_Mar_2002_20:25:05_+0300_084baa40 Content-Type: text/plain; charset=KOI8-R Content-Transfer-Encoding: 8bit Hello! Итак, в версии 0.4.7 драйвера USB-сканеров найдена куча багов, которые должен бы исправить прилагаемый патч. 1. close_scanner: race при проверке p_scn_table[scn_minor] - проверка выполнялась без захвата scn_mutex, что могло привести к oops, если указатель в этот момент обнулялся в disconnect_scanner. 2. Там же: если сканер был отсоединен до закрытия дескриптора, не вызывался MOD_DEC_USE_COUNT, в результате модуль невозможно было выгрузить. 3. ioctl_scanner: опять race, аналогичный close_scanner (тут про блокировку вообще забыли, да и непонятно, зачем вообще было лезть в p_scn_table при наличии нужного указателя в file->private_data). 4. probe_scanner: при занятости всех 16 номеров устройств происходило обращение за пределы массива p_scn_table. 5. disconnect_scanner: при уничтожении структуры scn_usb_data не проверялось наличие ссылок на нее в file->private_data; если после этого программа пыталась выполнить read или write, происходило обращение к освобожденной памяти. По поводу #5 пришлось менять схему работы со структурой scn_usb_data: в нее был добавлен счетчик ссылок, введены функции usb_scanner_inc_use и usb_scanner_dec_use. Теперь структура удаляется либо в disconnect_scanner, либо при закрытии последнего открытого дескриптора. Однако номер устройства освобождается всегда в disconnect_scanner - при немедленном подключении устройства назад не происходит сдвига номеров, как в usblp. Помимо этого, исправлено несколько неприятных особенностей, не являющихся багами в полном смысле слова: - вызовы down в {open,read,write}_scanner заменены на down_interruptible для возможности прерывания процесса сигналом; из close_scanner они вообще убраны за ненадобностью; - для open_scanner сделан отдельный семафор open_sem - устраняет блокировку open при выполнении read/write в другом процессе (это могло мешать при наличии нескольких сканеров - SANE открывает все устройства подряд); - статус сообщения "open_scanner(%d): Unable to access minor data" понижен с err до dbg - эта ситуация возникает при каждом открытии отсутствующего устройства; поскольку SANE по умолчанию открывает все возможные устройства /dev/usb/scanner*, это сообщение засоряет логи. Есть еще два бага, которые пока оставлены - надо исследовать вопросы совместимости. В read_scanner и write_scanner при прерывании сигналом возвращается -ERESTARTSYS, даже если часть данных была передана - в общем случае это неправильно. Хотя, скорее всего, ни один пользовательский драйвер сигналами не пользуется - иначе эта ошибка всплыла бы; к тому же все равно сигналы обрабатываются с большой задержкой - на время выполнения usb_bulk_msg. При проверке со сканером Mustek BearPaw 2400TA (тестовыми программами с http://www.mivlgu.murom.ru/~vsu/gt68xx/) при отключении сканера во время работы перестали происходить oops (с неисправленным драйвером были). Осталась проблема, которая, судя по всему, не связана с драйвером scanner.c - она проявляется и с usbdevfs и libusb: изредка (удалось повторить раза с 20-го) получается: Mar 24 19:41:23 canopus kernel: usb.c: USB disconnect on device 21 Mar 24 19:41:33 canopus kernel: usb_control/bulk_msg: timeout Mar 24 19:41:33 canopus kernel: usbdevfs: USBDEVFS_BULK failed dev 21 ep 0x81 len 4096 ret -110 Mar 24 19:41:55 canopus kernel: hub.c: USB new device connect on bus1/1, assigned device number 22 Mar 24 19:41:58 canopus kernel: usb_control/bulk_msg: timeout Mar 24 19:41:58 canopus kernel: usb.c: USB device not accepting new address=22 (error=-110) Mar 24 19:41:58 canopus kernel: hub.c: USB new device connect on bus1/1, assigned device number 23 Mar 24 19:42:01 canopus kernel: usb_control/bulk_msg: timeout Mar 24 19:42:01 canopus kernel: usb.c: USB device not accepting new address=23 (error=-110) После этого USB не работает до выполнения service usb restart (предварительно rmmod scanner). Впрочем, возможно, это ошибки старого ядра 2.4.15-alt0.61-up. -- Сергей Власов --Multipart_Sun__24_Mar_2002_20:25:05_+0300_084baa40 Content-Type: application/octet-stream; name="scanner-0.4.7-fix.patch" Content-Disposition: attachment; filename="scanner-0.4.7-fix.patch" Content-Transfer-Encoding: base64 ZGlmZiAtdXIgLi4vb3JpZy9zY2FubmVyLmMgLi9zY2FubmVyLmMKLS0tIC4uL29yaWcvc2Nhbm5l ci5jCVRodSBOb3YgMjkgMDg6NDQ6MDYgMjAwMQorKysgLi9zY2FubmVyLmMJU3VuIE1hciAyNCAx OToyMzozNSAyMDAyCkBAIC0zMzQsNiArMzM0LDIxIEBACiAgKi8gCiAjaW5jbHVkZSAic2Nhbm5l ci5oIgogCitzdGF0aWMgdm9pZCB1c2Jfc2Nhbm5lcl9mcmVlKHN0cnVjdCBzY25fdXNiX2RhdGEg KnNjbik7CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordXNiX3NjYW5uZXJfaW5jX3VzZShzdHJ1Y3Qg c2NuX3VzYl9kYXRhICpzY24pCit7CisJYXRvbWljX2luYygmc2NuLT51c2Vycyk7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdm9pZAordXNiX3NjYW5uZXJfZGVjX3VzZShzdHJ1Y3Qgc2NuX3VzYl9kYXRh ICpzY24pCit7CisJaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJnNjbi0+dXNlcnMpKQorCQl1c2Jf c2Nhbm5lcl9mcmVlKHNjbik7Cit9CisKIHN0YXRpYyB2b2lkCiBpcnFfc2Nhbm5lcihzdHJ1Y3Qg dXJiICp1cmIpCiB7CkBAIC0zNzEsMjYgKzM4NiwzMyBAQAogCiAJTU9EX0lOQ19VU0VfQ09VTlQ7 CiAKLQlkb3duKCZzY25fbXV0ZXgpOwotCiAJc2NuX21pbm9yID0gVVNCX1NDTl9NSU5PUihpbm9k ZSk7CiAKIAlkYmcoIm9wZW5fc2Nhbm5lcjogc2NuX21pbm9yOiVkIiwgc2NuX21pbm9yKTsKIAot CWlmICghcF9zY25fdGFibGVbc2NuX21pbm9yXSkgeworCWlmIChkb3duX2ludGVycnVwdGlibGUo JnNjbl9tdXRleCkgIT0gMCkgeworCQlNT0RfREVDX1VTRV9DT1VOVDsKKwkJcmV0dXJuIC1FUkVT VEFSVFNZUzsKKwl9CisKKwlzY24gPSBwX3Njbl90YWJsZVtzY25fbWlub3JdOworCWlmICghc2Nu KSB7CiAJCXVwKCZzY25fbXV0ZXgpOwogCQlNT0RfREVDX1VTRV9DT1VOVDsKLQkJZXJyKCJvcGVu X3NjYW5uZXIoJWQpOiBVbmFibGUgdG8gYWNjZXNzIG1pbm9yIGRhdGEiLCBzY25fbWlub3IpOwor CQlkYmcoIm9wZW5fc2Nhbm5lciglZCk6IFVuYWJsZSB0byBhY2Nlc3MgbWlub3IgZGF0YSIsIHNj bl9taW5vcik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCXNjbiA9IHBfc2NuX3RhYmxlW3Nj bl9taW5vcl07CisJdXNiX3NjYW5uZXJfaW5jX3VzZShzY24pOyAvKiBNYWtlIHN1cmUgdGhlIGRl dmljZSB3b24ndCBnbyBhd2F5ICovCiAKLQlkZXYgPSBzY24tPnNjbl9kZXY7CisJdXAoJnNjbl9t dXRleCk7IC8qIE5vdyBoYW5kbGVkIGJ5IHRoZSBhYm92ZSAqLwogCi0JZG93bigmKHNjbi0+c2Vt KSk7CS8qIE5vdyBwcm90ZWN0IHRoZSBzY25fdXNiX2RhdGEgc3RydWN0dXJlICovIAorCWlmIChk b3duX2ludGVycnVwdGlibGUoJihzY24tPm9wZW5fc2VtKSkgIT0gMCkgeworCQllcnIgPSAtRVJF U1RBUlRTWVM7CisJCWdvdG8gb3V0X2Vycm9yX25vdW5sb2NrOworCX0KIAotCXVwKCZzY25fbXV0 ZXgpOyAvKiBOb3cgaGFuZGxlZCBieSB0aGUgYWJvdmUgKi8KKwlkZXYgPSBzY24tPnNjbl9kZXY7 CiAKIAlpZiAoIWRldikgewogCQllcnIoIm9wZW5fc2Nhbm5lciglZCk6IFNjYW5uZXIgZGV2aWNl IG5vdCBwcmVzZW50Iiwgc2NuX21pbm9yKTsKQEAgLTQxOCwxMSArNDQwLDEzIEBACiAKIAogb3V0 X2Vycm9yOgorCXVwKCYoc2NuLT5vcGVuX3NlbSkpOyAvKiBXYWtlIHVwIGFueSBwb3NzaWJsZSBj b250ZW5kaW5nIHByb2Nlc3NlcyAqLwogCi0JdXAoJihzY24tPnNlbSkpOyAvKiBXYWtlIHVwIGFu eSBwb3NzaWJsZSBjb250ZW5kaW5nIHByb2Nlc3NlcyAqLwotCi0JaWYgKGVycikKK291dF9lcnJv cl9ub3VubG9jazoKKwlpZiAoZXJyKSB7CisJCXVzYl9zY2FubmVyX2RlY191c2Uoc2NuKTsKIAkJ TU9EX0RFQ19VU0VfQ09VTlQ7CisJfQogCiAJcmV0dXJuIGVycjsKIH0KQEAgLTQzMiwyNyArNDU2 LDE1IEBACiB7CiAJc3RydWN0IHNjbl91c2JfZGF0YSAqc2NuOwogCi0Ja2Rldl90IHNjbl9taW5v cjsKLQotCXNjbl9taW5vciA9IFVTQl9TQ05fTUlOT1IgKGlub2RlKTsKLQotCWRiZygiY2xvc2Vf c2Nhbm5lcjogc2NuX21pbm9yOiVkIiwgc2NuX21pbm9yKTsKKwlzY24gPSBmaWxlLT5wcml2YXRl X2RhdGE7CiAKLQlpZiAoIXBfc2NuX3RhYmxlW3Njbl9taW5vcl0pIHsKLQkJZXJyKCJjbG9zZV9z Y2FubmVyKCVkKTogaW52YWxpZCBzY25fbWlub3IiLCBzY25fbWlub3IpOwotCQlyZXR1cm4gLUVO T0RFVjsKLQl9CisJZGJnKCJjbG9zZV9zY2FubmVyOiBzY25fbWlub3I6JWQiLCBzY24tPnNjbl9t aW5vcik7CiAKLQlkb3duKCZzY25fbXV0ZXgpOwotCi0Jc2NuID0gcF9zY25fdGFibGVbc2NuX21p bm9yXTsKLQlkb3duKCYoc2NuLT5zZW0pKTsKIAlzY24tPmlzb3BlbiA9IDA7CiAKIAlmaWxlLT5w cml2YXRlX2RhdGEgPSBOVUxMOwogCi0JdXAoJnNjbl9tdXRleCk7Ci0JdXAoJihzY24tPnNlbSkp OworCXVzYl9zY2FubmVyX2RlY191c2Uoc2NuKTsKIAogCU1PRF9ERUNfVVNFX0NPVU5UOwogCkBA IC00NzksNyArNDkxLDggQEAKIAogCXNjbiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAotCWRvd24o JihzY24tPnNlbSkpOworCWlmIChkb3duX2ludGVycnVwdGlibGUoJihzY24tPnNlbSkpICE9IDAp CisJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAKIAlzY25fbWlub3IgPSBzY24tPnNjbl9taW5vcjsK IApAQCAtNTY3LDcgKzU4MCw4IEBACiAKIAlzY24gPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKLQlk b3duKCYoc2NuLT5zZW0pKTsKKwlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCYoc2NuLT5zZW0pKSAh PSAwKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwogCiAJc2NuX21pbm9yID0gc2NuLT5zY25fbWlu b3I7CiAKQEAgLTY2OSwxOCArNjgzLDE0IEBACiBpb2N0bF9zY2FubmVyKHN0cnVjdCBpbm9kZSAq aW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAogCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2ln bmVkIGxvbmcgYXJnKQogeworCXN0cnVjdCBzY25fdXNiX2RhdGEgKnNjbjsKIAlzdHJ1Y3QgdXNi X2RldmljZSAqZGV2OwogCiAJa2Rldl90IHNjbl9taW5vcjsKIAotCXNjbl9taW5vciA9IFVTQl9T Q05fTUlOT1IoaW5vZGUpOwotCi0JaWYgKCFwX3Njbl90YWJsZVtzY25fbWlub3JdKSB7Ci0JCWVy cigiaW9jdGxfc2Nhbm5lciglZCk6IGludmFsaWQgc2NuX21pbm9yIiwgc2NuX21pbm9yKTsKLQkJ cmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JZGV2ID0gcF9zY25fdGFibGVbc2NuX21pbm9yXS0+c2Nu X2RldjsKKwlzY24gPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJZGV2ID0gc2NuLT5zY25fZGV2Owor CXNjbl9taW5vciA9IHNjbi0+c2NuX21pbm9yOwogCiAJc3dpdGNoIChjbWQpCiAJewpAQCAtOTU5 LDcgKzk2OSw3IEBACiAJfQogCiAvKiBDaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgbGFzdCBz bG90IGlzbid0IGFscmVhZHkgdGFrZW4gKi8KLQlpZiAocF9zY25fdGFibGVbc2NuX21pbm9yXSkg eworCWlmIChzY25fbWlub3IgPj0gU0NOX01BWF9NTlIpIHsKIAkJZXJyKCJwcm9iZV9zY2FubmVy OiBObyBtb3JlIG1pbm9yIGRldmljZXMgcmVtYWluaW5nLiIpOwogCQl1cCgmc2NuX211dGV4KTsK IAkJcmV0dXJuIE5VTEw7CkBAIC05NzQsNiArOTg0LDggQEAKIAl9CiAJbWVtc2V0IChzY24sIDAs IHNpemVvZihzdHJ1Y3Qgc2NuX3VzYl9kYXRhKSk7CiAKKwlhdG9taWNfc2V0KCZzY24tPnVzZXJz LCAxKTsKKwlpbml0X01VVEVYKCYoc2NuLT5vcGVuX3NlbSkpOwogCWluaXRfTVVURVgoJihzY24t PnNlbSkpOyAvKiBJbml0aWFsaXplcyB0byB1bmxvY2tlZCAqLwogCiAJZGJnICgicHJvYmVfc2Nh bm5lciglZCk6IEFkZHJlc3Mgb2Ygc2NuOiVwIiwgc2NuX21pbm9yLCBzY24pOwpAQCAtMTAzOSw2 ICsxMDUxLDcgQEAKIAlzY24tPmludHJfZXAgPSBoYXZlX2ludHI7CiAJc2NuLT5wcmVzZW50ID0g MTsKIAlzY24tPnNjbl9kZXYgPSBkZXY7CisJdXNiX2luY19kZXZfdXNlKGRldik7CiAJc2NuLT5z Y25fbWlub3IgPSBzY25fbWlub3I7CiAJc2NuLT5pc29wZW4gPSAwOwogCkBAIC0xMDYwLDI5ICsx MDczLDM3IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1kaXNjb25uZWN0X3NjYW5uZXIoc3RydWN0IHVz Yl9kZXZpY2UgKmRldiwgdm9pZCAqcHRyKQordXNiX3NjYW5uZXJfZnJlZShzdHJ1Y3Qgc2NuX3Vz Yl9kYXRhICpzY24pCiB7Ci0Jc3RydWN0IHNjbl91c2JfZGF0YSAqc2NuID0gKHN0cnVjdCBzY25f dXNiX2RhdGEgKikgcHRyOwotCi0JZG93biAoJnNjbl9tdXRleCk7Ci0JZG93biAoJihzY24tPnNl bSkpOworCWRiZygidXNiX3NjYW5uZXJfZnJlZSglZCk6IGZyZWVpbmcgc2NuPSVwIiwgc2NuLT5z Y25fbWlub3IsIHNjbik7CiAKIAlpZihzY24tPmludHJfZXApIHsKIAkJZGJnKCJkaXNjb25uZWN0 X3NjYW5uZXIoJWQpOiBVbmxpbmtpbmcgSVJRIFVSQiIsIHNjbi0+c2NuX21pbm9yKTsKIAkJdXNi X3VubGlua191cmIoJnNjbi0+c2NuX2lycSk7CiAJfQotICAgICAgICB1c2JfZHJpdmVyX3JlbGVh c2VfaW50ZXJmYWNlKCZzY2FubmVyX2RyaXZlciwKLSAgICAgICAgICAgICAgICAmc2NuLT5zY25f ZGV2LT5hY3Rjb25maWctPmludGVyZmFjZVtzY24tPmlmbnVtXSk7CiAKKwl1c2JfZGVjX2Rldl91 c2Uoc2NuLT5zY25fZGV2KTsKIAlrZnJlZShzY24tPmlidWYpOwogCWtmcmVlKHNjbi0+b2J1Zik7 CiAKKwlrZnJlZSAoc2NuKTsKK30KKworc3RhdGljIHZvaWQKK2Rpc2Nvbm5lY3Rfc2Nhbm5lcihz dHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB2b2lkICpwdHIpCit7CisJc3RydWN0IHNjbl91c2JfZGF0 YSAqc2NuID0gKHN0cnVjdCBzY25fdXNiX2RhdGEgKikgcHRyOworCisJZG93biAoJnNjbl9tdXRl eCk7CisgICAgICAgIHVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UoJnNjYW5uZXJfZHJpdmVy LAorICAgICAgICAgICAgICAgICZzY24tPnNjbl9kZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlW3Nj bi0+aWZudW1dKTsKKwogCWRiZygiZGlzY29ubmVjdF9zY2FubmVyOiBEZS1hbGxvY2F0aW5nIG1p bm9yOiVkIiwgc2NuLT5zY25fbWlub3IpOwogCWRldmZzX3VucmVnaXN0ZXIoc2NuLT5kZXZmcyk7 CiAJcF9zY25fdGFibGVbc2NuLT5zY25fbWlub3JdID0gTlVMTDsKLQl1cCAoJihzY24tPnNlbSkp OwotCWtmcmVlIChzY24pOwogCXVwICgmc2NuX211dGV4KTsKKworCXVzYl9zY2FubmVyX2RlY191 c2Uoc2NuKTsKIH0KIAogc3RhdGljIHN0cnVjdApkaWZmIC11ciAuLi9vcmlnL3NjYW5uZXIuaCAu L3NjYW5uZXIuaAotLS0gLi4vb3JpZy9zY2FubmVyLmgJVGh1IE5vdiAyOSAwODo0NDowNiAyMDAx CisrKyAuL3NjYW5uZXIuaAlTdW4gTWFyIDI0IDE5OjEyOjUxIDIwMDIKQEAgLTIzOSw2ICsyMzks NyBAQAogc3RhdGljIERFQ0xBUkVfTVVURVggKHNjbl9tdXRleCk7IC8qIEluaXRpYWxpemVzIHRv IHVubG9ja2VkICovCiAKIHN0cnVjdCBzY25fdXNiX2RhdGEgeworCWF0b21pY190IHVzZXJzOwkJ LyogUmVmZXJlbmNlIGNvdW50ICovCiAJc3RydWN0IHVzYl9kZXZpY2UgKnNjbl9kZXY7CiAJZGV2 ZnNfaGFuZGxlX3QgZGV2ZnM7CS8qIGRldmZzIGRldmljZSAqLwogCXN0cnVjdCB1cmIgc2NuX2ly cTsKQEAgLTI1MCw2ICsyNTEsNyBAQAogCWNoYXIgKm9idWYsICppYnVmOwkvKiB0cmFuc2ZlciBi dWZmZXJzICovCiAJY2hhciBidWxrX2luX2VwLCBidWxrX291dF9lcCwgaW50cl9lcDsgLyogRW5k cG9pbnQgYXNzaWdubWVudHMgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCByZF93YWl0X3E7IC8qIHJl YWQgdGltZW91dHMgKi8KKwlzdHJ1Y3Qgc2VtYXBob3JlIG9wZW5fc2VtOyAvKiBsb2NrIHRvIHBy ZXZlbnQgY29uY3VycmVudCBvcGVucyAqLwogCXN0cnVjdCBzZW1hcGhvcmUgc2VtOyAvKiBsb2Nr IHRvIHByZXZlbnQgY29uY3VycmVudCByZWFkcyBvciB3cml0ZXMgKi8KIAl1bnNpZ25lZCBpbnQg cmRfbmFrX3RpbWVvdXQ7IC8qIFNlY29uZHMgdG8gd2FpdCBiZWZvcmUgcmVhZCgpIHRpbWVvdXQu ICovCiB9Owo= --Multipart_Sun__24_Mar_2002_20:25:05_+0300_084baa40-- --=.CavwK,A5s:XI4O Content-Type: application/pgp-signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.0.6 (GNU/Linux) iD8DBQE8ngv0W82GfkQfsqIRAmjzAJsGBpXh4Hh+mqHIhZhZSwlot4EZzwCgiDjU X/RHVbSwb6r8B/sIV0hTYTs= =hqCn -----END PGP SIGNATURE----- --=.CavwK,A5s:XI4O--