fs.h (139778) | fs.h (149875) |
---|---|
1/*- 2 * modified for EXT2FS support in Lites 1.1 3 * 4 * Aug 1995, Godmar Back (gback@cs.utah.edu) 5 * University of Utah, Department of Computer Science 6 */ 7/*- 8 * Copyright (c) 1982, 1986, 1993 --- 19 unchanged lines hidden (view full) --- 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * SUCH DAMAGE. 34 * 35 * @(#)fs.h 8.7 (Berkeley) 4/19/94 | 1/*- 2 * modified for EXT2FS support in Lites 1.1 3 * 4 * Aug 1995, Godmar Back (gback@cs.utah.edu) 5 * University of Utah, Department of Computer Science 6 */ 7/*- 8 * Copyright (c) 1982, 1986, 1993 --- 19 unchanged lines hidden (view full) --- 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * SUCH DAMAGE. 34 * 35 * @(#)fs.h 8.7 (Berkeley) 4/19/94 |
36 * $FreeBSD: head/sys/gnu/fs/ext2fs/fs.h 139778 2005-01-06 18:27:30Z imp $ | 36 * $FreeBSD: head/sys/gnu/fs/ext2fs/fs.h 149875 2005-09-08 06:30:05Z truckman $ |
37 */ 38 39/* 40 * Each disk drive contains some number of file systems. 41 * A file system consists of a number of cylinder groups. 42 * Each cylinder group has inodes and data. 43 * 44 * A file system is described by its super-block, which in turn --- 100 unchanged lines hidden (view full) --- 145 * I think I'll try a VOP_LOCK/VOP_UNLOCK on the device vnode 146 */ 147#define DEVVP(inode) (VFSTOEXT2(ITOV(inode)->v_mount)->um_devvp) 148#define lock_super(devvp) vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY, curthread) 149#define unlock_super(devvp) VOP_UNLOCK(devvp, 0, curthread) 150 151/* 152 * Historically, ext2fs kept it's metadata buffers on the LOCKED queue. Now, | 37 */ 38 39/* 40 * Each disk drive contains some number of file systems. 41 * A file system consists of a number of cylinder groups. 42 * Each cylinder group has inodes and data. 43 * 44 * A file system is described by its super-block, which in turn --- 100 unchanged lines hidden (view full) --- 145 * I think I'll try a VOP_LOCK/VOP_UNLOCK on the device vnode 146 */ 147#define DEVVP(inode) (VFSTOEXT2(ITOV(inode)->v_mount)->um_devvp) 148#define lock_super(devvp) vn_lock(devvp, LK_EXCLUSIVE | LK_RETRY, curthread) 149#define unlock_super(devvp) VOP_UNLOCK(devvp, 0, curthread) 150 151/* 152 * Historically, ext2fs kept it's metadata buffers on the LOCKED queue. Now, |
153 * we simply change the lock owner to kern so that it may be released from 154 * another context. Later, we release the buffer, and conditionally write it 155 * when we're done. | 153 * we change the lock owner to kern so that we may use it from contexts other 154 * than the one that originally locked it. When we are finished with the 155 * buffer, we release it, writing it first if it was dirty. |
156 */ | 156 */ |
157#define LCK_BUF(bp) BUF_KERNPROC(bp); | 157#define LCK_BUF(bp) { \ 158 (bp)->b_flags |= B_PERSISTENT; \ 159 BUF_KERNPROC(bp); \ 160} |
158 159#define ULCK_BUF(bp) { \ 160 long flags; \ | 161 162#define ULCK_BUF(bp) { \ 163 long flags; \ |
161 int s; \ 162 s = splbio(); \ | |
163 flags = (bp)->b_flags; \ | 164 flags = (bp)->b_flags; \ |
164 (bp)->b_flags &= ~(B_DIRTY); \ 165 splx(s); \ | 165 (bp)->b_flags &= ~(B_DIRTY | B_PERSISTENT); \ |
166 if (flags & B_DIRTY) \ 167 bwrite(bp); \ 168 else \ 169 brelse(bp); \ 170} | 166 if (flags & B_DIRTY) \ 167 bwrite(bp); \ 168 else \ 169 brelse(bp); \ 170} |