ffs_rawread.c (177493) | ffs_rawread.c (200770) |
---|---|
1/*- 2 * Copyright (c) 2000-2003 Tor Egge 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 11 unchanged lines hidden (view full) --- 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 */ 26 27#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2000-2003 Tor Egge 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 11 unchanged lines hidden (view full) --- 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 */ 26 27#include <sys/cdefs.h> |
28__FBSDID("$FreeBSD: head/sys/ufs/ffs/ffs_rawread.c 177493 2008-03-22 09:15:16Z jeff $"); | 28__FBSDID("$FreeBSD: head/sys/ufs/ffs/ffs_rawread.c 200770 2009-12-21 12:29:38Z kib $"); |
29 30#include <sys/param.h> 31#include <sys/systm.h> 32#include <sys/fcntl.h> 33#include <sys/file.h> 34#include <sys/stat.h> 35#include <sys/proc.h> 36#include <sys/limits.h> --- 59 unchanged lines hidden (view full) --- 96 97static int 98ffs_rawread_sync(struct vnode *vp) 99{ 100 int error; 101 int upgraded; 102 struct bufobj *bo; 103 struct mount *mp; | 29 30#include <sys/param.h> 31#include <sys/systm.h> 32#include <sys/fcntl.h> 33#include <sys/file.h> 34#include <sys/stat.h> 35#include <sys/proc.h> 36#include <sys/limits.h> --- 59 unchanged lines hidden (view full) --- 96 97static int 98ffs_rawread_sync(struct vnode *vp) 99{ 100 int error; 101 int upgraded; 102 struct bufobj *bo; 103 struct mount *mp; |
104 vm_object_t obj; |
|
104 105 /* Check for dirty mmap, pending writes and dirty buffers */ 106 bo = &vp->v_bufobj; 107 BO_LOCK(bo); 108 VI_LOCK(vp); 109 if (bo->bo_numoutput > 0 || 110 bo->bo_dirty.bv_cnt > 0 || | 105 106 /* Check for dirty mmap, pending writes and dirty buffers */ 107 bo = &vp->v_bufobj; 108 BO_LOCK(bo); 109 VI_LOCK(vp); 110 if (bo->bo_numoutput > 0 || 111 bo->bo_dirty.bv_cnt > 0 || |
111 (vp->v_iflag & VI_OBJDIRTY) != 0) { | 112 ((obj = vp->v_object) != NULL && 113 (obj->flags & OBJ_MIGHTBEDIRTY) != 0)) { |
112 VI_UNLOCK(vp); 113 BO_UNLOCK(bo); 114 115 if (vn_start_write(vp, &mp, V_NOWAIT) != 0) { 116 if (VOP_ISLOCKED(vp) != LK_EXCLUSIVE) 117 upgraded = 1; 118 else 119 upgraded = 0; --- 13 unchanged lines hidden (view full) --- 133 if ((vp->v_iflag & VI_DOOMED) != 0) { 134 VI_UNLOCK(vp); 135 if (upgraded != 0) 136 VOP_LOCK(vp, LK_DOWNGRADE); 137 vn_finished_write(mp); 138 return (EIO); 139 } 140 /* Attempt to msync mmap() regions to clean dirty mmap */ | 114 VI_UNLOCK(vp); 115 BO_UNLOCK(bo); 116 117 if (vn_start_write(vp, &mp, V_NOWAIT) != 0) { 118 if (VOP_ISLOCKED(vp) != LK_EXCLUSIVE) 119 upgraded = 1; 120 else 121 upgraded = 0; --- 13 unchanged lines hidden (view full) --- 135 if ((vp->v_iflag & VI_DOOMED) != 0) { 136 VI_UNLOCK(vp); 137 if (upgraded != 0) 138 VOP_LOCK(vp, LK_DOWNGRADE); 139 vn_finished_write(mp); 140 return (EIO); 141 } 142 /* Attempt to msync mmap() regions to clean dirty mmap */ |
141 if ((vp->v_iflag & VI_OBJDIRTY) != 0) { | 143 if ((obj = vp->v_object) != NULL && 144 (obj->flags & OBJ_MIGHTBEDIRTY) != 0) { |
142 VI_UNLOCK(vp); | 145 VI_UNLOCK(vp); |
143 if (vp->v_object != NULL) { 144 VM_OBJECT_LOCK(vp->v_object); 145 vm_object_page_clean(vp->v_object, 0, 0, OBJPC_SYNC); 146 VM_OBJECT_UNLOCK(vp->v_object); 147 } | 146 VM_OBJECT_LOCK(obj); 147 vm_object_page_clean(obj, 0, 0, OBJPC_SYNC); 148 VM_OBJECT_UNLOCK(obj); |
148 } else 149 VI_UNLOCK(vp); 150 151 /* Wait for pending writes to complete */ 152 BO_LOCK(bo); 153 error = bufobj_wwait(&vp->v_bufobj, 0, 0); 154 if (error != 0) { 155 /* XXX: can't happen with a zero timeout ??? */ --- 341 unchanged lines hidden --- | 149 } else 150 VI_UNLOCK(vp); 151 152 /* Wait for pending writes to complete */ 153 BO_LOCK(bo); 154 error = bufobj_wwait(&vp->v_bufobj, 0, 0); 155 if (error != 0) { 156 /* XXX: can't happen with a zero timeout ??? */ --- 341 unchanged lines hidden --- |