root/fs/ocfs2/symlink.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. ocfs2_fast_symlink_readpage

   1 /* -*- mode: c; c-basic-offset: 8; -*-
   2  * vim: noexpandtab sw=8 ts=8 sts=0:
   3  *
   4  *  linux/cluster/ssi/cfs/symlink.c
   5  *
   6  *      This program is free software; you can redistribute it and/or
   7  *      modify it under the terms of the GNU General Public License as
   8  *      published by the Free Software Foundation; either version 2 of
   9  *      the License, or (at your option) any later version.
  10  *
  11  *      This program is distributed in the hope that it will be useful,
  12  *      but WITHOUT ANY WARRANTY; without even the implied warranty of
  13  *      MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE
  14  *      or NON INFRINGEMENT.  See the GNU General Public License for more
  15  *      details.
  16  *
  17  *      You should have received a copy of the GNU General Public License
  18  *      along with this program; if not, write to the Free Software
  19  *      Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  20  *
  21  *      Questions/Comments/Bugfixes to ssic-linux-devel@lists.sourceforge.net
  22  *
  23  *  Copyright (C) 1992  Rick Sladkey
  24  *
  25  *  Optimization changes Copyright (C) 1994 Florian La Roche
  26  *
  27  *  Jun 7 1999, cache symlink lookups in the page cache.  -DaveM
  28  *
  29  *  Portions Copyright (C) 2001 Compaq Computer Corporation
  30  *
  31  *  ocfs2 symlink handling code.
  32  *
  33  *  Copyright (C) 2004, 2005 Oracle.
  34  *
  35  */
  36 
  37 #include <linux/fs.h>
  38 #include <linux/types.h>
  39 #include <linux/slab.h>
  40 #include <linux/pagemap.h>
  41 #include <linux/namei.h>
  42 
  43 #include <cluster/masklog.h>
  44 
  45 #include "ocfs2.h"
  46 
  47 #include "alloc.h"
  48 #include "file.h"
  49 #include "inode.h"
  50 #include "journal.h"
  51 #include "symlink.h"
  52 #include "xattr.h"
  53 
  54 #include "buffer_head_io.h"
  55 
  56 
  57 static int ocfs2_fast_symlink_readpage(struct file *unused, struct page *page)
  58 {
  59         struct inode *inode = page->mapping->host;
  60         struct buffer_head *bh = NULL;
  61         int status = ocfs2_read_inode_block(inode, &bh);
  62         struct ocfs2_dinode *fe;
  63         const char *link;
  64         void *kaddr;
  65         size_t len;
  66 
  67         if (status < 0) {
  68                 mlog_errno(status);
  69                 return status;
  70         }
  71 
  72         fe = (struct ocfs2_dinode *) bh->b_data;
  73         link = (char *) fe->id2.i_symlink;
  74         /* will be less than a page size */
  75         len = strnlen(link, ocfs2_fast_symlink_chars(inode->i_sb));
  76         kaddr = kmap_atomic(page);
  77         memcpy(kaddr, link, len + 1);
  78         kunmap_atomic(kaddr);
  79         SetPageUptodate(page);
  80         unlock_page(page);
  81         brelse(bh);
  82         return 0;
  83 }
  84 
  85 const struct address_space_operations ocfs2_fast_symlink_aops = {
  86         .readpage               = ocfs2_fast_symlink_readpage,
  87 };
  88 
  89 const struct inode_operations ocfs2_symlink_inode_operations = {
  90         .get_link       = page_get_link,
  91         .getattr        = ocfs2_getattr,
  92         .setattr        = ocfs2_setattr,
  93         .listxattr      = ocfs2_listxattr,
  94         .fiemap         = ocfs2_fiemap,
  95 };

/* [<][>][^][v][top][bottom][index][help] */