Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v2.6.34-rc4 101 lines 2.4 kB view raw
1/* 2 * Copyright (c) 2000-2002,2005-2006 Silicon Graphics, Inc. 3 * All Rights Reserved. 4 * 5 * This program is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU General Public License as 7 * published by the Free Software Foundation. 8 * 9 * This program is distributed in the hope that it would be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program; if not, write the Free Software Foundation, 16 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 17 */ 18#include "xfs.h" 19#include "xfs_vnodeops.h" 20#include "xfs_bmap_btree.h" 21#include "xfs_inode.h" 22#include "xfs_trace.h" 23 24int fs_noerr(void) { return 0; } 25int fs_nosys(void) { return ENOSYS; } 26void fs_noval(void) { return; } 27 28/* 29 * note: all filemap functions return negative error codes. These 30 * need to be inverted before returning to the xfs core functions. 31 */ 32void 33xfs_tosspages( 34 xfs_inode_t *ip, 35 xfs_off_t first, 36 xfs_off_t last, 37 int fiopt) 38{ 39 struct address_space *mapping = VFS_I(ip)->i_mapping; 40 41 if (mapping->nrpages) 42 truncate_inode_pages(mapping, first); 43} 44 45int 46xfs_flushinval_pages( 47 xfs_inode_t *ip, 48 xfs_off_t first, 49 xfs_off_t last, 50 int fiopt) 51{ 52 struct address_space *mapping = VFS_I(ip)->i_mapping; 53 int ret = 0; 54 55 trace_xfs_pagecache_inval(ip, first, last); 56 57 if (mapping->nrpages) { 58 xfs_iflags_clear(ip, XFS_ITRUNCATED); 59 ret = filemap_write_and_wait(mapping); 60 if (!ret) 61 truncate_inode_pages(mapping, first); 62 } 63 return -ret; 64} 65 66int 67xfs_flush_pages( 68 xfs_inode_t *ip, 69 xfs_off_t first, 70 xfs_off_t last, 71 uint64_t flags, 72 int fiopt) 73{ 74 struct address_space *mapping = VFS_I(ip)->i_mapping; 75 int ret = 0; 76 int ret2; 77 78 if (mapping_tagged(mapping, PAGECACHE_TAG_DIRTY)) { 79 xfs_iflags_clear(ip, XFS_ITRUNCATED); 80 ret = -filemap_fdatawrite(mapping); 81 } 82 if (flags & XBF_ASYNC) 83 return ret; 84 ret2 = xfs_wait_on_pages(ip, first, last); 85 if (!ret) 86 ret = ret2; 87 return ret; 88} 89 90int 91xfs_wait_on_pages( 92 xfs_inode_t *ip, 93 xfs_off_t first, 94 xfs_off_t last) 95{ 96 struct address_space *mapping = VFS_I(ip)->i_mapping; 97 98 if (mapping_tagged(mapping, PAGECACHE_TAG_WRITEBACK)) 99 return -filemap_fdatawait(mapping); 100 return 0; 101}