b24413180f560 (Greg Kroah-Hartman 2017-11-01 15:07:57 +0100 1) // SPDX-License-Identifier: GPL-2.0
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 2) /*
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 3) * Symlink inode operations for Coda filesystem
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 4) * Original version: (C) 1996 P. Braam and M. Callahan
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 5) * Rewritten for Linux 2.1. (C) 1997 Carnegie Mellon University
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 6) *
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 7) * Carnegie Mellon encourages users to contribute improvements to
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 8) * the Coda project. Contact Peter Braam (coda@cs.cmu.edu).
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 9) */
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 10)
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 11) #include <linux/types.h>
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 12) #include <linux/kernel.h>
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 13) #include <linux/time.h>
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 14) #include <linux/fs.h>
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 15) #include <linux/stat.h>
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 16) #include <linux/errno.h>
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 17) #include <linux/pagemap.h>
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 18)
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 19) #include <linux/coda.h>
8fc8b9df83138 (David Howells 2019-07-16 16:28:47 -0700 20) #include "coda_psdev.h"
31a203df9c109 (Al Viro 2011-01-12 16:36:09 -0500 21) #include "coda_linux.h"
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 22)
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 23) static int coda_symlink_filler(struct file *file, struct page *page)
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 24) {
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 25) struct inode *inode = page->mapping->host;
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 26) int error;
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 27) struct coda_inode_info *cii;
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 28) unsigned int len = PAGE_SIZE;
21fc61c73c390 (Al Viro 2015-11-17 01:07:57 -0500 29) char *p = page_address(page);
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 30)
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 31) cii = ITOC(inode);
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 32)
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 33) error = venus_readlink(inode->i_sb, &cii->c_fid, p, &len);
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 34) if (error)
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 35) goto fail;
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 36) SetPageUptodate(page);
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 37) unlock_page(page);
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 38) return 0;
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 39)
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 40) fail:
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 41) SetPageError(page);
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 42) unlock_page(page);
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 43) return error;
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 44) }
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 45)
f5e54d6e53a20 (Christoph Hellwig 2006-06-28 04:26:44 -0700 46) const struct address_space_operations coda_symlink_aops = {
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 47) .readpage = coda_symlink_filler,
^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 48) };