xref: /openbmc/linux/fs/coda/symlink.c (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
1b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0
21da177e4SLinus Torvalds /*
31da177e4SLinus Torvalds  * Symlink inode operations for Coda filesystem
41da177e4SLinus Torvalds  * Original version: (C) 1996 P. Braam and M. Callahan
51da177e4SLinus Torvalds  * Rewritten for Linux 2.1. (C) 1997 Carnegie Mellon University
61da177e4SLinus Torvalds  *
71da177e4SLinus Torvalds  * Carnegie Mellon encourages users to contribute improvements to
81da177e4SLinus Torvalds  * the Coda project. Contact Peter Braam (coda@cs.cmu.edu).
91da177e4SLinus Torvalds  */
101da177e4SLinus Torvalds 
111da177e4SLinus Torvalds #include <linux/types.h>
121da177e4SLinus Torvalds #include <linux/kernel.h>
131da177e4SLinus Torvalds #include <linux/time.h>
141da177e4SLinus Torvalds #include <linux/fs.h>
151da177e4SLinus Torvalds #include <linux/stat.h>
161da177e4SLinus Torvalds #include <linux/errno.h>
171da177e4SLinus Torvalds #include <linux/pagemap.h>
181da177e4SLinus Torvalds 
191da177e4SLinus Torvalds #include <linux/coda.h>
208fc8b9dfSDavid Howells #include "coda_psdev.h"
2131a203dfSAl Viro #include "coda_linux.h"
221da177e4SLinus Torvalds 
coda_symlink_filler(struct file * file,struct folio * folio)2365c0d259SMatthew Wilcox (Oracle) static int coda_symlink_filler(struct file *file, struct folio *folio)
241da177e4SLinus Torvalds {
2565c0d259SMatthew Wilcox (Oracle) 	struct inode *inode = folio->mapping->host;
261da177e4SLinus Torvalds 	int error;
271da177e4SLinus Torvalds 	struct coda_inode_info *cii;
281da177e4SLinus Torvalds 	unsigned int len = PAGE_SIZE;
29*9a0a9533SMatthew Wilcox (Oracle) 	char *p = folio_address(folio);
301da177e4SLinus Torvalds 
311da177e4SLinus Torvalds 	cii = ITOC(inode);
321da177e4SLinus Torvalds 
331da177e4SLinus Torvalds 	error = venus_readlink(inode->i_sb, &cii->c_fid, p, &len);
341da177e4SLinus Torvalds 	if (error)
351da177e4SLinus Torvalds 		goto fail;
36*9a0a9533SMatthew Wilcox (Oracle) 	folio_mark_uptodate(folio);
37*9a0a9533SMatthew Wilcox (Oracle) 	folio_unlock(folio);
381da177e4SLinus Torvalds 	return 0;
391da177e4SLinus Torvalds 
401da177e4SLinus Torvalds fail:
41*9a0a9533SMatthew Wilcox (Oracle) 	folio_set_error(folio);
42*9a0a9533SMatthew Wilcox (Oracle) 	folio_unlock(folio);
431da177e4SLinus Torvalds 	return error;
441da177e4SLinus Torvalds }
451da177e4SLinus Torvalds 
46f5e54d6eSChristoph Hellwig const struct address_space_operations coda_symlink_aops = {
4765c0d259SMatthew Wilcox (Oracle) 	.read_folio	= coda_symlink_filler,
481da177e4SLinus Torvalds };
49