tech-kern archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Vnode API cleanup pass 2a
On Mon, Jan 13, 2014 at 04:06:02PM +0100, J. Hannken-Illjes wrote:
> [various nfs stuff]
Yeah, I'm not sure what to make of that either.
> The "reference implementation" from Solaris is not atomic:
>
> VOP_MKDIR(dvp, &vp)
> VOP_GETATTR(vp)
> makefh(vp)
> VN_RELE(vp)
> VN_RELE(dvp)
They can't do this kind of thing atomically with their blinkered vfs
locking :-)
One should get the same file handle even if it isn't atomic and that's
probably ok; on the other hand it would be weird if you created a
directory mode 755 and the stat info you got back said 700 because a
chmod raced with the getattr. On the other hand, it's NFS.
> >>>> sys/fs/union/union_subr.c:union_mkshadow()
> >
> > ...but this doesn't, the caller is trying to create the directory and
> > also bind it into the onionfs layering atomically. Of course, being
> > onionfs, it's already only approximate and adding another race to it
> > may not make things any worse; but it's probably better not to.
>
> Looking closer it makes things better here. Currently unionfs will
> lock in the wrong order (uppervp -> upperdvp) while it now does it right.
Oh lovely, I missed that.
> If the shadow directory we just created would disappear because another
> thread removed it outside of unionfs we had much more problems than
> a race here.
Yeah, I think the more likely problem is that it might try to create
it twice and have one of them fail unexpectedly. But maybe it's
already capable of dealing with that.
> Even though it looks like we don't need creation ops to return with
> locked directory at the moment it may be better to do this change now
> so atomic operations like the one seen in NFS server are possible.
Yeah, that's what I was thinking
> Thus we would end up with:
> [snip]
Right.
It would probably be better to make this a separate commit; if that's
a nuisance for you, I can do it...
--
David A. Holland
dholland%netbsd.org@localhost
Home |
Main Index |
Thread Index |
Old Index