panic: ffs_truncate: readonly filesystem

Kostik Belousov kostikbel at gmail.com
Mon Apr 21 13:32:47 UTC 2008


On Mon, Apr 21, 2008 at 08:04:05AM -0400, Mikhail Teterin wrote:
> On понед?лок 21 кв?тень 2008, Kostik Belousov wrote:
> = Because the kernel has a bug ? As is, the report is useless. Please, do
> = not hesitate to provide at least the backtrace.
> 
> The backtrace is attached. The filesystem is thus (newfs -N):
> 
> /store: 476940.0MB (976773168 sectors) block size 16384, fragment size 2048
>         using 2597 cylinder groups of 183.72MB, 11758 blks, 23552 inodes.
> 
> = Besides the possible logic error, the other possibility is the concurrent
> = remount. Could it be that you actually remounted the fs readonly during
> = the write ?
> 
> No... It is mounted readonly by default and when I want to add more files, I 
> remount it read-write. This one time I forgot to do it...
> 
> Thanks,
> 
> 	-mi

> [GDB will not be able to debug user-mode threads: /usr/lib/libthread_db.so: Undefined symbol "ps_pglobal_lookup"]
> GNU gdb 6.1.1 [FreeBSD]
> Copyright 2004 Free Software Foundation, Inc.
> GDB is free software, covered by the GNU General Public License, and you are
> welcome to change it and/or distribute copies of it under certain conditions.
> Type "show copying" to see the conditions.
> There is absolutely no warranty for GDB.  Type "show warranty" for details.
> This GDB was configured as "amd64-marcel-freebsd".
> There is no member named pathname.
> Reading symbols from /opt/modules/fuse.ko...done.
> Loaded symbols for /opt/modules/fuse.ko
> Reading symbols from /opt/modules/rtc.ko...done.
> Loaded symbols for /opt/modules/rtc.ko
> 
> Unread portion of the kernel message buffer:
> g_vfs_done():ad8[WRITE(offset=161248411648, length=131072)]error = 1
> g_vfs_done():ad8[WRITE(offset=161242284032, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248411648, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248428032, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248444416, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248460800, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248477184, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248493568, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248509952, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248526336, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248542720, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248559104, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248575488, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248591872, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161242284032, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161242284032, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248411648, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248428032, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248444416, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248460800, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248477184, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248493568, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248509952, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248526336, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248542720, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248559104, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248575488, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248591872, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161242284032, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248411648, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248428032, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248444416, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248460800, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248477184, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248493568, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248509952, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248526336, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248542720, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248559104, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248575488, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248591872, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161242284032, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248411648, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248428032, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248444416, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248460800, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248477184, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248493568, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248509952, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248526336, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248542720, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248559104, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248575488, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248591872, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161242284032, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248411648, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248428032, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248444416, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248460800, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248477184, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248493568, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248509952, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248526336, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248542720, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248559104, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248575488, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248591872, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248411648, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248428032, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248444416, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248460800, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248477184, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248493568, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248509952, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248526336, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248542720, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248559104, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248575488, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248591872, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248411648, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248428032, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248444416, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248460800, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248477184, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248493568, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248509952, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248526336, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248542720, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248559104, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248575488, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248591872, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248411648, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248428032, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248444416, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248460800, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248477184, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248493568, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248509952, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248526336, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248542720, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248559104, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248575488, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248591872, length=16384)]error = 1
> g_vfs_done():ad8[WRITE(offset=161248411648, length=16384)]error = 1
> panic: ffs_truncate: read-only filesystem
> cpuid = 1
> Uptime: 2m37s
> Physical memory: 3607 MB
> Dumping 485 MB: 470 454 438 422 406 390 374 358 342 326 310 294 278 262 246 230fs = /store
> panic: ffs_sync: rofs mod
> cpuid = 1
>  214 198 182 166 150 134 118 102 86 70 54 38 22 6
> 
> #0  doadump () at pcpu.h:194
> 194		__asm __volatile("movq %%gs:0,%0" : "=r" (td));
> (kgdb) #0  doadump () at pcpu.h:194
> #1  0x0000000000000004 in ?? ()
> #2  0xffffffff802e8b60 in boot (howto=260)
>     at /var/src/sys/kern/kern_shutdown.c:409
> #3  0xffffffff802e8f7d in panic (fmt=0x104 <Address 0x104 out of bounds>)
>     at /var/src/sys/kern/kern_shutdown.c:563
> #4  0xffffffff803f3513 in ffs_truncate (vp=Variable "vp" is not available.
> )
>     at /var/src/sys/ufs/ffs/ffs_inode.c:248
> #5  0xffffffff8040be0b in ffs_write (ap=0xffffffffb05a4a10)
>     at /var/src/sys/ufs/ffs/ffs_vnops.c:800
> #6  0xffffffff8049d485 in VOP_WRITE_APV (vop=0xffffffff806536c0, 
>     a=0xffffffffb05a4a10) at vnode_if.c:691
> #7  0xffffffff8036fd20 in vn_write (fp=0xffffff000360bb40, 
>     uio=0xffffffffb05a4b00, active_cred=Variable "active_cred" is not available.
> ) at vnode_if.h:373
> #8  0xffffffff8031d638 in dofilewrite (td=0xffffff0003324340, fd=4, 
>     fp=0xffffff000360bb40, auio=0xffffffffb05a4b00, offset=Variable "offset" is not available.
> ) at file.h:254
> #9  0xffffffff8031d93e in kern_writev (td=0xffffff0003324340, fd=4, 
>     auio=0xffffffffb05a4b00) at /var/src/sys/kern/sys_generic.c:401
> #10 0xffffffff8031d9bc in write (td=0x0, uap=0x0)
>     at /var/src/sys/kern/sys_generic.c:317
> #11 0xffffffff8045a700 in syscall (frame=0xffffffffb05a4c70)
>     at /var/src/sys/amd64/amd64/trap.c:852
> #12 0xffffffff8043f38b in Xfast_syscall ()
>     at /var/src/sys/amd64/amd64/exception.S:290
> #13 0x000000080070a32c in ?? ()
> Previous frame inner to this frame (corrupt stack?)
> (kgdb) 

This was the plain write. The ufs_access() function does not allow
to open the file for write on the ro ufs mount. The remount forcibly
reclaims the vnodes open for write, unless raced with open.

The only scenario I can imagine this happen is while racing the file rw
open during the ro remount. Was it what you did ?

If yes, then this is a known problem that needs to be worked on.
The suggested solution is to suspend the filesystem before actually
performing the operation.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 195 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-fs/attachments/20080421/1ae81c65/attachment.pgp


More information about the freebsd-fs mailing list