[Unionfs] Oops when inserting rw branch with unionfs on root filesystem

Klaus Fuerstberger info at expires-20080606.gate.mooo.com
Tue Mar 4 05:34:18 EST 2008


Hi,

I have a unionfs root filesystem. Sometimes I want to sync the unionfs 
changes in ram back to the CF card. This is done with rsync and ist no 
problem. But now I want to free the used ram of the unionfs. Mostly it 
works, if I simlpe delete the /ram/changes/*, but sometimes the system 
freezes.
Now I thought it would be the cleanest to insert another leftmost 
read-write branch at highest priority and delete the old read-write 
branch with the used memory. This resulted in the crash below.
Is there any clean method, beside a reboot, to free the used memory of 
the union after the rsync?

### This ist what I tried and what caused the Oops:
mount -t unionfs -o remount,incgen none /
mount -t ext3 -o remount,rw /dev/hda1 /ram/rootfs
# Synchronize the changes to the CF-Card
rsync -av --exclude=/tmp/ --exclude=/ram/ --exclude=/proc/ 
--exclude=/sys/ --exclude=/dev/ --delete / /ram/rootfs/
# Try to free the used memory in /rootfs/changes in inserting a leftmost 
RW branch and deleting the old RW branch
mkdir /ram/changes2
mount -t unionfs -o remount,add=/ram/changes2=rw none /
..............Oops...............

# The initramfs script
### /usr/share/initramfs-tools/scripts/union
mountroot()
{
RAM=/ram
ROOTFS=$RAM/rootfs
CHANGES=$RAM/changes

mkdir $RAM
mount -t tmpfs -o size=90% tmpfs $RAM
mkdir $ROOTFS
mkdir $CHANGES
mount -r -t ext3 /dev/hda1 $ROOTFS
mount -t unionfs -o dirs=$CHANGES=rw:$ROOTFS=ro unionfs ${rootmnt}

# Das overlay zugaenglich machen
mkdir ${rootmnt}$RAM 2>/dev/null
mount -o move $RAM ${rootmnt}$RAM
}
###############################

### /etc/fstab
proc            /proc           proc    defaults 
         0  0
none            /               unionfs dirs=/ram/changes=rw:/=ro 
     0  0
###############################

### Oops
BUG: unable to handle kernel NULL pointer dereference at virtual address 
00000060
printing eip: d0827646 *pde = 00000000
Oops: 0000 [#1]
Modules linked in: ipv6 dm_snapshot dm_mirror dm_mod leds_alix led_class 
xt_mac xt_limit ips

Pid: 1816, comm: mount Not tainted (2.6.24.2-alix #3)
EIP: 0060:[<d0827646>] EFLAGS: 00010206 CPU: 0
EIP is at unionfs_remount_fs+0x4be/0x748 [unionfs]
EAX: 00000060 EBX: 00000003 ECX: 00000002 EDX: cf6da6c0
ESI: ce556400 EDI: cf7bf004 EBP: ce6ecce0 ESP: cec55db0
  DS: 007b ES: 007b FS: 0000 GS: 0033 SS: 0068
Process mount (pid: 1816, ti=cec54000 task=ce5ed030 task.ti=cec54000)
Stack: ce74a6e0 cec55df4 00000002 cec55df4 cec55e10 ce556400 cf4ab620 
ce6ecce0
        00000002 cf4ab620 cf4ab620 ce74a6e0 ce74a6e0 00000000 ffffffff 
7fffffff
        00000000 00000002 00000000 d0833de8 ce556400 cf7bf000 00000000 
c0153337
Call Trace:
  [<c0153337>] do_remount_sb+0xc2/0xe9
  [<c0163539>] do_mount+0x193/0x5e5
  [<c0129d7c>] update_wall_time+0x540/0x6ae
  [<c0114ee0>] update_curr+0x52/0xc8
  [<c01283ef>] hrtimer_run_queues+0x12/0x133
  [<c011e8b0>] run_timer_softirq+0x12/0x141
  [<c012bd73>] tick_handle_periodic+0xf/0x54
  [<c011c038>] tasklet_action+0x32/0x52
  [<c011bfa0>] __do_softirq+0x35/0x75
  [<c0105b9c>] do_IRQ+0x58/0x6b
  [<c013dcfd>] __alloc_pages+0x5d/0x2d4
  [<c0104553>] common_interrupt+0x23/0x28
  [<c01625ca>] copy_mount_options+0xa3/0x10d
  [<c01639fd>] sys_mount+0x72/0xa9
  [<c0103baa>] syscall_call+0x7/0xb
  =======================
Code: d2 eb 12 8b 4c 24 24 89 d0 c1 e0 04 8b 04 08 83 c0 60 ff 00 42 39 
da 7c ea 31 c9 eb 1
EIP: [<d0827646>] unionfs_remount_fs+0x4be/0x748 [unionfs] SS:ESP 
0068:cec55db0
---[ end trace a38d4d4b3dc9a968 ]---
WARNING: at kernel/exit.c:917 do_exit()
Pid: 1816, comm: mount Tainted: G      D 2.6.24.2-alix #3
  [<c011ab0c>] do_exit+0x48/0x5ed
  [<c0118ee9>] printk+0x1b/0x1f
  [<c0104d9b>] die+0x1b1/0x1b9
  [<c011408e>] do_page_fault+0x43c/0x51a
  [<c0113c52>] do_page_fault+0x0/0x51a
  [<c02a0f9a>] error_code+0x6a/0x70
  [<d0827646>] unionfs_remount_fs+0x4be/0x748 [unionfs]
  [<c0153337>] do_remount_sb+0xc2/0xe9
  [<c0163539>] do_mount+0x193/0x5e5
  [<c0129d7c>] update_wall_time+0x540/0x6ae
  [<c0114ee0>] update_curr+0x52/0xc8
  [<c01283ef>] hrtimer_run_queues+0x12/0x133
  [<c011e8b0>] run_timer_softirq+0x12/0x141
  [<c012bd73>] tick_handle_periodic+0xf/0x54
  [<c011c038>] tasklet_action+0x32/0x52
  [<c011bfa0>] __do_softirq+0x35/0x75
  [<c0105b9c>] do_IRQ+0x58/0x6b
  [<c013dcfd>] __alloc_pages+0x5d/0x2d4
  [<c0104553>] common_interrupt+0x23/0x28
  [<c01625ca>] copy_mount_options+0xa3/0x10d
  [<c01639fd>] sys_mount+0x72/0xa9
  [<c0103baa>] syscall_call+0x7/0xb
###############################

Bye,
Klaus


More information about the unionfs mailing list