In response to comments from Andrea Archangeli and Andrew Morton,
and a bug report from Andrew Tridgell (is that enough Andrews
in one sentence!), this is a major cleanup of the handling of
delayed allocate pages in xfs and its interactions with the
mainline kernel.
XFS now has a releasepage method - this replaces a bunch of code
in fs/buffer.c which it turns out could never really have worked.
The code in fs/buffer.c has been simplified, and changed to
protect against spinning on the cpu - which some people had
reported as bflushd spinning on the cpu.
It also fixes a corruption problem which Andrew Tridgell reported
under very heavy write pressure, and a deadlock under very heavy
mmap write pressure. This appears to be very hard to hit if that
is any consolation, I think this bug has been around since early
January.
Steve
Date: Tue Mar 19 09:30:43 PST 2002
Workarea: jen.americas.sgi.com:/src/lord/xfs-andrea
The following file(s) were checked into:
bonnie.engr.sgi.com:/isms/slinx/2.4.x-xfs
Modid: 2.4.x-xfs:slinx:114422a
linux/fs/buffer.c - 1.103
- Revamp the delayed allocate handling, there is less of it now and
problems with bdflush spinning should go away.
linux/drivers/block/ll_rw_blk.c - 1.81
- Move the trap for delayed allocate buffer heads from the ll_rw_block
code to submit_bh. This traps all of them rather than just some of
them.
linux/fs/xfs/linux/xfs_iops.c - 1.128
- Add a releasepage method to xfs.
linux/fs/xfs/pagebuf/page_buf_io.c - 1.17
- Add a release_page method, this converts delalloc pages to real so
that try_to_free_buffers can function on them. Revamp
pagebuf_write_full_page,
it now does not unlock the page, that happens in I/O completion.
linux/fs/xfs/pagebuf/page_buf.h - 1.8
- definition for pagebuf_release_page
|