diff options
author | Christoph Hellwig <hch@lst.de> | 2019-05-01 12:06:35 -0400 |
---|---|---|
committer | Anna Schumaker <Anna.Schumaker@Netapp.com> | 2019-05-09 16:26:57 -0400 |
commit | a46126ccc77e764429d63bf958d117f607f4b6c6 (patch) | |
tree | 00cd9f45890ffa99dacfe50924142db80ea63485 | |
parent | 8ca017c8cee3aa6a37ddf1db7fd04c54536a0ef0 (diff) |
nfs: pass the correct prototype to read_cache_page
Fix the callbacks NFS passes to read_cache_page to actually have the
proper type expected. Casting around function pointers can easily
hide typing bugs, and defeats control flow protection.
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
-rw-r--r-- | fs/nfs/dir.c | 7 | ||||
-rw-r--r-- | fs/nfs/symlink.c | 7 |
2 files changed, 8 insertions, 6 deletions
diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c index a71d0b42d160..47d445bec8c9 100644 --- a/fs/nfs/dir.c +++ b/fs/nfs/dir.c | |||
@@ -714,8 +714,9 @@ out: | |||
714 | * We only need to convert from xdr once so future lookups are much simpler | 714 | * We only need to convert from xdr once so future lookups are much simpler |
715 | */ | 715 | */ |
716 | static | 716 | static |
717 | int nfs_readdir_filler(nfs_readdir_descriptor_t *desc, struct page* page) | 717 | int nfs_readdir_filler(void *data, struct page* page) |
718 | { | 718 | { |
719 | nfs_readdir_descriptor_t *desc = data; | ||
719 | struct inode *inode = file_inode(desc->file); | 720 | struct inode *inode = file_inode(desc->file); |
720 | int ret; | 721 | int ret; |
721 | 722 | ||
@@ -762,8 +763,8 @@ void cache_page_release(nfs_readdir_descriptor_t *desc) | |||
762 | static | 763 | static |
763 | struct page *get_cache_page(nfs_readdir_descriptor_t *desc) | 764 | struct page *get_cache_page(nfs_readdir_descriptor_t *desc) |
764 | { | 765 | { |
765 | return read_cache_page(desc->file->f_mapping, | 766 | return read_cache_page(desc->file->f_mapping, desc->page_index, |
766 | desc->page_index, (filler_t *)nfs_readdir_filler, desc); | 767 | nfs_readdir_filler, desc); |
767 | } | 768 | } |
768 | 769 | ||
769 | /* | 770 | /* |
diff --git a/fs/nfs/symlink.c b/fs/nfs/symlink.c index 06eb44b47885..25ba299fdac2 100644 --- a/fs/nfs/symlink.c +++ b/fs/nfs/symlink.c | |||
@@ -26,8 +26,9 @@ | |||
26 | * and straight-forward than readdir caching. | 26 | * and straight-forward than readdir caching. |
27 | */ | 27 | */ |
28 | 28 | ||
29 | static int nfs_symlink_filler(struct inode *inode, struct page *page) | 29 | static int nfs_symlink_filler(void *data, struct page *page) |
30 | { | 30 | { |
31 | struct inode *inode = data; | ||
31 | int error; | 32 | int error; |
32 | 33 | ||
33 | error = NFS_PROTO(inode)->readlink(inode, page, 0, PAGE_SIZE); | 34 | error = NFS_PROTO(inode)->readlink(inode, page, 0, PAGE_SIZE); |
@@ -65,8 +66,8 @@ static const char *nfs_get_link(struct dentry *dentry, | |||
65 | err = ERR_PTR(nfs_revalidate_mapping(inode, inode->i_mapping)); | 66 | err = ERR_PTR(nfs_revalidate_mapping(inode, inode->i_mapping)); |
66 | if (err) | 67 | if (err) |
67 | return err; | 68 | return err; |
68 | page = read_cache_page(&inode->i_data, 0, | 69 | page = read_cache_page(&inode->i_data, 0, nfs_symlink_filler, |
69 | (filler_t *)nfs_symlink_filler, inode); | 70 | inode); |
70 | if (IS_ERR(page)) | 71 | if (IS_ERR(page)) |
71 | return ERR_CAST(page); | 72 | return ERR_CAST(page); |
72 | } | 73 | } |