adb: split up reads longer than 16k.

Reads from functionfs allocate contiguous buffers in the kernel, causing
long ones to sometimes fail because of memory fragmentation.

Bug: http://b/26206622
Change-Id: Id40753d6f29b37b5ca97c3e2fa3921f52b4242de
This commit is contained in:
Josh Gao 2015-12-16 11:00:08 -08:00
parent f8d892c84a
commit 0b19540dee
1 changed files with 2 additions and 1 deletions

View File

@ -481,7 +481,8 @@ static int usb_ffs_read(usb_handle* h, void* data, int len) {
char* buf = static_cast<char*>(data);
while (len > 0) {
int n = adb_read(h->bulk_out, buf, len);
int read_len = (len > 16384) ? 16384 : len;
int n = adb_read(h->bulk_out, buf, read_len);
if (n < 0) {
D("ERROR: fd = %d, n = %d: %s", h->bulk_out, n, strerror(errno));
return -1;