diff options
author | rwatson <rwatson@FreeBSD.org> | 2000-04-16 01:35:30 +0000 |
---|---|---|
committer | rwatson <rwatson@FreeBSD.org> | 2000-04-16 01:35:30 +0000 |
commit | 95acaf111c752351e27954fe81f3c1ac78b49137 (patch) | |
tree | 690aebeeb54701ae7ef6d171202fad6d7708802e /sys | |
parent | 89dde410b723e292462c0d6b85365bc2ecfea194 (diff) | |
download | FreeBSD-src-95acaf111c752351e27954fe81f3c1ac78b49137.zip FreeBSD-src-95acaf111c752351e27954fe81f3c1ac78b49137.tar.gz |
Fix two bugs in extended attribute support for UFS/FFS:
o Put back in {} removed during over-zealous cleanup of gratuitous
debugging output during preparation for the commit. Due to the
missing {}, writes on extended attributes always silently failed.
Doh.
o Don't unlock the target vnode if it's the backing vnode, as we
don't lock the target vnode if it's the backing vnode.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/ufs/ufs/ufs_extattr.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/ufs/ufs/ufs_extattr.c b/sys/ufs/ufs/ufs_extattr.c index 1576f3e..05b2b58 100644 --- a/sys/ufs/ufs/ufs_extattr.c +++ b/sys/ufs/ufs/ufs_extattr.c @@ -649,9 +649,10 @@ ufs_extattr_set(struct vnode *vp, char *name, struct uio *uio, if (error) goto vopunlock_exit; - if (local_aio.uio_resid != 0) + if (local_aio.uio_resid != 0) { error = ENXIO; goto vopunlock_exit; + } /* * Write out user data @@ -663,7 +664,9 @@ ufs_extattr_set(struct vnode *vp, char *name, struct uio *uio, vopunlock_exit: uio->uio_offset = 0; - VOP_UNLOCK(attribute->uele_backing_vnode, 0, p); + + if (attribute->uele_backing_vnode != vp) + VOP_UNLOCK(attribute->uele_backing_vnode, 0, p); return (error); } |