diff options
author | Al Viro <viro@ZenIV.linux.org.uk> | 2010-05-21 18:27:09 +0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2010-05-22 02:31:28 +0400 |
commit | f6d335c08df48b318187a087c9c38ba3d416e115 (patch) | |
tree | ccee5ad0c46fea4c34d435d5d869f43394dd9a81 /fs/afs/dir.c | |
parent | 4403158ba295c8e36f6736b1bb12d0f7e1923dac (diff) | |
download | linux-f6d335c08df48b318187a087c9c38ba3d416e115.tar.xz |
AFS: Don't put struct file on the stack
Don't put struct file on the stack as it takes up quite a lot of space
and violates lifetime rules for struct file.
Rather than calling afs_readpage() indirectly from the directory routines by
way of read_mapping_page(), split afs_readpage() to have afs_page_filler()
that's given a key instead of a file and call read_cache_page(), specifying the
new function directly. Use it in afs_readpages() as well.
Also make use of this in afs_mntpt_check_symlink() too for the same reason.
Reported-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: David Howells <dhowells@redhat.com>
Diffstat (limited to 'fs/afs/dir.c')
-rw-r--r-- | fs/afs/dir.c | 6 |
1 files changed, 1 insertions, 5 deletions
diff --git a/fs/afs/dir.c b/fs/afs/dir.c index adc1cb771b57..b42d5cc1d6d2 100644 --- a/fs/afs/dir.c +++ b/fs/afs/dir.c @@ -189,13 +189,9 @@ static struct page *afs_dir_get_page(struct inode *dir, unsigned long index, struct key *key) { struct page *page; - struct file file = { - .private_data = key, - }; - _enter("{%lu},%lu", dir->i_ino, index); - page = read_mapping_page(dir->i_mapping, index, &file); + page = read_cache_page(dir->i_mapping, index, afs_page_filler, key); if (!IS_ERR(page)) { kmap(page); if (!PageChecked(page)) |