Problems with SG_IO ioctls on sd device (verses sg device)

Burn Alting burn at goldweb.com.au
Wed Jan 26 00:40:13 UTC 2005


All,

I need help. I am using ftp.kernel.org's linux-2.6.10 on a Fedora
Core 3 system. I eventually want my code to work on a 'clean'
Fedora Core system, but I have put the ftp.kernel.org's kernel
up so I can cross-test the same devices with /dev/sgX.

I have a problem when I use /dev/sdX as opposed to /dev/sgX (eg /dev/sda
compared to /dev/sg0). I am setting up SCSI write commands of arbitrary
size, in an sg_io_hdr_t and sending the command to the device with a
SG_IO ioctl call. I am using a LSI Logic LSIFC929 as the HBA in a Dual
Xeon server and a raid as the target. I can issue writes up to 2048
blocks in size to /dev/sg0 but when I write this many to /dev/sda (with
the same code), it fails.

The failure has something to do with the __bio_add_page() routine
in fs/bio.c. I am sailing in totally uncharted waters in this code,
hence my call for help.

Firstly, SHOULD an SG_IO ioctl() call sent to a /dev/sg device
work fine and NOT work when the same SG_IO ioctl() call be sent
to /dev/sda.  I realise that the ioctl() calls execute different
code, but conceptually should they both generate the same command
to the device?

If they should, then I include some debug output below of a
simple program that set's the SG_RESERVED_SIZE to: 4194304,
allocates paged aligned memory and then forms a 512 block write to
location 1 on the target. Directly after a reboot of the kernel,
the ioctl() write to /dev/sda works, but the next time it fails
with an EINVAL result.

The following occurs when my write of say 512 blocks is sent
to /dev/sda.

drivers/block/scsi_ioctl.c:scsi_cmd_ioctl() gets called which in
the switch calls drivers/block/scsi_ioctl.c:sg_io().

Everything in sg_io() is fine until the call to blk_rq_map_user()
which returns -22 (EINVAL).

In the test of q->max_sectors is ok as is the length and buffer
existance.
	rq = blk_get_request(q, rw, __GFP_WAIT);
is fine but bio = bio_map_user(q, NULL, uaddr, len, rw == READ);
returns an error status.

We get into fs/bio.c:bio_map_user() which calls __bio_map_user()
which is the problem.

For a 512 block write, we require 64 * PAGE_SIZE (it's 4K) so the code
in fs/bio.c:__bio_map_user() looks like


...
    /*
     * transfer and buffer must be aligned to at least hardsector
     * size for now, in the future we can relax this restriction
     */
    if ((uaddr & queue_dma_alignment(q)) || (len & queue_dma_alignment
(q))) {
        printk("Q %p bad alignment\n", q);
        return ERR_PTR(-EINVAL);
    }

    bio = bio_alloc(GFP_KERNEL, nr_pages);
    if (!bio) {
        printk("Q %p - no bio_alloc\n", q);
        return ERR_PTR(-ENOMEM);
    }

    ret = -ENOMEM;
    pages = kmalloc(nr_pages * sizeof(struct page *), GFP_KERNEL);
    if (!pages) {
        printk("Q %p - no kmalloc\n", q);
        goto out;
    }

    down_read(&current->mm->mmap_sem);
    ret = get_user_pages(current, current->mm, uaddr, nr_pages,
                        write_to_vm, 0, pages, NULL);
    up_read(&current->mm->mmap_sem);

    if (ret < nr_pages) {
        printk("ret %d < nr_pages %d\n", ret, nr_pages);
        goto out;
    }

    bio->bi_bdev = bdev;

    offset = uaddr & ~PAGE_MASK;
    printk("ret = %d offset = %d, nr_pages = %d, len = %u\n", ret,
offset, nr_pages, len);
    for (i = 0; i < nr_pages; i++) {
        unsigned int bytes = PAGE_SIZE - offset;

        printk("i = %2d bytes %u len %u\n", i, bytes, len);
        if (len <= 0)
            break;

        if (bytes > len)
            bytes = len;

        /*
         * sorry...
         */
        k = __bio_add_page(q, bio, pages[i], bytes, offset);
        printk("__bio_add_page() returns = %d and bytes is %d\n", k,
bytes);
        if (k < bytes)
            break;

        len -= bytes;
        offset = 0;
    }

    printk("i = %d, nr_pages = %d, PAGE_SIZE %lu\n", i, nr_pages,
PAGE_SIZE);
    /*
     * release the pages we didn't map into the bio, if any
     */
    while (i < nr_pages)
        page_cache_release(pages[i++]);

    kfree(pages);

    /*
     * set data direction, and check if mapped pages need bouncing
     */
    if (!write_to_vm)
        bio->bi_rw |= (1 << BIO_RW);

    bio->bi_flags |= (1 << BIO_USER_MAPPED);
    return bio;
out:
    kfree(pages);
    bio_put(bio);
    printk("returns bad q %p\n", q);
    return ERR_PTR(ret);

and the printk's show (for two successive 512 block writes - the first
works, but the second fails) ...

Jan 26 00:49:17 swtf2 kernel: ret = 64 offset = 0, nr_pages = 64, len =
262144
Jan 26 00:49:17 swtf2 kernel: i =  0 bytes 4096 len 262144
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i =  1 bytes 4096 len 258048
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i =  2 bytes 4096 len 253952
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i =  3 bytes 4096 len 249856
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i =  4 bytes 4096 len 245760
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i =  5 bytes 4096 len 241664
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i =  6 bytes 4096 len 237568
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i =  7 bytes 4096 len 233472
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i =  8 bytes 4096 len 229376
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i =  9 bytes 4096 len 225280
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i = 10 bytes 4096 len 221184
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i = 11 bytes 4096 len 217088
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i = 12 bytes 4096 len 212992
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i = 13 bytes 4096 len 208896
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i = 14 bytes 4096 len 204800
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i = 15 bytes 4096 len 200704
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i = 16 bytes 4096 len 196608
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i = 17 bytes 4096 len 192512
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i = 18 bytes 4096 len 188416
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i = 19 bytes 4096 len 184320
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i = 20 bytes 4096 len 180224
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i = 21 bytes 4096 len 176128
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i = 22 bytes 4096 len 172032
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i = 23 bytes 4096 len 167936
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i = 24 bytes 4096 len 163840
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i = 25 bytes 4096 len 159744
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i = 26 bytes 4096 len 155648
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i = 27 bytes 4096 len 151552
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i = 28 bytes 4096 len 147456
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i = 29 bytes 4096 len 143360
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i = 30 bytes 4096 len 139264
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i = 31 bytes 4096 len 135168
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i = 32 bytes 4096 len 131072
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i = 33 bytes 4096 len 126976
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i = 34 bytes 4096 len 122880
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i = 35 bytes 4096 len 118784
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i = 36 bytes 4096 len 114688
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i = 37 bytes 4096 len 110592
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i = 38 bytes 4096 len 106496
Jan 26 00:49:17 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:17 swtf2 kernel: i = 39 bytes 4096 len 102400
Jan 26 00:49:18 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:18 swtf2 kernel: i = 40 bytes 4096 len 98304
Jan 26 00:49:18 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:18 swtf2 kernel: i = 41 bytes 4096 len 94208
Jan 26 00:49:18 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:18 swtf2 kernel: i = 42 bytes 4096 len 90112
Jan 26 00:49:18 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:18 swtf2 kernel: i = 43 bytes 4096 len 86016
Jan 26 00:49:18 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:18 swtf2 kernel: i = 44 bytes 4096 len 81920
Jan 26 00:49:18 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:18 swtf2 kernel: i = 45 bytes 4096 len 77824
Jan 26 00:49:18 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:18 swtf2 kernel: i = 46 bytes 4096 len 73728
Jan 26 00:49:18 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:18 swtf2 kernel: i = 47 bytes 4096 len 69632
Jan 26 00:49:18 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:18 swtf2 kernel: i = 48 bytes 4096 len 65536
Jan 26 00:49:18 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:18 swtf2 kernel: i = 49 bytes 4096 len 61440
Jan 26 00:49:18 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:18 swtf2 kernel: i = 50 bytes 4096 len 57344
Jan 26 00:49:18 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:18 swtf2 kernel: i = 51 bytes 4096 len 53248
Jan 26 00:49:18 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:18 swtf2 kernel: i = 52 bytes 4096 len 49152
Jan 26 00:49:18 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:18 swtf2 kernel: i = 53 bytes 4096 len 45056
Jan 26 00:49:18 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:18 swtf2 kernel: i = 54 bytes 4096 len 40960
Jan 26 00:49:18 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:18 swtf2 kernel: i = 55 bytes 4096 len 36864
Jan 26 00:49:18 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:18 swtf2 kernel: i = 56 bytes 4096 len 32768
Jan 26 00:49:18 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:18 swtf2 kernel: i = 57 bytes 4096 len 28672
Jan 26 00:49:18 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:18 swtf2 kernel: i = 58 bytes 4096 len 24576
Jan 26 00:49:18 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:18 swtf2 kernel: i = 59 bytes 4096 len 20480
Jan 26 00:49:18 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:18 swtf2 kernel: i = 60 bytes 4096 len 16384
Jan 26 00:49:18 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:18 swtf2 kernel: i = 61 bytes 4096 len 12288
Jan 26 00:49:18 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:18 swtf2 kernel: i = 62 bytes 4096 len 8192
Jan 26 00:49:18 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:18 swtf2 kernel: i = 63 bytes 4096 len 4096
Jan 26 00:49:18 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:18 swtf2 kernel: i = 64, nr_pages = 64, PAGE_SIZE 4096
Jan 26 00:49:21 swtf2 kernel: ret = 64 offset = 0, nr_pages = 64, len =
262144
Jan 26 00:49:21 swtf2 kernel: i =  0 bytes 4096 len 262144
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i =  1 bytes 4096 len 258048
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i =  2 bytes 4096 len 253952
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i =  3 bytes 4096 len 249856
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i =  4 bytes 4096 len 245760
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i =  5 bytes 4096 len 241664
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i =  6 bytes 4096 len 237568
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i =  7 bytes 4096 len 233472
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i =  8 bytes 4096 len 229376
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i =  9 bytes 4096 len 225280
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 10 bytes 4096 len 221184
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 11 bytes 4096 len 217088
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 12 bytes 4096 len 212992
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 13 bytes 4096 len 208896
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 14 bytes 4096 len 204800
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 15 bytes 4096 len 200704
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 16 bytes 4096 len 196608
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 17 bytes 4096 len 192512
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 18 bytes 4096 len 188416
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 19 bytes 4096 len 184320
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 20 bytes 4096 len 180224
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 21 bytes 4096 len 176128
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 22 bytes 4096 len 172032
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 23 bytes 4096 len 167936
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 24 bytes 4096 len 163840
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 25 bytes 4096 len 159744
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 26 bytes 4096 len 155648
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 27 bytes 4096 len 151552
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 28 bytes 4096 len 147456
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 29 bytes 4096 len 143360
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 30 bytes 4096 len 139264
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 31 bytes 4096 len 135168
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 32 bytes 4096 len 131072
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 33 bytes 4096 len 126976
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 34 bytes 4096 len 122880
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 35 bytes 4096 len 118784
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 36 bytes 4096 len 114688
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 37 bytes 4096 len 110592
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 38 bytes 4096 len 106496
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 39 bytes 4096 len 102400
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 40 bytes 4096 len 98304
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 41 bytes 4096 len 94208
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 42 bytes 4096 len 90112
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 43 bytes 4096 len 86016
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 44 bytes 4096 len 81920
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 45 bytes 4096 len 77824
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 46 bytes 4096 len 73728
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 47 bytes 4096 len 69632
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 48 bytes 4096 len 65536
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 49 bytes 4096 len 61440
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 50 bytes 4096 len 57344
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 51 bytes 4096 len 53248
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 52 bytes 4096 len 49152
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 53 bytes 4096 len 45056
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 54 bytes 4096 len 40960
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 4096 and bytes
is 4096
Jan 26 00:49:21 swtf2 kernel: i = 55 bytes 4096 len 36864
Jan 26 00:49:21 swtf2 kernel: __bio_add_page() returns = 0 and bytes is
4096
Jan 26 00:49:21 swtf2 kernel: i = 55, nr_pages = 64, PAGE_SIZE 4096
Jan 26 00:49:21 swtf2 kernel: bio->bi_size = 225280 and len = 262144
Jan 26 00:49:21 swtf2 kernel: bio_map_user 2 q f7d5864c
Jan 26 00:49:21 swtf2 kernel: bio is the error
Jan 26 00:49:21 swtf2 kernel: blk_rq_map_user(Q f7d5864c) returns -22

Is anything more needed? Can anyone help?

Regards

Burn Alting
burn at goldweb.com.au






More information about the devel mailing list