Ethernet of Raspberry Pi Running ALARM Died Once

Two or three weeks ago my Arch Linux ARM based Raspberry Pi died. At least it wasn't accessible via Ethernet anymore. Here are the syslog details:

Nov  4 01:45:01 alarmpi -- MARK --
Nov  4 05:45:01 alarmpi [...]
Nov  4 04:41:02 alarmpi -- MARK --
Nov  4 04:57:55 alarmpi kernel: [287606.972816] ------------[ cut here ]------------
Nov  4 04:57:55 alarmpi kernel: [287606.972878] WARNING: at net/sched/sch_generic.c:255 dev_watchdog+0x2a8/0x2c8()
Nov  4 04:57:55 alarmpi kernel: [287606.972897] NETDEV WATCHDOG: eth0 (smsc95xx): transmit queue 0 timed out
Nov  4 04:57:55 alarmpi kernel: [287606.972911] Modules linked in: binfmt_misc spidev ftdi_sio usbserial spi_bcm2708 i2c_bcm2708 ipv6
Nov  4 04:57:55 alarmpi kernel: [287606.972956] Backtrace:
Nov  4 04:57:55 alarmpi kernel: [287606.973004] [<c00115dc>] (dump_backtrace+0x0/0x10c) from [<c03c7458>] (dump_stack+0x18/0x1c)
Nov  4 04:57:55 alarmpi kernel: [287606.973024]  r6:c032eb48 r5:00000009 r4:c0535e10 r3:271aef07
Nov  4 04:57:55 alarmpi kernel: [287606.973081] [<c03c7440>] (dump_stack+0x0/0x1c) from [<c0028080>] (warn_slowpath_common+0x54/0x6c)
Nov  4 04:57:55 alarmpi kernel: [287606.973116] [<c002802c>] (warn_slowpath_common+0x0/0x6c) from [<c002813c>] (warn_slowpath_fmt+0x38/0x40)
Nov  4 04:57:55 alarmpi kernel: [287606.973135]  r8:c0603504 r7:c0534000 r6:c053f1d0 r5:cb9cf000 r4:00000000
Nov  4 04:57:55 alarmpi kernel: [287606.973166] r3:00000009
Nov  4 04:57:55 alarmpi kernel: [287606.973193] [<c0028104>] (warn_slowpath_fmt+0x0/0x40) from [<c032eb48>] (dev_watchdog+0x2a8/0x2c8)
Nov  4 04:57:55 alarmpi kernel: [287606.973211]  r3:cb9cf000 r2:c04e28a8
Nov  4 04:57:55 alarmpi kernel: [287606.973256] [<c032e8a0>] (dev_watchdog+0x0/0x2c8) from [<c0034b80>] (run_timer_softirq+0x114/0x29c)
Nov  4 04:57:55 alarmpi kernel: [287606.973289] [<c0034a6c>] (run_timer_softirq+0x0/0x29c) from [<c002e168>] (__do_softirq+0xac/0x148)
Nov  4 04:57:55 alarmpi kernel: [287606.973318] [<c002e0bc>] (__do_softirq+0x0/0x148) from [<c002e648>] (irq_exit+0x94/0xa0)
Nov  4 04:57:55 alarmpi kernel: [287606.973348] [<c002e5b4>] (irq_exit+0x0/0xa0) from [<c000e710>] (handle_IRQ+0x3c/0x8c)
Nov  4 04:57:55 alarmpi kernel: [287606.973365]  r4:c0551fc4 r3:c007c3d8
Nov  4 04:57:55 alarmpi kernel: [287606.973394] [<c000e6d4>] (handle_IRQ+0x0/0x8c) from [<c0008190>] (asm_do_IRQ+0x10/0x14)
Nov  4 04:57:55 alarmpi kernel: [287606.973410]  r6:f200b200 r5:60000013 r4:c000e858 r3:c000e854
Nov  4 04:57:55 alarmpi kernel: [287606.973459] [<c0008180>] (asm_do_IRQ+0x0/0x14) from [<c03ccd54>] (__irq_svc+0x34/0xc8)
Nov  4 04:57:55 alarmpi kernel: [287606.973479] Exception stack(0xc0535f38 to 0xc0535f80)
Nov  4 04:57:55 alarmpi kernel: [287606.973499] 5f20:                                                       ffffffed 00000000
Nov  4 04:57:55 alarmpi kernel: [287606.973527] 5f40: c0535f80 00000000 c0534000 c05611c4 c053a8fc c078aa20 00004008 410fb767
Nov  4 04:57:55 alarmpi kernel: [287606.973556] 5f60: 0052cdc4 c0535f8c c0535f90 c0535f80 c000e854 c000e858 60000013 ffffffff
Nov  4 04:57:55 alarmpi kernel: [287606.973585] [<c000e82c>] (default_idle+0x0/0x30) from [<c000ea58>] (cpu_idle+0x9c/0xc4)
Nov  4 04:57:55 alarmpi kernel: [287606.973631] [<c000e9bc>] (cpu_idle+0x0/0xc4) from [<c03c5f9c>] (rest_init+0x80/0x98)
Nov  4 04:57:55 alarmpi kernel: [287606.973648]  r6:c052dc9c r5:c0561100 r4:00000002 r3:00000000
Nov  4 04:57:55 alarmpi kernel: [287606.973703] [<c03c5f1c>] (rest_init+0x0/0x98) from [<c050f810>] (start_kernel+0x2e4/0x344)
Nov  4 04:57:55 alarmpi kernel: [287606.973721]  r4:c053692c r3:271aef07
Nov  4 04:57:55 alarmpi kernel: [287606.973754] [<c050f52c>] (start_kernel+0x0/0x344) from [<0000803c>] (0x803c)
Nov  4 04:57:55 alarmpi kernel: [287606.973772] ---[ end trace 515d3c8104f5dc0a ]---
Nov  4 05:05:01 alarmpi dhcpcd[138]: eth0: renewing lease of 14.2.22.52
Nov  4 05:25:01 alarmpi -- MARK --
Nov  4 05:45:01 alarmpi [...]
Nov  4 08:45:01 alarmpi -- MARK --
Nov  4 09:05:01 alarmpi dhcpcd[138]: eth0: sending IPv6 Router Solicitation
Nov  4 09:05:01 alarmpi dhcpcd[138]: eth0: broadcasting for a lease
Nov  4 09:05:05 alarmpi dhcpcd[138]: eth0: sending IPv6 Router Solicitation
Nov  4 09:05:09 alarmpi dhcpcd[138]: eth0: sending IPv6 Router Solicitation
Nov  4 09:05:13 alarmpi dhcpcd[138]: eth0: sending IPv6 Router Solicitation
Nov  4 09:05:13 alarmpi dhcpcd[138]: eth0: no IPv6 Routers available

I found the following workaround /opt/lan_checker on the RaspberryPi Forum:

#!/bin/sh

# cron script for checking wlan connectivity
IP_FOR_TEST="192.168.1.1"
PING_COUNT=1

PING="/bin/ping"
IFUP="/sbin/ifup"
IFDOWN="/sbin/ifdown --force"

INTERFACE="eth0"

FFLAG="/opt/check_lan/stuck.fflg"

# ping test
$PING -c $PING_COUNT $IP_FOR_TEST > /dev/null 2> /dev/null
if [ $? -ge 1 ]
then
    logger "$INTERFACE seems to be down, trying to bring it up..."
        if [ -e $FFLAG ]
        then
                logger "$INTERFACE is still down, REBOOT to recover ..."
                rm -f $FFLAG 2>/dev/null
                sudo reboot
        else
                touch $FFLAG
                logger $(sudo $IFDOWN $INTERFACE)
                sleep 10
                logger $(sudo $IFUP $INTERFACE)
        fi
else
#    logger "$INTERFACE is up"
    rm -f $FFLAG 2>/dev/null
fi

Comments