diff options
Diffstat (limited to 'fs/nfs/dir.c')
-rw-r--r-- | fs/nfs/dir.c | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c index 481f8892a919..4133ef5264e5 100644 --- a/fs/nfs/dir.c +++ b/fs/nfs/dir.c | |||
@@ -142,12 +142,12 @@ nfs_opendir(struct inode *inode, struct file *filp) | |||
142 | return res; | 142 | return res; |
143 | } | 143 | } |
144 | 144 | ||
145 | typedef u32 * (*decode_dirent_t)(u32 *, struct nfs_entry *, int); | 145 | typedef __be32 * (*decode_dirent_t)(__be32 *, struct nfs_entry *, int); |
146 | typedef struct { | 146 | typedef struct { |
147 | struct file *file; | 147 | struct file *file; |
148 | struct page *page; | 148 | struct page *page; |
149 | unsigned long page_index; | 149 | unsigned long page_index; |
150 | u32 *ptr; | 150 | __be32 *ptr; |
151 | u64 *dir_cookie; | 151 | u64 *dir_cookie; |
152 | loff_t current_index; | 152 | loff_t current_index; |
153 | struct nfs_entry *entry; | 153 | struct nfs_entry *entry; |
@@ -203,8 +203,10 @@ int nfs_readdir_filler(nfs_readdir_descriptor_t *desc, struct page *page) | |||
203 | * Note: assumes we have exclusive access to this mapping either | 203 | * Note: assumes we have exclusive access to this mapping either |
204 | * through inode->i_mutex or some other mechanism. | 204 | * through inode->i_mutex or some other mechanism. |
205 | */ | 205 | */ |
206 | if (page->index == 0) | 206 | if (page->index == 0 && invalidate_inode_pages2_range(inode->i_mapping, PAGE_CACHE_SIZE, -1) < 0) { |
207 | invalidate_inode_pages2_range(inode->i_mapping, PAGE_CACHE_SIZE, -1); | 207 | /* Should never happen */ |
208 | nfs_zap_mapping(inode, inode->i_mapping); | ||
209 | } | ||
208 | unlock_page(page); | 210 | unlock_page(page); |
209 | return 0; | 211 | return 0; |
210 | error: | 212 | error: |
@@ -218,7 +220,7 @@ int nfs_readdir_filler(nfs_readdir_descriptor_t *desc, struct page *page) | |||
218 | static inline | 220 | static inline |
219 | int dir_decode(nfs_readdir_descriptor_t *desc) | 221 | int dir_decode(nfs_readdir_descriptor_t *desc) |
220 | { | 222 | { |
221 | u32 *p = desc->ptr; | 223 | __be32 *p = desc->ptr; |
222 | p = desc->decode(p, desc->entry, desc->plus); | 224 | p = desc->decode(p, desc->entry, desc->plus); |
223 | if (IS_ERR(p)) | 225 | if (IS_ERR(p)) |
224 | return PTR_ERR(p); | 226 | return PTR_ERR(p); |
@@ -1517,8 +1519,8 @@ static int nfs_symlink(struct inode *dir, struct dentry *dentry, const char *sym | |||
1517 | pagevec_init(&lru_pvec, 0); | 1519 | pagevec_init(&lru_pvec, 0); |
1518 | if (!add_to_page_cache(page, dentry->d_inode->i_mapping, 0, | 1520 | if (!add_to_page_cache(page, dentry->d_inode->i_mapping, 0, |
1519 | GFP_KERNEL)) { | 1521 | GFP_KERNEL)) { |
1520 | if (!pagevec_add(&lru_pvec, page)) | 1522 | pagevec_add(&lru_pvec, page); |
1521 | __pagevec_lru_add(&lru_pvec); | 1523 | pagevec_lru_add(&lru_pvec); |
1522 | SetPageUptodate(page); | 1524 | SetPageUptodate(page); |
1523 | unlock_page(page); | 1525 | unlock_page(page); |
1524 | } else | 1526 | } else |