f7cc02b871
Now that shared inode state is locked using the cii->c_lock, the BKL is only used to protect the upcall queues used to communicate with the userspace cache manager. The remaining state is all local and we can push the lock further down into coda_upcall(). Signed-off-by: Yoshihisa Abe <yoshiabe@cs.cmu.edu> Signed-off-by: Jan Harkes <jaharkes@cs.cmu.edu> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
50 lines
1.1 KiB
C
50 lines
1.1 KiB
C
/*
|
|
* Symlink inode operations for Coda filesystem
|
|
* Original version: (C) 1996 P. Braam and M. Callahan
|
|
* Rewritten for Linux 2.1. (C) 1997 Carnegie Mellon University
|
|
*
|
|
* Carnegie Mellon encourages users to contribute improvements to
|
|
* the Coda project. Contact Peter Braam (coda@cs.cmu.edu).
|
|
*/
|
|
|
|
#include <linux/types.h>
|
|
#include <linux/kernel.h>
|
|
#include <linux/time.h>
|
|
#include <linux/fs.h>
|
|
#include <linux/stat.h>
|
|
#include <linux/errno.h>
|
|
#include <linux/pagemap.h>
|
|
|
|
#include <linux/coda.h>
|
|
#include <linux/coda_linux.h>
|
|
#include <linux/coda_psdev.h>
|
|
#include <linux/coda_fs_i.h>
|
|
|
|
static int coda_symlink_filler(struct file *file, struct page *page)
|
|
{
|
|
struct inode *inode = page->mapping->host;
|
|
int error;
|
|
struct coda_inode_info *cii;
|
|
unsigned int len = PAGE_SIZE;
|
|
char *p = kmap(page);
|
|
|
|
cii = ITOC(inode);
|
|
|
|
error = venus_readlink(inode->i_sb, &cii->c_fid, p, &len);
|
|
if (error)
|
|
goto fail;
|
|
SetPageUptodate(page);
|
|
kunmap(page);
|
|
unlock_page(page);
|
|
return 0;
|
|
|
|
fail:
|
|
SetPageError(page);
|
|
kunmap(page);
|
|
unlock_page(page);
|
|
return error;
|
|
}
|
|
|
|
const struct address_space_operations coda_symlink_aops = {
|
|
.readpage = coda_symlink_filler,
|
|
};
|