Andrew Morton <akpm@xxxxxxxxx> writes:
> Zlatko Calusic wrote:
>>
>> Let's recapitulate:
>>
>> I'm dumping (or tarring) xfs filesystem (/usr) which consists of lots
>> of files from a faster (7200rpm, plate speed up to 37MB/sec) IDE disk
>> to a (big = 2 - 3GB) file on a xfs partition on a slower (5400rpm,
>> plate speed up to 23MB/sec) IDE disk and I'm getting page allocation
>> failures during that exercise. Kernel is virgin 2.5.47, preempt is
>> off, number of processors doesn't make a difference.
>>
>> Now, more than ever, this looks like a VM bug, not really xfs
>> specific. Andrew, what would you like me to try to clarify it further?
>
> Well, not really a "bug". Mode zero allocations will always fail, and
Well, yes, but it's somehow sad that allocator returned failure when
asked for a single page, while I have 580MB worth of inactive page
cache pages ready for eviction.
> the caller needs to handle that. For some reason kswapd is not keeping
> up here. It would be interesting to put a dump_stack() alongside that
> page allocation failure printk in mm/page_alloc.c.
Call Trace:
[bounce_end_io+33/120] __alloc_pages+0x249/0x274
[move_vma+433/912] find_or_create_page+0x3d/0x98
[xfs_parseargs+1623/1844] _pagebuf_lookup_pages+0x19b/0x3cc
[xfs_initialize_vnode+188/508] pagebuf_get+0x90/0x110
[xfs_initialize_vnode+455/508] pagebuf_readahead+0x23/0x28
[_lsn_cmp+121/216] xfs_btree_reada_bufs+0x3d/0x44
[xlog_do_recovery_pass+1998/2148] xfs_bulkstat+0x73a/0xb1c
[huft_build+1381/1468] huft_build+0x545/0x5bc
[semctl_nolock+123/484] xfs_ioc_bulkstat+0x117/0x16c
[xlog_recover_process_iunlinks+128/680] xfs_bulkstat_one+0x0/0x4d0
[sys_semget+215/308] xfs_ioctl+0x297/0x5ac
[huft_build+1381/1468] huft_build+0x545/0x5bc
[xlog_write+723/960] xfs_iunlock+0x2f/0x54
[xfs_attrmulti_by_handle+43/456] xfs_inactive_free_eofblocks+0xb3/0x268
[xfs_ioctl+1263/1452] xfs_release+0x83/0xbc
[.text.lock.namespace+174/885] dput+0x19/0x194
[.text.lock.super+193/491] __fput+0xd6/0xf8
[sys_msgctl+99/1604] linvfs_ioctl+0x23/0x60
[huft_build+1381/1468] huft_build+0x545/0x5bc
[huft_build+1381/1468] huft_build+0x545/0x5bc
[alloc_inode+121/384] sys_ioctl+0x22d/0x27c
[huft_build+1381/1468] huft_build+0x545/0x5bc
[irq_entries_start+199/2176] syscall_call+0x7/0xb
[huft_build+1381/1468] huft_build+0x545/0x5bc
xfsdump: page allocation failure. order:0, mode:0x0
>
> How much memory do you have?
>
768MB (no highmem)
This is /proc/meminfo after xfsdump fails:
MemTotal: 772612 kB
MemFree: 3184 kB
MemShared: 0 kB
Buffers: 35000 kB
Cached: 617860 kB
SwapCached: 0 kB
Active: 135556 kB
Inactive: 588368 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 772612 kB
LowFree: 3184 kB
SwapTotal: 2097136 kB
SwapFree: 2097136 kB
Dirty: 4 kB
Writeback: 0 kB
Mapped: 97612 kB
Slab: 36096 kB
Committed_AS: 114108 kB
PageTables: 880 kB
ReverseMaps: 40242
--
Zlatko
|