cvs commit: src/sys/fs/unionfs union_vnops.c

David Schultz das at FreeBSD.org
Sat Jun 14 17:23:51 PDT 2003


On Sat, Jun 14, 2003, Nate Lawson wrote:
> On Sat, 14 Jun 2003, David Schultz wrote:
> >   If someone tries to mount a union filesystem with another unionfs as
> >   the upper layer, fail gracefully instead of panicing.
> >
> >   Revision  Changes    Path
> >   1.99      +14 -4     src/sys/fs/unionfs/union_vnops.c
> >
> > --- src/sys/fs/unionfs/union_vnops.c:1.98	Sat Jun 14 16:27:29 2003
> > +++ src/sys/fs/unionfs/union_vnops.c	Sat Jun 14 16:56:27 2003
> > @@ -670,10 +670,20 @@
> >  	struct vnode *uppervp;
> >  	int error = EOPNOTSUPP;
> >
> > -	if ((uppervp = union_lock_upper(un, cnp->cn_thread)) != NULLVP) {
> > -		error = VOP_WHITEOUT(un->un_uppervp, cnp, ap->a_flags);
> > -		union_unlock_upper(uppervp, cnp->cn_thread);
> > -	}
> > +	switch (ap->a_flags) {
> > +	case LOOKUP:
> > +		error = EOPNOTSUPP;
> > +		break;
> > +	case CREATE:
> > +	case DELETE:
> > +		if ((uppervp=union_lock_upper(un,cnp->cn_thread)) != NULLVP) {
> > +			error = VOP_WHITEOUT(un->un_uppervp, cnp, ap->a_flags);
> > +			union_unlock_upper(uppervp, cnp->cn_thread);
> > +		}
> > +		break;
> > +	default:
> > +		panic("union_whiteout: unknown op");
> > +        }
> >  	return(error);
> >  }
> 
> Is that the default value you want for error?  Perhaps you don't need to
> assign one?

Good eye.  Until five minutes ago, my tree actually said
'error = 0' in the second assignment, but it turns out that
that doesn't quite work.  Since whiteout entries in the upper
layer of a unionfs are special, it's hard to support
externally-visible whiteout entries in the way one would want.
The bottom line is that the assignment at the top of the function
is redundant now, but I don't see a compelling reason to nix it
unless someone else really cares.


More information about the cvs-all mailing list