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
jffs2
symlink.c
Go to the documentation of this file.
1
/*
2
* JFFS2 -- Journalling Flash File System, Version 2.
3
*
4
* Copyright © 2001-2007 Red Hat, Inc.
5
*
6
* Created by David Woodhouse <
[email protected]
>
7
*
8
* For licensing information, see the file 'LICENCE' in this directory.
9
*
10
*/
11
12
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
13
14
#include <linux/kernel.h>
15
#include <linux/fs.h>
16
#include <
linux/namei.h
>
17
#include "
nodelist.h
"
18
19
static
void
*jffs2_follow_link(
struct
dentry
*
dentry
,
struct
nameidata
*nd);
20
21
const
struct
inode_operations
jffs2_symlink_inode_operations
=
22
{
23
.readlink =
generic_readlink
,
24
.follow_link = jffs2_follow_link,
25
.get_acl =
jffs2_get_acl
,
26
.setattr =
jffs2_setattr
,
27
.setxattr =
jffs2_setxattr
,
28
.getxattr =
jffs2_getxattr
,
29
.listxattr =
jffs2_listxattr
,
30
.removexattr =
jffs2_removexattr
31
};
32
33
static
void
*jffs2_follow_link(
struct
dentry
*
dentry
,
struct
nameidata
*nd)
34
{
35
struct
jffs2_inode_info
*
f
=
JFFS2_INODE_INFO
(dentry->
d_inode
);
36
char
*
p
= (
char
*)f->
target
;
37
38
/*
39
* We don't acquire the f->sem mutex here since the only data we
40
* use is f->target.
41
*
42
* 1. If we are here the inode has already built and f->target has
43
* to point to the target path.
44
* 2. Nobody uses f->target (if the inode is symlink's inode). The
45
* exception is inode freeing function which frees f->target. But
46
* it can't be called while we are here and before VFS has
47
* stopped using our f->target string which we provide by means of
48
* nd_set_link() call.
49
*/
50
51
if
(!p) {
52
pr_err
(
"%s(): can't find symlink target\n"
, __func__);
53
p = ERR_PTR(-
EIO
);
54
}
55
jffs2_dbg
(1,
"%s(): target path is '%s'\n"
,
56
__func__, (
char
*)f->
target
);
57
58
nd_set_link(nd, p);
59
60
/*
61
* We will unlock the f->sem mutex but VFS will use the f->target string. This is safe
62
* since the only way that may cause f->target to be changed is iput() operation.
63
* But VFS will not use f->target after iput() has been called.
64
*/
65
return
NULL
;
66
}
67
Generated on Thu Jan 10 2013 14:44:49 for Linux Kernel by
1.8.2