linux-fsdevel.vger.kernel.org archive mirror
 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).