Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
fs
xfs
xfs_fs_subr.c
Go to the documentation of this file.
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
24
/*
25
* note: all filemap functions return negative error codes. These
26
* need to be inverted before returning to the xfs core functions.
27
*/
28
void
29
xfs_tosspages
(
30
xfs_inode_t *
ip
,
31
xfs_off_t
first
,
32
xfs_off_t last,
33
int
fiopt)
34
{
35
/* can't toss partial tail pages, so mask them out */
36
last &= ~(
PAGE_SIZE
- 1);
37
truncate_inode_pages_range
(VFS_I(ip)->i_mapping, first, last - 1);
38
}
39
40
int
41
xfs_flushinval_pages
(
42
xfs_inode_t *
ip
,
43
xfs_off_t
first
,
44
xfs_off_t last,
45
int
fiopt)
46
{
47
struct
address_space
*
mapping
= VFS_I(ip)->i_mapping;
48
int
ret
= 0;
49
50
trace_xfs_pagecache_inval(ip, first, last);
51
52
xfs_iflags_clear(ip, XFS_ITRUNCATED);
53
ret =
filemap_write_and_wait_range
(mapping, first,
54
last == -1 ?
LLONG_MAX
: last);
55
if
(!ret)
56
truncate_inode_pages_range
(mapping, first, last);
57
return
-
ret
;
58
}
59
60
int
61
xfs_flush_pages
(
62
xfs_inode_t *
ip
,
63
xfs_off_t
first
,
64
xfs_off_t last,
65
uint64_t
flags
,
66
int
fiopt)
67
{
68
struct
address_space
*
mapping
= VFS_I(ip)->i_mapping;
69
int
ret
= 0;
70
int
ret2;
71
72
xfs_iflags_clear(ip, XFS_ITRUNCATED);
73
ret = -
filemap_fdatawrite_range
(mapping, first,
74
last == -1 ?
LLONG_MAX
: last);
75
if
(flags &
XBF_ASYNC
)
76
return
ret
;
77
ret2 =
xfs_wait_on_pages
(ip, first, last);
78
if
(!ret)
79
ret = ret2;
80
return
ret
;
81
}
82
83
int
84
xfs_wait_on_pages
(
85
xfs_inode_t *
ip
,
86
xfs_off_t
first
,
87
xfs_off_t last)
88
{
89
struct
address_space
*
mapping
= VFS_I(ip)->i_mapping;
90
91
if
(
mapping_tagged
(mapping,
PAGECACHE_TAG_WRITEBACK
)) {
92
return
-
filemap_fdatawait_range
(mapping, first,
93
last == -1 ? XFS_ISIZE(ip) - 1 : last);
94
}
95
return
0;
96
}
Generated on Thu Jan 10 2013 14:50:26 for Linux Kernel by
1.8.2