Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
601d2c38
cloud-kernel
项目概览
openanolis
/
cloud-kernel
大约 1 年 前同步成功
通知
158
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
601d2c38
编写于
6月 06, 2010
作者:
A
Al Viro
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
hostfs: don't keep a field in each inode when we are using it only in root
Signed-off-by:
N
Al Viro
<
viro@zeniv.linux.org.uk
>
上级
e971a6d7
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
15 addition
and
24 deletion
+15
-24
fs/hostfs/hostfs_kern.c
fs/hostfs/hostfs_kern.c
+15
-24
未找到文件。
fs/hostfs/hostfs_kern.c
浏览文件 @
601d2c38
...
...
@@ -19,7 +19,6 @@
#include "kern.h"
struct
hostfs_inode_info
{
char
*
host_filename
;
int
fd
;
fmode_t
mode
;
struct
inode
vfs_inode
;
...
...
@@ -103,7 +102,7 @@ static char *dentry_name(struct dentry *dentry, int extra)
parent
=
parent
->
d_parent
;
}
root
=
HOSTFS_I
(
parent
->
d_inode
)
->
host_filename
;
root
=
parent
->
d_sb
->
s_fs_info
;
len
+=
strlen
(
root
);
name
=
kmalloc
(
len
+
extra
+
1
,
GFP_KERNEL
);
if
(
name
==
NULL
)
...
...
@@ -266,7 +265,7 @@ int hostfs_statfs(struct dentry *dentry, struct kstatfs *sf)
long
long
f_files
;
long
long
f_ffree
;
err
=
do_statfs
(
HOSTFS_I
(
dentry
->
d_sb
->
s_root
->
d_inode
)
->
host_filename
,
err
=
do_statfs
(
dentry
->
d_sb
->
s_fs_info
,
&
sf
->
f_bsize
,
&
f_blocks
,
&
f_bfree
,
&
f_bavail
,
&
f_files
,
&
f_ffree
,
&
sf
->
f_fsid
,
sizeof
(
sf
->
f_fsid
),
&
sf
->
f_namelen
,
sf
->
f_spare
);
...
...
@@ -285,13 +284,10 @@ static struct inode *hostfs_alloc_inode(struct super_block *sb)
{
struct
hostfs_inode_info
*
hi
;
hi
=
k
m
alloc
(
sizeof
(
*
hi
),
GFP_KERNEL
);
hi
=
k
z
alloc
(
sizeof
(
*
hi
),
GFP_KERNEL
);
if
(
hi
==
NULL
)
return
NULL
;
*
hi
=
((
struct
hostfs_inode_info
)
{
.
host_filename
=
NULL
,
.
fd
=
-
1
,
.
mode
=
0
});
hi
->
fd
=
-
1
;
inode_init_once
(
&
hi
->
vfs_inode
);
return
&
hi
->
vfs_inode
;
}
...
...
@@ -308,14 +304,12 @@ static void hostfs_evict_inode(struct inode *inode)
static
void
hostfs_destroy_inode
(
struct
inode
*
inode
)
{
kfree
(
HOSTFS_I
(
inode
)
->
host_filename
);
kfree
(
HOSTFS_I
(
inode
));
}
static
int
hostfs_show_options
(
struct
seq_file
*
seq
,
struct
vfsmount
*
vfs
)
{
struct
inode
*
root
=
vfs
->
mnt_sb
->
s_root
->
d_inode
;
const
char
*
root_path
=
HOSTFS_I
(
root
)
->
host_filename
;
const
char
*
root_path
=
vfs
->
mnt_sb
->
s_fs_info
;
size_t
offset
=
strlen
(
root_ino
)
+
1
;
if
(
strlen
(
root_path
)
>
offset
)
...
...
@@ -978,8 +972,8 @@ static int hostfs_fill_sb_common(struct super_block *sb, void *d, int silent)
req_root
=
""
;
err
=
-
ENOMEM
;
host_root_path
=
kmalloc
(
strlen
(
root_ino
)
+
1
+
strlen
(
req_root
)
+
1
,
GFP_KERNEL
);
sb
->
s_fs_info
=
host_root_path
=
kmalloc
(
strlen
(
root_ino
)
+
strlen
(
req_root
)
+
2
,
GFP_KERNEL
);
if
(
host_root_path
==
NULL
)
goto
out
;
...
...
@@ -988,20 +982,13 @@ static int hostfs_fill_sb_common(struct super_block *sb, void *d, int silent)
root_inode
=
hostfs_iget
(
sb
);
if
(
IS_ERR
(
root_inode
))
{
err
=
PTR_ERR
(
root_inode
);
goto
out
_free
;
goto
out
;
}
err
=
init_inode
(
root_inode
,
NULL
);
if
(
err
)
goto
out_put
;
HOSTFS_I
(
root_inode
)
->
host_filename
=
host_root_path
;
/*
* Avoid that in the error path, iput(root_inode) frees again
* host_root_path through hostfs_destroy_inode!
*/
host_root_path
=
NULL
;
err
=
-
ENOMEM
;
sb
->
s_root
=
d_alloc_root
(
root_inode
);
if
(
sb
->
s_root
==
NULL
)
...
...
@@ -1019,8 +1006,6 @@ static int hostfs_fill_sb_common(struct super_block *sb, void *d, int silent)
out_put:
iput
(
root_inode
);
out_free:
kfree
(
host_root_path
);
out:
return
err
;
}
...
...
@@ -1032,11 +1017,17 @@ static int hostfs_read_sb(struct file_system_type *type,
return
get_sb_nodev
(
type
,
flags
,
data
,
hostfs_fill_sb_common
,
mnt
);
}
static
void
hostfs_kill_sb
(
struct
super_block
*
s
)
{
kill_anon_super
(
s
);
kfree
(
s
->
s_fs_info
);
}
static
struct
file_system_type
hostfs_type
=
{
.
owner
=
THIS_MODULE
,
.
name
=
"hostfs"
,
.
get_sb
=
hostfs_read_sb
,
.
kill_sb
=
kill_anon_super
,
.
kill_sb
=
hostfs_kill_sb
,
.
fs_flags
=
0
,
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录