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.
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
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.
Now when trying to remove the directory tree created in the failed unpack
above after a reboot gives funny effects too:
rm -rf glibc-2.1
rm: cannot remove directory `glibc-2.1/db': File exists
rm: cannot remove directory `glibc-2.1/db2/progs': File exists
rm: cannot remove directory `glibc-2.1/db2': File exists
rm: cannot remove directory `glibc-2.1': File exists
> find glibc-2.1 -ls
8388736 1 drwxr-xr-x 6 ak users 46 Jun 1 04:44 glibc-2.1
find: glibc-2.1/argp: No such file or directory
12583042 1 drwxr-xr-x 3 ak users 18 Jun 1 04:43
glibc-2.1/db
find: glibc-2.1/db/btree: No such file or directory
4194458 1 drwxr-xr-x 5 ak users 40 Jun 1 04:43
glibc-2.1/db2
find: glibc-2.1/db2/common: No such file or directory
find: glibc-2.1/db2/mp: No such file or directory
29360271 1 drwxr-xr-x 3 ak users 23 Jun 1 04:43
glibc-2.1/db2/progs
find: glibc-2.1/db2/progs/db_dump185: No such file or directory
find: glibc-2.1/elf: No such file or directory
Looks like the disk structure is corrupted now. It gets now
new messages in the system log [after executing the commands above]:
ttempt to access beyond end of device
16:05: rw=0, want=38779324, limit=8191984
end_pg_buffer_io_async not uptodate 0 page 0xc11e5720
attempt to access beyond end of device
16:05: rw=0, want=38779324, limit=8191984
end_pg_buffer_io_async not uptodate 0 page 0xc11e5720
attempt to access beyond end of device
16:05: rw=0, want=38779324, limit=8191984
end_pg_buffer_io_async not uptodate 0 page 0xc11e5720
attempt to access beyond end of device
16:05: rw=0, want=38779324, limit=8191984
end_pg_buffer_io_async not uptodate 0 page 0xc11e5720
attempt to access beyond end of device
16:05: rw=0, want=38779324, limit=8191984
end_pg_buffer_io_async not uptodate 0 page 0xc11e5720
attempt to access beyond end of device
16:05: rw=0, want=38779324, limit=8191984
end_pg_buffer_io_async not uptodate 0 page 0xc11e5720
The tree cannot be removed anymore.
When I recompile without CONFIG_KIOBUF_IO the scary messages do not appear
anymore, but it is still impossible to remove the tree. The libc unpack
works now too.
I would run fsck on it, but it seems to be impossible to umount a XFS
file system now (umount gives EBUSY even when lsof shows nothing)
-Andi
|