亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? xfs_aops.c

?? 優龍2410linux2.6.8內核源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* * Copyright (c) 2000-2004 Silicon Graphics, Inc.  All Rights Reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms of version 2 of the GNU General Public License as * published by the Free Software Foundation. * * This program is distributed in the hope that it would be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * * Further, this software is distributed without any warranty that it is * free of the rightful claim of any third person regarding infringement * or the like.	 Any license provided herein, whether implied or * otherwise, applies only to this software file.  Patent licenses, if * any, provided herein do not apply to combinations of this program with * other software, or any other product whatsoever. * * You should have received a copy of the GNU General Public License along * with this program; if not, write the Free Software Foundation, Inc., 59 * Temple Place - Suite 330, Boston MA 02111-1307, USA. * * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, * Mountain View, CA  94043, or: * * http://www.sgi.com * * For further information regarding this notice, see: * * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/ */#include "xfs.h"#include "xfs_inum.h"#include "xfs_log.h"#include "xfs_sb.h"#include "xfs_dir.h"#include "xfs_dir2.h"#include "xfs_trans.h"#include "xfs_dmapi.h"#include "xfs_mount.h"#include "xfs_bmap_btree.h"#include "xfs_alloc_btree.h"#include "xfs_ialloc_btree.h"#include "xfs_alloc.h"#include "xfs_btree.h"#include "xfs_attr_sf.h"#include "xfs_dir_sf.h"#include "xfs_dir2_sf.h"#include "xfs_dinode.h"#include "xfs_inode.h"#include "xfs_error.h"#include "xfs_rw.h"#include "xfs_iomap.h"#include <linux/mpage.h>#include <linux/writeback.h>STATIC void xfs_count_page_state(struct page *, int *, int *, int *);STATIC void xfs_convert_page(struct inode *, struct page *, xfs_iomap_t *,		struct writeback_control *wbc, void *, int, int);#if defined(XFS_RW_TRACE)voidxfs_page_trace(	int		tag,	struct inode	*inode,	struct page	*page,	int		mask){	xfs_inode_t	*ip;	bhv_desc_t	*bdp;	vnode_t		*vp = LINVFS_GET_VP(inode);	loff_t		isize = i_size_read(inode);	loff_t		offset = page->index << PAGE_CACHE_SHIFT;	int		delalloc = -1, unmapped = -1, unwritten = -1;	if (page_has_buffers(page))		xfs_count_page_state(page, &delalloc, &unmapped, &unwritten);	bdp = vn_bhv_lookup(VN_BHV_HEAD(vp), &xfs_vnodeops);	ip = XFS_BHVTOI(bdp);	if (!ip->i_rwtrace)		return;	ktrace_enter(ip->i_rwtrace,		(void *)((unsigned long)tag),		(void *)ip,		(void *)inode,		(void *)page,		(void *)((unsigned long)mask),		(void *)((unsigned long)((ip->i_d.di_size >> 32) & 0xffffffff)),		(void *)((unsigned long)(ip->i_d.di_size & 0xffffffff)),		(void *)((unsigned long)((isize >> 32) & 0xffffffff)),		(void *)((unsigned long)(isize & 0xffffffff)),		(void *)((unsigned long)((offset >> 32) & 0xffffffff)),		(void *)((unsigned long)(offset & 0xffffffff)),		(void *)((unsigned long)delalloc),		(void *)((unsigned long)unmapped),		(void *)((unsigned long)unwritten),		(void *)NULL,		(void *)NULL);}#else#define xfs_page_trace(tag, inode, page, mask)#endifvoidlinvfs_unwritten_done(	struct buffer_head	*bh,	int			uptodate){	xfs_buf_t		*pb = (xfs_buf_t *)bh->b_private;	ASSERT(buffer_unwritten(bh));	bh->b_end_io = NULL;	clear_buffer_unwritten(bh);	if (!uptodate)		pagebuf_ioerror(pb, EIO);	if (atomic_dec_and_test(&pb->pb_io_remaining) == 1) {		pagebuf_iodone(pb, 1, 1);	}	end_buffer_async_write(bh, uptodate);}/* * Issue transactions to convert a buffer range from unwritten * to written extents (buffered IO). */STATIC voidlinvfs_unwritten_convert(	xfs_buf_t	*bp){	vnode_t		*vp = XFS_BUF_FSPRIVATE(bp, vnode_t *);	int		error;	BUG_ON(atomic_read(&bp->pb_hold) < 1);	VOP_BMAP(vp, XFS_BUF_OFFSET(bp), XFS_BUF_SIZE(bp),			BMAPI_UNWRITTEN, NULL, NULL, error);	XFS_BUF_SET_FSPRIVATE(bp, NULL);	XFS_BUF_CLR_IODONE_FUNC(bp);	XFS_BUF_UNDATAIO(bp);	iput(LINVFS_GET_IP(vp));	pagebuf_iodone(bp, 0, 0);}/* * Issue transactions to convert a buffer range from unwritten * to written extents (direct IO). */STATIC voidlinvfs_unwritten_convert_direct(	struct inode	*inode,	loff_t		offset,	ssize_t		size,	void		*private){	ASSERT(!private || inode == (struct inode *)private);	/* private indicates an unwritten extent lay beneath this IO,	 * see linvfs_get_block_core.	 */	if (private && size > 0) {		vnode_t	*vp = LINVFS_GET_VP(inode);		int	error;		VOP_BMAP(vp, offset, size, BMAPI_UNWRITTEN, NULL, NULL, error);	}}STATIC intxfs_map_blocks(	struct inode		*inode,	loff_t			offset,	ssize_t			count,	xfs_iomap_t		*mapp,	int			flags){	vnode_t			*vp = LINVFS_GET_VP(inode);	int			error, nmaps = 1;	VOP_BMAP(vp, offset, count, flags, mapp, &nmaps, error);	if (!error && (flags & (BMAPI_WRITE|BMAPI_ALLOCATE)))		VMODIFY(vp);	return -error;}/* * Finds the corresponding mapping in block @map array of the * given @offset within a @page. */STATIC xfs_iomap_t *xfs_offset_to_map(	struct page		*page,	xfs_iomap_t		*iomapp,	unsigned long		offset){	loff_t			full_offset;	/* offset from start of file */	ASSERT(offset < PAGE_CACHE_SIZE);	full_offset = page->index;		/* NB: using 64bit number */	full_offset <<= PAGE_CACHE_SHIFT;	/* offset from file start */	full_offset += offset;			/* offset from page start */	if (full_offset < iomapp->iomap_offset)		return NULL;	if (iomapp->iomap_offset + (iomapp->iomap_bsize -1) >= full_offset)		return iomapp;	return NULL;}STATIC voidxfs_map_at_offset(	struct page		*page,	struct buffer_head	*bh,	unsigned long		offset,	int			block_bits,	xfs_iomap_t		*iomapp){	xfs_daddr_t		bn;	loff_t			delta;	int			sector_shift;	ASSERT(!(iomapp->iomap_flags & IOMAP_HOLE));	ASSERT(!(iomapp->iomap_flags & IOMAP_DELAY));	ASSERT(iomapp->iomap_bn != IOMAP_DADDR_NULL);	delta = page->index;	delta <<= PAGE_CACHE_SHIFT;	delta += offset;	delta -= iomapp->iomap_offset;	delta >>= block_bits;	sector_shift = block_bits - BBSHIFT;	bn = iomapp->iomap_bn >> sector_shift;	bn += delta;	ASSERT((bn << sector_shift) >= iomapp->iomap_bn);	lock_buffer(bh);	bh->b_blocknr = bn;	bh->b_bdev = iomapp->iomap_target->pbr_bdev;	set_buffer_mapped(bh);	clear_buffer_delay(bh);}/* * Look for a page at index which is unlocked and contains our * unwritten extent flagged buffers at its head.  Returns page * locked and with an extra reference count, and length of the * unwritten extent component on this page that we can write, * in units of filesystem blocks. */STATIC struct page *xfs_probe_unwritten_page(	struct address_space	*mapping,	pgoff_t			index,	xfs_iomap_t		*iomapp,	xfs_buf_t		*pb,	unsigned long		max_offset,	unsigned long		*fsbs,	unsigned int            bbits){	struct page		*page;	page = find_trylock_page(mapping, index);	if (!page)		return 0;	if (PageWriteback(page))		goto out;	if (page->mapping && page_has_buffers(page)) {		struct buffer_head	*bh, *head;		unsigned long		p_offset = 0;		*fsbs = 0;		bh = head = page_buffers(page);		do {			if (!buffer_unwritten(bh) || !buffer_uptodate(bh))				break;			if (!xfs_offset_to_map(page, iomapp, p_offset))				break;			if (p_offset >= max_offset)				break;			xfs_map_at_offset(page, bh, p_offset, bbits, iomapp);			set_buffer_unwritten_io(bh);			bh->b_private = pb;			p_offset += bh->b_size;			(*fsbs)++;		} while ((bh = bh->b_this_page) != head);		if (p_offset)			return page;	}out:	unlock_page(page);	return NULL;}/* * Look for a page at index which is unlocked and not mapped * yet - clustering for mmap write case. */STATIC unsigned intxfs_probe_unmapped_page(	struct address_space	*mapping,	pgoff_t			index,	unsigned int		pg_offset){	struct page		*page;	int			ret = 0;	page = find_trylock_page(mapping, index);	if (!page)		return 0;	if (PageWriteback(page))		goto out;	if (page->mapping && PageDirty(page)) {		if (page_has_buffers(page)) {			struct buffer_head	*bh, *head;			bh = head = page_buffers(page);			do {				if (buffer_mapped(bh) || !buffer_uptodate(bh))					break;				ret += bh->b_size;				if (ret >= pg_offset)					break;			} while ((bh = bh->b_this_page) != head);		} else			ret = PAGE_CACHE_SIZE;	}out:	unlock_page(page);	return ret;}STATIC unsigned intxfs_probe_unmapped_cluster(	struct inode		*inode,	struct page		*startpage,	struct buffer_head	*bh,	struct buffer_head	*head){	pgoff_t			tindex, tlast, tloff;	unsigned int		pg_offset, len, total = 0;	struct address_space	*mapping = inode->i_mapping;	/* First sum forwards in this page */	do {		if (buffer_mapped(bh))			break;		total += bh->b_size;	} while ((bh = bh->b_this_page) != head);	/* If we reached the end of the page, sum forwards in	 * following pages.	 */	if (bh == head) {		tlast = i_size_read(inode) >> PAGE_CACHE_SHIFT;		/* Prune this back to avoid pathological behavior */		tloff = min(tlast, startpage->index + 64);		for (tindex = startpage->index + 1; tindex < tloff; tindex++) {			len = xfs_probe_unmapped_page(mapping, tindex,							PAGE_CACHE_SIZE);			if (!len)				return total;			total += len;		}		if (tindex == tlast &&		    (pg_offset = i_size_read(inode) & (PAGE_CACHE_SIZE - 1))) {			total += xfs_probe_unmapped_page(mapping,							tindex, pg_offset);		}	}	return total;}/* * Probe for a given page (index) in the inode and test if it is delayed * and without unwritten buffers.  Returns page locked and with an extra * reference count. */STATIC struct page *xfs_probe_delalloc_page(	struct inode		*inode,	pgoff_t			index){	struct page		*page;	page = find_trylock_page(inode->i_mapping, index);	if (!page)		return NULL;	if (PageWriteback(page))		goto out;	if (page->mapping && page_has_buffers(page)) {		struct buffer_head	*bh, *head;		int			acceptable = 0;		bh = head = page_buffers(page);		do {			if (buffer_unwritten(bh)) {				acceptable = 0;				break;			} else if (buffer_delay(bh)) {				acceptable = 1;			}		} while ((bh = bh->b_this_page) != head);		if (acceptable)			return page;	}out:	unlock_page(page);	return NULL;}STATIC intxfs_map_unwritten(	struct inode		*inode,	struct page		*start_page,	struct buffer_head	*head,	struct buffer_head	*curr,	unsigned long		p_offset,

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二三区| 欧美日韩一区在线| 欧美亚洲一区二区三区四区| 精品伦理精品一区| 日韩理论电影院| 精品一二三四区| 欧美日韩久久久| 亚洲免费大片在线观看| 国产福利一区二区| 日韩午夜精品电影| 亚洲国产精品久久艾草纯爱| 成人h动漫精品一区二区| 久久新电视剧免费观看| 亚洲精品视频在线看| 国产成人自拍网| 欧美一区二区三区啪啪| 亚洲综合免费观看高清完整版 | av网站一区二区三区| 日韩欧美电影一区| 日本vs亚洲vs韩国一区三区二区 | 自拍偷拍国产精品| 国产成人午夜精品5599| 欧美成人国产一区二区| 日韩电影一二三区| 欧美一区二区三区在线电影| 亚洲福利视频三区| 91麻豆精品国产| 亚洲18色成人| 欧美久久一区二区| 天天做天天摸天天爽国产一区 | 午夜影视日本亚洲欧洲精品| 91久久国产最好的精华液| 中文字幕一区二区三区视频| 成人aa视频在线观看| 一区免费观看视频| 91国内精品野花午夜精品| 一区二区三区四区国产精品| 在线一区二区三区做爰视频网站| 玉足女爽爽91| 欧美性猛片aaaaaaa做受| 亚洲国产日韩av| 欧美日韩免费一区二区三区视频| 五月天国产精品| 日韩视频一区二区三区| 国内精品第一页| 国产午夜精品美女毛片视频| 成人免费视频播放| 亚洲激情五月婷婷| 91麻豆精品国产91久久久久久久久 | 欧美丰满高潮xxxx喷水动漫| 国产成人精品免费| 欧美激情综合在线| 一本大道久久精品懂色aⅴ| 亚洲一区二区精品视频| 日韩手机在线导航| 成人三级在线视频| 亚洲福利电影网| 久久久国际精品| 97精品久久久午夜一区二区三区 | 亚洲青青青在线视频| 欧美卡1卡2卡| 国产成人丝袜美腿| 一区二区三区四区激情| 精品成a人在线观看| 91在线视频观看| 美国av一区二区| 中文字幕一区在线观看| 欧美一级片在线| 97超碰欧美中文字幕| 午夜精品成人在线视频| 国产午夜亚洲精品不卡| 欧美日韩精品欧美日韩精品一| 精久久久久久久久久久| 亚洲高清一区二区三区| 久久久噜噜噜久久中文字幕色伊伊| 97se亚洲国产综合自在线不卡 | 亚洲1区2区3区4区| 欧美国产1区2区| 欧美一区二区三区视频免费| 91在线云播放| 国产美女在线精品| 视频一区二区不卡| 中文字幕一区二区三区不卡| 日韩欧美一级二级三级| 欧美色综合天天久久综合精品| 国产成人啪免费观看软件| 三级一区在线视频先锋| 亚洲特黄一级片| 久久久青草青青国产亚洲免观| 欧美日韩一区小说| 91看片淫黄大片一级在线观看| 国产伦精品一区二区三区免费迷| 亚洲成人黄色小说| 一区二区三区资源| 日韩国产欧美三级| 久久日一线二线三线suv| 91网站在线播放| 亚洲欧美激情插| 中文字幕在线观看一区| 激情av综合网| 欧美激情一区在线| 色综合久久天天| 久久99精品国产麻豆婷婷| 欧美三级午夜理伦三级中视频| 国产精品午夜免费| 欧美精品一区二区三区一线天视频| 日韩欧美一区二区久久婷婷| 色婷婷综合久久久久中文一区二区 | 成人av在线一区二区| 国产美女av一区二区三区| 美脚の诱脚舐め脚责91| 秋霞影院一区二区| 琪琪久久久久日韩精品| 美女诱惑一区二区| 欧美aa在线视频| 日本vs亚洲vs韩国一区三区二区| 丝袜国产日韩另类美女| 青青草原综合久久大伊人精品优势 | 亚洲激情图片小说视频| 亚洲自拍偷拍综合| 经典三级视频一区| 麻豆91精品91久久久的内涵| 免费成人av资源网| 国产麻豆日韩欧美久久| 国产成人av福利| 成人动漫中文字幕| 色综合亚洲欧洲| 欧美偷拍一区二区| 欧美一二三四在线| 久久中文娱乐网| 国产精品乱子久久久久| 中文字幕日本乱码精品影院| 亚洲乱码国产乱码精品精小说| 亚洲小说欧美激情另类| 舔着乳尖日韩一区| 国产不卡视频一区| 色综合久久66| 91精品国产综合久久精品app| 欧美日韩视频在线一区二区| 精品免费国产二区三区| 国产精品水嫩水嫩| 亚洲综合色成人| 韩国三级在线一区| 91丨porny丨国产入口| 欧美精三区欧美精三区| 欧美成人r级一区二区三区| 国产精品视频一二| 日韩精品欧美精品| 成人成人成人在线视频| 欧美精品一二三| 国产午夜精品一区二区| 夜夜嗨av一区二区三区| 精品亚洲国产成人av制服丝袜| 成人白浆超碰人人人人| 欧美一级片在线看| 亚洲人成精品久久久久| 男女激情视频一区| www.日韩在线| 欧美大片拔萝卜| 亚洲女女做受ⅹxx高潮| 九色|91porny| 91福利精品第一导航| 国产日本欧洲亚洲| 三级久久三级久久久| 91日韩一区二区三区| 久久免费美女视频| 性久久久久久久久| 成+人+亚洲+综合天堂| 日韩一区二区三区观看| 亚洲欧美aⅴ...| 福利电影一区二区三区| 91精品婷婷国产综合久久竹菊| 一区在线中文字幕| 国产91色综合久久免费分享| 欧美精品日韩一区| 亚洲图片激情小说| 国产精品一区二区黑丝| 欧美一级片在线观看| 亚洲国产成人av| 91欧美激情一区二区三区成人| 久久久久久久精| 高清不卡一区二区| 久久久久久夜精品精品免费| 五月开心婷婷久久| 欧美日韩mp4| 亚洲第一激情av| 91丨九色丨尤物| 亚洲视频在线一区观看| hitomi一区二区三区精品| 国产视频一区在线播放| 九九热在线视频观看这里只有精品| 3d成人h动漫网站入口| 亚洲国产精品综合小说图片区| 99精品1区2区| 综合分类小说区另类春色亚洲小说欧美 | 91污片在线观看| 中文字幕在线一区免费| 波多野结衣在线一区| 国产精品久久久久精k8| 91亚洲国产成人精品一区二三 |