diff options
Diffstat (limited to 'fs/xfs/linux-2.6/xfs_fs_subr.c')
-rw-r--r-- | fs/xfs/linux-2.6/xfs_fs_subr.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/fs/xfs/linux-2.6/xfs_fs_subr.c b/fs/xfs/linux-2.6/xfs_fs_subr.c index 36caa6d957df..5aeb77776961 100644 --- a/fs/xfs/linux-2.6/xfs_fs_subr.c +++ b/fs/xfs/linux-2.6/xfs_fs_subr.c | |||
@@ -24,6 +24,10 @@ int fs_noerr(void) { return 0; } | |||
24 | int fs_nosys(void) { return ENOSYS; } | 24 | int fs_nosys(void) { return ENOSYS; } |
25 | void fs_noval(void) { return; } | 25 | void fs_noval(void) { return; } |
26 | 26 | ||
27 | /* | ||
28 | * note: all filemap functions return negative error codes. These | ||
29 | * need to be inverted before returning to the xfs core functions. | ||
30 | */ | ||
27 | void | 31 | void |
28 | xfs_tosspages( | 32 | xfs_tosspages( |
29 | xfs_inode_t *ip, | 33 | xfs_inode_t *ip, |
@@ -53,7 +57,7 @@ xfs_flushinval_pages( | |||
53 | if (!ret) | 57 | if (!ret) |
54 | truncate_inode_pages(mapping, first); | 58 | truncate_inode_pages(mapping, first); |
55 | } | 59 | } |
56 | return ret; | 60 | return -ret; |
57 | } | 61 | } |
58 | 62 | ||
59 | int | 63 | int |
@@ -72,10 +76,23 @@ xfs_flush_pages( | |||
72 | xfs_iflags_clear(ip, XFS_ITRUNCATED); | 76 | xfs_iflags_clear(ip, XFS_ITRUNCATED); |
73 | ret = filemap_fdatawrite(mapping); | 77 | ret = filemap_fdatawrite(mapping); |
74 | if (flags & XFS_B_ASYNC) | 78 | if (flags & XFS_B_ASYNC) |
75 | return ret; | 79 | return -ret; |
76 | ret2 = filemap_fdatawait(mapping); | 80 | ret2 = filemap_fdatawait(mapping); |
77 | if (!ret) | 81 | if (!ret) |
78 | ret = ret2; | 82 | ret = ret2; |
79 | } | 83 | } |
80 | return ret; | 84 | return -ret; |
85 | } | ||
86 | |||
87 | int | ||
88 | xfs_wait_on_pages( | ||
89 | xfs_inode_t *ip, | ||
90 | xfs_off_t first, | ||
91 | xfs_off_t last) | ||
92 | { | ||
93 | struct address_space *mapping = VFS_I(ip)->i_mapping; | ||
94 | |||
95 | if (mapping_tagged(mapping, PAGECACHE_TAG_WRITEBACK)) | ||
96 | return -filemap_fdatawait(mapping); | ||
97 | return 0; | ||
81 | } | 98 | } |