Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 11 Oct 1995 12:53:55 -0700 (MST)
From:      Terry Lambert <terry@lambert.org>
To:        dave@elxr.jpl.nasa.gov (Dave Hayes)
Cc:        terry@lambert.org, hackers@FreeBSD.ORG, current@FreeBSD.ORG
Subject:   Re: FS LAYERING PATCHES AGAINST CURRENT UPLOADED
Message-ID:  <199510111953.MAA13673@phaeton.artisoft.com>
In-Reply-To: <199510111919.MAA02797@elxr.jpl.nasa.gov> from "Dave Hayes" at Oct 11, 95 12:19:00 pm

next in thread | previous in thread | raw e-mail | index | archive | help
> >I have uploaded the FS layering patches I promised last week.
> 
> Are these patches that allow one to glom disk partitions onto
> another (like ccd in NetBSD) to make a meta-partition? 

No.

These are the patches that fix the cn_pnbuf implied deallocation in
every file system instance.

They also cause the vnode_if. and vnode_if.h (machine generated files)
to count the defined VOP descriptors by sizeof() aritmatic instead of
having to have an FS defined in vfs_init.c.

They also fix the double deallocation problems that could occur from
PCNFS clients and in some extreme error cases.

The following patch was inadvertently left out (thanks Paul!) when -current
went from a straight queue to a circular queue.  If you apply the patches,
make sure you apply this one as well:

==============================================================================
*** vfs_syscalls.c.bad	Wed Oct 11 11:05:04 1995
--- vfs_syscalls.c	Wed Oct 11 11:34:51 1995
***************
*** 500,507 ****
  			 */
  			if (((uap->flags & MNT_NOWAIT) == 0 ||
  			    (uap->flags & MNT_WAIT)) &&
! 			    (error = VFS_STATFS(mp, sp, p)))
  				continue;
  			sp->f_flags = mp->mnt_flag & MNT_VISFLAGMASK;
  			if( error = copyout((caddr_t)sp, sfsp, sizeof(*sp))) {
  				break;		/* error, mp != NULL*/
--- 500,509 ----
  			 */
  			if (((uap->flags & MNT_NOWAIT) == 0 ||
  			    (uap->flags & MNT_WAIT)) &&
! 			    (error = VFS_STATFS(mp, sp, p))) {
! 				error = 0;
  				continue;
+ 			}
  			sp->f_flags = mp->mnt_flag & MNT_VISFLAGMASK;
  			if( error = copyout((caddr_t)sp, sfsp, sizeof(*sp))) {
  				break;		/* error, mp != NULL*/
***************
*** 512,518 ****
  	}
  
  	/* only if loop above completed successfully*/
! 	if( mp == NULL) {
  		if (sfsp && count > maxcount)
  			*retval = maxcount;
  		else
--- 514,520 ----
  	}
  
  	/* only if loop above completed successfully*/
! 	if( mp == (void *)&mountlist) {
  		if (sfsp && count > maxcount)
  			*retval = maxcount;
  		else
==============================================================================


Paul has also seen a dual free panic when compiled with DIAGNOSTIC set.

He hasn't reported what was going on at the time (I suspect either NFS
or a file system LKM that wasn't rebuilt or a non-standard file system
from outside of -current, like John Dyson's ext2fs).


					Terry Lambert
					terry@lambert.org
---
Any opinions in this posting are my own and not those of my present
or previous employers.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199510111953.MAA13673>