All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jason Lunz <lunz@falooley.org>
To: jsipek@cs.sunysb.edu
Cc: unionfs@mail.fsl.cs.sunysb.edu, linux-fsdevel@vger.kernel.org
Subject: Re: Unionfs in -mm
Date: Tue, 9 Jan 2007 15:08:57 -0500	[thread overview]
Message-ID: <20070109200857.GA28443@knob.reflex> (raw)
In-Reply-To: <20070109004456.GA7954@filer.fsl.cs.sunysb.edu>

On Mon, Jan 08, 2007 at 07:44:56PM -0500, Josef Sipek wrote:
> Today is a good day!
>
> Andrew Morton included a minimal version of Unionfs in his -mm tree.
>
> This minimal version of the code lacks some of the features in the full
> fledged version, however we'll be cleaning them up and adding them in one at
> a time.
>
> Thank you all who helped to make this possible!

and thanks to you all for the hard work.

But I have a bug to report. I'm trying out yesterday's 24-patch series
on 2.6.20-rc4 (http://thread.gmane.org/gmane.linux.kernel/481661).

The root filesystem is a union of a ro squashfs and a rw tmpfs.
The initramfs sets it up something like this:

mkdir /os
mount -r -t squashfs /dev/ram0 /os

mkdir /cow
mount -t tmpfs -o mode=0755 tmpfs /cow

mount -w -o dirs=/cow=rw:/os=ro -t unionfs unionfs /root

The system works normally, except that it crashes reliably whenever I
run this program:

#! /usr/bin/python

import glob
import os
import subprocess
import sys

def processes():
    'Returns a iterator over (pid, exe) tuples for each running process.'

    # the kernel appends this to the link target when the running exe has been
    # unlinked
    unlinked_suffix = ' (deleted)'

    subprocess.call('ps axf 1>&2', shell=True)
    subprocess.call('ls -l /proc/* 1>&2', shell=True)

    for ed in glob.glob('/proc/*'):
        print >>sys.stderr, 'looking at %s' % ed
        try:
            pid = int(os.path.basename(ed))
        except ValueError:
            # probably /proc/self or something
            continue

        print >>sys.stderr, '%s has pid %s' % (ed, pid)

        try:
            l = os.path.join(ed, 'exe')
            print >>sys.stderr, 'reading %s' % l
            targ = os.readlink(l)
        except OSError:
            # building a list of running processes is inherently racy, oh well
            continue
        
        if targ.endswith(unlinked_suffix):
            targ = targ[:-len(unlinked_suffix)]

        yield (pid, targ)

for p, e in processes():
    print >>sys.stderr, p, e


here's the oops from running under qemu. More or less the same thing
happens in UML kernels too:

BUG: unable to handle kernel NULL pointer dereference at virtual address 00000010
 printing eip:
c015d701
*pde = 00000000
Oops: 0000 [#1]
SMP
Modules linked in: button ac battery bridge llc unionfs squashfs zlib_inflate rd ext2 dm_mod ide_cd cdrom ide_disk mousedev parport_pc parport floppy serio_raw psmouse piix generic ide_core ata_generic libata pcspkr ne2k_pci 8390 i2c_piix4 i2c_core scsi_mod evdev fan
CPU:    0
EIP:    0060:[<c015d701>]    Not tainted VLI
EFLAGS: 00200202   (2.6.20-rc4-x86 #0)
EIP is at __d_path+0x8f/0x154
eax: c68ad42c   ebx: c364dffe   ecx: 00000000   edx: 00001000
esi: c7a81da0   edi: c6ce6a9c   ebp: c364dfff   esp: c72f5ec8
ds: 007b   es: 007b   ss: 0068
Process ls (pid: 1804, ti=c72f5000 task=c7a91ab0 task.ti=c72f5000)
Stack: c68ad42c 00000000 c6ce6a9c 00000044 00000001 00000fff c68ad42c c7a81da0
       c364d000 00000000 c015ec0e c7a81da0 c364d000 00001000 c6ce6a9c c6ce6a9c
       c364d000 fffffff4 00000000 c01774b3 00001000 00000001 08061290 00000000
Call Trace:
 [<c015ec0e>] d_path+0x91/0xbd
 [<c01774b3>] proc_pid_readlink+0x76/0xdc
 [<c015246e>] sys_readlinkat+0x83/0x9e
 [<c01524b0>] sys_readlink+0x27/0x2b
 [<c0102ccc>] syscall_call+0x7/0xb
 =======================
Code: ff 2f eb 08 8b 7c 24 10 89 7c 24 08 8b 04 24 39 44 24 08 75 0e 8b 54 24 2c 39 54 24 04 0f 84 c3 00 00 00 8b 7c 24 08 8b 4c 24 04 <3b> 79 10 74 0b 8b 47 18 89 44 24 10 39 c7 75 29 b8 80 f0 2e c0
EIP: [<c015d701>] __d_path+0x8f/0x154 SS:ESP 0068:c72f5ec8

any ideas?

Jason

       reply	other threads:[~2007-01-09 20:53 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20070109004456.GA7954@filer.fsl.cs.sunysb.edu>
2007-01-09 20:08 ` Jason Lunz [this message]
2007-01-13  6:48   ` Unionfs in -mm Josef Sipek
2007-01-16 23:03     ` Jason Lunz
2007-01-17  0:28       ` [Unionfs] " Jan Engelhardt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20070109200857.GA28443@knob.reflex \
    --to=lunz@falooley.org \
    --cc=jsipek@cs.sunysb.edu \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=unionfs@mail.fsl.cs.sunysb.edu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.