Hi,

I'm seeing an oops caused by a NULL pointer dereference in mm/filemap.c,
filemap_write_page.  The NULL pointer in question is page->mapping.
The box on which this is happening is using a root NFS filesystem (in
fact all but one of its filesystems are NFS).

So the file that was mapped has been deleted...  Ok, 
With the following in filemap_sync_pte:

        if (page->index != pgoff) {
                printk("weirdness: pgoff=%lu index=%lu address=%lu vm_start=%lu 
vm_pgoff=%lu\n",
                        pgoff, page->index, address, vma->vm_start, vma->vm_pgoff);
        }
+       if (!page->mapping) {
+               printk("--> page %p mapping NULL - address %lx\n", page, address);
+               printk("--> vma->vm_file = %p\n", vma->vm_file);
+               if (vma->vm_file) {
+                       char *s = d_path(vma->vm_file->f_dentry, 
+vma->vm_file->f_vfsmnt, buf, PAGE_SIZ$
+                       printk("--> %s\n", s);
+               }
+               page_cache_free(page);
+               return 0;
+       }
        lock_page(page);

this reveals:

--> page c017e118 mapping NULL - address 40264000
--> vma->vm_file = c0c8b120
--> /var/tmp/.nfs0000161300000002 (deleted)

And the stack trace indicates that the kernel execution path came from
sys_munmap.

(and the box doesn't hang, so I can then get the following strace and
send you this mail... should've kept the old sendmail binary lying
around...):

open("/var/tmp/000703", O_RDWR|O_CREAT|O_EXCL, 0600) = 5
fcntl(5, F_SETFD, FD_CLOEXEC)           = 0
lseek(5, 0, SEEK_END)                   = 0
lseek(5, 49152, SEEK_CUR)               = 49152
write(5, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 4096) = 4096
old_mmap(NULL, 53248, PROT_READ|PROT_WRITE, MAP_SHARED, 5, 0) = 0x40264000
fcntl(5, F_SETLKW, {type=F_WRLCK, whence=SEEK_SET, start=0, len=1}) = 0
fcntl(5, F_SETLK, {type=F_UNLCK, whence=SEEK_SET, start=0, len=1}) = 0
close(5)                                = 0
unlink("/var/tmp/000703")               = 0
...
munmap(0x40264000, 53248)               = 0

So I'm guessing that the unlink is causing NFS to remove page->mapping
for a dirty mmap'd file, which then causes munmap to explode.

I'm not a VFS, MM nor NFS wizard, so it'll probably take me many hours
to figure out what's causing this.  Any chance someone else can take a
look?
   _____
  |_____| ------------------------------------------------- ---+---+-
  |   |         Russell King        [EMAIL PROTECTED]      --- ---
  | | | | http://www.arm.linux.org.uk/personal/aboutme.html   /  /  |
  | +-+-+                                                     --- -+-
  /   |               THE developer of ARM Linux              |+| /|\
 /  | | |                                                     ---  |
    +-+-+ -------------------------------------------------  /\\\  |

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/

Reply via email to