1/* 2 * Copyright (c) 1989, 1993 3 * The Regents of the University of California. All rights reserved. 4 * (c) UNIX System Laboratories, Inc. 5 * All or some portions of this file are derived from material licensed 6 * to the University of California by American Telephone and Telegraph 7 * Co. or Unix System Laboratories, Inc. and are reproduced herein with 8 * the permission of UNIX System Laboratories, Inc. --- 22 unchanged lines hidden (view full) --- 31 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 32 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 33 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 34 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 35 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 36 * SUCH DAMAGE. 37 * 38 * @(#)vfs_syscalls.c 8.13 (Berkeley) 4/15/94 |
39 * $FreeBSD: head/sys/kern/vfs_extattr.c 102112 2002-08-19 16:43:25Z rwatson $ |
40 */ 41 42/* For 4.3 integer FS ID compatibility */ 43#include "opt_compat.h" 44#include "opt_mac.h" 45 46#include <sys/param.h> 47#include <sys/systm.h> --- 681 unchanged lines hidden (view full) --- 729 if (flags & O_TRUNC) { 730 if ((error = vn_start_write(vp, &mp, V_WAIT | PCATCH)) != 0) 731 goto bad; 732 VOP_LEASE(vp, td, td->td_ucred, LEASE_WRITE); 733 VATTR_NULL(&vat); 734 vat.va_size = 0; 735 vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td); 736#ifdef MAC |
737 error = mac_check_vnode_write(td->td_ucred, vp); |
738 if (error == 0) 739#endif 740 error = VOP_SETATTR(vp, &vat, td->td_ucred, td); 741 VOP_UNLOCK(vp, 0, td); 742 vn_finished_write(mp); 743 if (error) 744 goto bad; 745 } --- 1616 unchanged lines hidden (view full) --- 2362 return (error); 2363 } 2364 NDFREE(&nd, NDF_ONLY_PNBUF); 2365 VOP_LEASE(vp, td, td->td_ucred, LEASE_WRITE); 2366 vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td); 2367 if (vp->v_type == VDIR) 2368 error = EISDIR; 2369#ifdef MAC |
2370 else if ((error = mac_check_vnode_write(td->td_ucred, vp))) {} |
2371#endif 2372 else if ((error = vn_writechk(vp)) == 0 && 2373 (error = VOP_ACCESS(vp, VWRITE, td->td_ucred, td)) == 0) { 2374 VATTR_NULL(&vattr); 2375 vattr.va_size = SCARG(uap, length); 2376 error = VOP_SETATTR(vp, &vattr, td->td_ucred, td); 2377 } 2378 vput(vp); --- 40 unchanged lines hidden (view full) --- 2419 fdrop(fp, td); 2420 return (error); 2421 } 2422 VOP_LEASE(vp, td, td->td_ucred, LEASE_WRITE); 2423 vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td); 2424 if (vp->v_type == VDIR) 2425 error = EISDIR; 2426#ifdef MAC |
2427 else if ((error = mac_check_vnode_write(td->td_ucred, vp))) {} |
2428#endif 2429 else if ((error = vn_writechk(vp)) == 0) { 2430 VATTR_NULL(&vattr); 2431 vattr.va_size = SCARG(uap, length); 2432 error = VOP_SETATTR(vp, &vattr, fp->f_cred, td); 2433 } 2434 VOP_UNLOCK(vp, 0, td); 2435 vn_finished_write(mp); --- 901 unchanged lines hidden (view full) --- 3337 VOP_UNLOCK(vp, 0, td); /* XXX */ 3338 if ((error = vn_start_write(NULL, &mp, V_WAIT | PCATCH)) != 0) { 3339 vrele(vp); 3340 return (error); 3341 } 3342 VOP_LEASE(vp, td, td->td_ucred, LEASE_WRITE); 3343 vn_lock(vp, LK_EXCLUSIVE | LK_RETRY, td); /* XXX */ 3344#ifdef MAC |
3345 error = mac_check_vnode_write(td->td_ucred, vp); |
3346 if (error == 0) { 3347#endif 3348 VATTR_NULL(vap); 3349 vap->va_size = 0; 3350 error = VOP_SETATTR(vp, vap, td->td_ucred, td); 3351#ifdef MAC 3352 } 3353#endif --- 609 unchanged lines hidden --- |