Kernel Oops: kswapd0 exited

Happily I was going about my computer business, when kswapd decided to exit. Suprisingly the system stayed up, but it soon became clear that massive data loss was a possibility, as 133MB of swap was in use (mostly cache of files) and could no longer be paged back to the files on disk. My fears worsened when trying to run 'sync', which hanged, as did 'umount' on any partition I tried to unmount. So I quit all applications, and tried to 'shutdown', but that hanged too. I was forced to use SysRq to force a hard reboot (Ctrl+Alt+PrintScreen+B, don't try it at home unless you need to force a hard reboot in a hurry).

Booting up I was pleasantly suprised - it checked the disks and corrected errors. I guess that's the wonder of journalling filesystems, able to recover from near disaster. But I'm still apprehensive - there is a chance that some files are corrupted or incomplete, and I don't know which they might be - with an uptime of 18 days, virtually any file I had modified in that time might be damaged (although naturally the more recent the greater the risk). So, wish me luck!

Unable to handle kernel paging request at virtual address af82dac8
 printing eip:
*pde = 00000000
Oops: 0000 [#1]
Modules linked in: sg usb_storage usblp ipv6 mga drm nfsd lockd sunrpc it87 hwmon_vid
hwmon eeprom i2c_isa snd_pcm_oss snd_mixer_oss snd_seq_dummy snd_seq_oss
snd_seq_midi_event snd_seq ohci_hcd parport_pc parport floppy rtc snd_emu10k1
snd_util_mem snd_hwdep via_rhine mii snd_via82xx gameport snd_ac97_codec
snd_ac97_bus snd_pcm snd_timer snd_page_alloc snd_mpu401_uart snd_rawmidi
snd_seq_device snd soundcore i2c_viapro ehci_hcd uhci_hcd bt878 tuner bttv
video_buf firmware_class i2c_algo_bit v4l2_common btcx_risc tveeprom i2c_core
videodev via_agp agpgart usbcore ntfs
CPU:    0
EIP:    0060:[<c014cf0a>]    Not tainted VLI
EFLAGS: 00010283   (2.6.14-gentoo-r5) 
eax: 00000000   ebx: 00000000   ecx: af82dac8   edx: 00000000
esi: ef82da94   edi: c4537914   ebp: c163eae0   esp: c1b97dfc
ds: 007b   es: 007b   ss: 0068
Process kswapd0 (pid: 127, threadinfo=c1b96000 task=c19d25a0)
Stack: c163eae0 c1b97e18 c4537914 c1b97f40 c014cfb2 c163eae0 c1b97e18 00000000 
       c163eae0 c4537914 c0137767 c163eae0 000000d0 00000001 00000001 00000015 
       00000000 c1b97e40 c1b97e40 00000007 00000001 c14bd120 c15b3ac0 c10cde20 
Call Trace:
Code: 0e be fb ff ff ff eb 07 89 d8 e8 2e d1 ff ff 5b 89 f0 5e c3 55 57 56 53 8b
 6c 24 14 8b 45 00 f6 c4 08 75 02 0f 0b 8b 75 0c 89 f1 <8b> 01 f6 c4 08 74 0c 8b
 45 10 85 c0 74 05 0f ba 68 34 14 8b 11 
 <6>note: kswapd0[127] exited with preempt_count 1