From: me
Date: Mon, 01 Oct 2001 22:53:31 +0900 (JST)
Message-ID: <20011001225331N.masano@xxxxxxxxxxxxxx>
> Hi,
>
> I encountered an oops and you can reproduce it with the following
> operations:
>
> # lvcreate -L 32m -n masano1 /dev/vg0
> # mkfs.xfs /dev/vg0/masano1
> # mount /dev/vg0/masano1 /mnt/masano1
> # lvchange -p r /dev/vg0/masano1
> # touch /mnt/masano1/dummy
> # sync
>
> I think that these operations may have no special meaning, however,
> it seems that there is an issue in the error handling of writing
> log operation.
>
> I looked into XFS kernel sources but I could not find what led to this
> oops.
I found that this oops occurred because of a linkage of buffer_head
lru/free list was broken.
The I/O completion routine for pagebuf I/O such as
_end_pagebuf_page_io() free the buffer_head with kmem_cache_free().
But when I/O error is detected in LVM by above operations, the
buffer_head is listed into lru/free list by buffer_IO_error().
The lru/free list is broken when the freed buffer_head is reallocated
and reused.
Which is rough in manner, calling kmem_cache_free() or calling
buffer_IO_error()?
> Thanks in advance,
--
masano
|