NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Re: kern/47739: tmpfs panic: kernel diagnostic assertion "(node)->tn_spec.tn_dir.tn_readdir_lastp == NULL..."



The following reply was made to PR kern/47739; it has been noted by GNATS.

From: Mindaugas Rasiukevicius <rmind%netbsd.org@localhost>
To: Dennis Ferguson <dennis.c.ferguson%gmail.com@localhost>, Thomas Klausner
 <wiz%NetBSD.org@localhost>
Cc: gnats-bugs%NetBSD.org@localhost, kern-bug-people%netbsd.org@localhost,
 gnats-admin%netbsd.org@localhost, netbsd-bugs%netbsd.org@localhost
Subject: Re: kern/47739: tmpfs panic: kernel diagnostic assertion
 "(node)->tn_spec.tn_dir.tn_readdir_lastp == NULL..."
Date: Sun, 27 Oct 2013 16:03:40 +0000

 Dennis Ferguson <dennis.c.ferguson%gmail.com@localhost> wrote:
 > >>>> <...>
 > >>> 
 > >>> Most likely this is due to tmpfs_dircookie() truncation here:
 > >>> 
 > >>> http://nxr.netbsd.org/source/xref/src/sys/fs/tmpfs/tmpfs.h#88
 > >>> 
 > >>> It is wrong and there are other PRs because of it.  Thomas, you can
 > >>> test this by replacing the function body with the following:
 > >>> 
 > >>>  return (off_t)(uintptr_t)de;
 > >>> 
 > >>> This breaks linux32 compat, but we really just need to decide how we
 > >>> want to fix it (it would be good to avoid penalising the native code,
 > >>> but better to penalise than fail).
 > >> 
 > >> <...>
 > 
 > Assuming my mail client doesn't ruin it I've attached a patch which adds
 > a sequence number to each tmpfs directory entry.  The sequence numbers
 > are kept sorted in the directory entry list TAILQ order because it doesn't
 > cost anything much to do that in the current code and having a file
 > offset with actual ordering semantics fixes some things that the current
 > code can do wrong when directories are being read, like the EINVAL error
 > that getdents(2) says only NFS file systems are supposed to return but
 > which appears in the code here too.
 
 I think there is a better way.  Here is the patch:
 
 http://www.netbsd.org/~rmind/tmpfs_readdir_fixes.diff
 
  tmpfs.h        |   86 +++++--------
  tmpfs_rename.c |   14 +-
  tmpfs_subr.c   |  373 
++++++++++++++++++++++++++++++++-------------------------
  tmpfs_vfsops.c |   39 +++--
  tmpfs_vnops.c  |   75 ++++-------
  5 files changed, 309 insertions(+), 278 deletions(-)
 
 It also fixes tmpfs_unmount() and the net diff seems better. :)
 
 Thomas, can you try this patch on your build-hammer-machine?
 
 Thanks.
 
 -- 
 Mindaugas
 


Home | Main Index | Thread Index | Old Index