First off, there is no support for IDE devices in CONFIG_KIOBUF_IO.
That option only works for scsi devices. And the code actually
checks for that in ll_rw_blk.c, in the function ll_rw_kio():
/*
* Only support SCSI disk for now.
*
* ENOSYS to indicate caller
* should try ll_rw_block()
* for non-SCSI (e.g. IDE) disks.
*/
if (!SCSI_DISK_MAJOR(MAJOR(dev))){
*error = -ENOSYS;
goto end_io;
}
And the pagebuf_segment_apply() routine should then try the regular
buffer head patch if it gets an ENOSYS from trying a kiobuf-based
I/O request.
See below for further comments.
On Wed, 31 May 2000 15:37:03 CDT, Steve Lord <lord@xxxxxxx> wrote:
>> I updated a XFS kernel with today's tree, created a new file system
>> and tried to unpack a glibc-2.1 source rpm onto it. rpm -bp stopped
>> with EIO on write after writing a few hundred files.
>
>So far my attempts to duplicate this have failed, maybe the issue is more to
>do with what rpm does than kiobuf support - it should fall back to other
>methods if it is used on a device which does not support it.
>
>I need to go dig out a source rpm and give that a whirl.
I will probably do the same thing shortly.
>> The kernel log gave:
>>
>> start mounting filesystem: ide1(22,5)
>> Ending clean XFS mount for filesystem: ide1(22,5)
>> blocklog end: 12
>> linvfs_read_super: sb root ino/128 inode/0xc5a011a0 icnt/2 vp/0xc5a012b0
>> attempt to access beyond end of device
>> 16:05: rw=0, want=38781096, limit=8191984
>> end_pg_buffer_io_async not uptodate 0 page 0xc119d150
>> attempt to access beyond end of device
>> 16:05: rw=0, want=38781096, limit=8191984
>> end_pg_buffer_io_async not uptodate 0 page 0xc119d150
>> attempt to access beyond end of device
>> 16:05: rw=0, want=38781096, limit=8191984
>> end_pg_buffer_io_async not uptodate 0 page 0xc119d150
Hmmm..Its actually trying to go after a device with major number 16...that
should be a cdrom device, unless I'm mistaken. This is definitely not in
the new CONFIG_KIOBUF_IO codepath. Why should the requests be generated to
read past 8MB of the CD device?
>> fs/page_buf.c is version 1.102
>> fs/page_buf_locking.c is version 1.24
>>
>> Relevant .config:
>>
>> ONFIG_XFS_FS=m
>> CONFIG_PAGE_BUF=y
>> CONFIG_PAGE_BUF_LOCKING=y
>> CONFIG_AVL=y
>> # CONFIG_XFS_VNODE_TRACING is not set
>> CONFIG_KIOBUF_IO=y
>> CONFIG_AVL=y
>>
>> When CONFIG_KIOBUF_IO is disabled it seems to work. Looks like the support
>> for non SCSI devices (XFS is on a IDE disk) in page_buf.c is broken.
I guess....I'll dig around the code.
-Chait.
|