Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
fs
ocfs2
symlink.c
Go to the documentation of this file.
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
[email protected]
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;
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
.readlink =
generic_readlink
,
91
.follow_link =
page_follow_link_light
,
92
.put_link =
page_put_link
,
93
.getattr =
ocfs2_getattr
,
94
.setattr =
ocfs2_setattr
,
95
.setxattr =
generic_setxattr
,
96
.getxattr =
generic_getxattr
,
97
.listxattr =
ocfs2_listxattr
,
98
.removexattr =
generic_removexattr
,
99
.fiemap =
ocfs2_fiemap
,
100
};
Generated on Thu Jan 10 2013 14:44:49 for Linux Kernel by
1.8.2