summaryrefslogtreecommitdiffstats
path: root/sys/kern
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2007-03-14 08:45:55 +0000
committerkib <kib@FreeBSD.org>2007-03-14 08:45:55 +0000
commit1a473e3ed5338a60c3abc40bfd4c2a2657d257e0 (patch)
tree92ac483a6bc1b0ad8d7f0ed864062d8f6d4b253f /sys/kern
parent9f07de3caa3a1f26ce6215b011a38fd192e16b43 (diff)
downloadFreeBSD-src-1a473e3ed5338a60c3abc40bfd4c2a2657d257e0.zip
FreeBSD-src-1a473e3ed5338a60c3abc40bfd4c2a2657d257e0.tar.gz
Busy filesystem around call of VFS_QUOTACTL() vfs op.
Tested by: Peter Holm Reviewed by: tegge Approved by: re (kensmith)
Diffstat (limited to 'sys/kern')
-rw-r--r--sys/kern/vfs_syscalls.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/sys/kern/vfs_syscalls.c b/sys/kern/vfs_syscalls.c
index ed0c432..2cca22e 100644
--- a/sys/kern/vfs_syscalls.c
+++ b/sys/kern/vfs_syscalls.c
@@ -176,7 +176,7 @@ quotactl(td, uap)
caddr_t arg;
} */ *uap;
{
- struct mount *mp, *vmp;
+ struct mount *mp;
int vfslocked;
int error;
struct nameidata nd;
@@ -191,14 +191,15 @@ quotactl(td, uap)
return (error);
vfslocked = NDHASGIANT(&nd);
NDFREE(&nd, NDF_ONLY_PNBUF);
- error = vn_start_write(nd.ni_vp, &vmp, V_WAIT | PCATCH);
mp = nd.ni_vp->v_mount;
+ if ((error = vfs_busy(mp, 0, NULL, td))) {
+ vrele(nd.ni_vp);
+ VFS_UNLOCK_GIANT(vfslocked);
+ return (error);
+ }
vrele(nd.ni_vp);
- if (error)
- goto out;
error = VFS_QUOTACTL(mp, uap->cmd, uap->uid, uap->arg, td);
- vn_finished_write(vmp);
-out:
+ vfs_unbusy(mp, td);
VFS_UNLOCK_GIANT(vfslocked);
return (error);
}
OpenPOWER on IntegriCloud