Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
39b743c6
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
163
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看板
提交
39b743c6
编写于
6月 06, 2010
作者:
A
Al Viro
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
switch stat_file() to passing a single struct rather than fsckloads of pointers
Signed-off-by:
N
Al Viro
<
viro@zeniv.linux.org.uk
>
上级
5e2df28c
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
58 addition
and
68 deletion
+58
-68
fs/hostfs/hostfs.h
fs/hostfs/hostfs.h
+15
-5
fs/hostfs/hostfs_kern.c
fs/hostfs/hostfs_kern.c
+12
-19
fs/hostfs/hostfs_user.c
fs/hostfs/hostfs_user.c
+31
-44
未找到文件。
fs/hostfs/hostfs.h
浏览文件 @
39b743c6
...
...
@@ -53,11 +53,21 @@ struct hostfs_iattr {
struct
timespec
ia_ctime
;
};
extern
int
stat_file
(
const
char
*
path
,
unsigned
long
long
*
inode_out
,
int
*
mode_out
,
int
*
nlink_out
,
int
*
uid_out
,
int
*
gid_out
,
unsigned
long
long
*
size_out
,
struct
timespec
*
atime_out
,
struct
timespec
*
mtime_out
,
struct
timespec
*
ctime_out
,
int
*
blksize_out
,
unsigned
long
long
*
blocks_out
,
int
fd
);
struct
hostfs_stat
{
unsigned
long
long
ino
;
unsigned
int
mode
;
unsigned
int
nlink
;
unsigned
int
uid
;
unsigned
int
gid
;
unsigned
long
long
size
;
struct
timespec
atime
,
mtime
,
ctime
;
unsigned
int
blksize
;
unsigned
long
long
blocks
;
unsigned
int
maj
;
unsigned
int
min
;
};
extern
int
stat_file
(
const
char
*
path
,
struct
hostfs_stat
*
p
,
int
fd
);
extern
int
access_file
(
char
*
path
,
int
r
,
int
w
,
int
x
);
extern
int
open_file
(
char
*
path
,
int
r
,
int
w
,
int
append
);
extern
int
file_type
(
const
char
*
path
,
int
*
maj
,
int
*
min
);
...
...
fs/hostfs/hostfs_kern.c
浏览文件 @
39b743c6
...
...
@@ -131,28 +131,21 @@ static char *inode_name(struct inode *ino, int extra)
static
int
read_name
(
struct
inode
*
ino
,
char
*
name
)
{
/*
* The non-int inode fields are copied into ints by stat_file and
* then copied into the inode because passing the actual pointers
* in and having them treated as int * breaks on big-endian machines
*/
int
err
;
int
i_mode
,
i_nlink
,
i_blksize
;
unsigned
long
long
i_size
;
unsigned
long
long
i_ino
;
unsigned
long
long
i_blocks
;
err
=
stat_file
(
name
,
&
i_ino
,
&
i_mode
,
&
i_nlink
,
&
ino
->
i_uid
,
&
ino
->
i_gid
,
&
i_size
,
&
ino
->
i_atime
,
&
ino
->
i_mtime
,
&
ino
->
i_ctime
,
&
i_blksize
,
&
i_blocks
,
-
1
);
struct
hostfs_stat
st
;
int
err
=
stat_file
(
name
,
&
st
,
-
1
);
if
(
err
)
return
err
;
ino
->
i_ino
=
i_ino
;
ino
->
i_mode
=
i_mode
;
ino
->
i_nlink
=
i_nlink
;
ino
->
i_size
=
i_size
;
ino
->
i_blocks
=
i_blocks
;
ino
->
i_ino
=
st
.
ino
;
ino
->
i_mode
=
st
.
mode
;
ino
->
i_nlink
=
st
.
nlink
;
ino
->
i_uid
=
st
.
uid
;
ino
->
i_gid
=
st
.
gid
;
ino
->
i_atime
=
st
.
atime
;
ino
->
i_mtime
=
st
.
mtime
;
ino
->
i_ctime
=
st
.
ctime
;
ino
->
i_size
=
st
.
size
;
ino
->
i_blocks
=
st
.
blocks
;
return
0
;
}
...
...
fs/hostfs/hostfs_user.c
浏览文件 @
39b743c6
...
...
@@ -19,11 +19,27 @@
#include "user.h"
#include <utime.h>
int
stat_file
(
const
char
*
path
,
unsigned
long
long
*
inode_out
,
int
*
mode_out
,
int
*
nlink_out
,
int
*
uid_out
,
int
*
gid_out
,
unsigned
long
long
*
size_out
,
struct
timespec
*
atime_out
,
struct
timespec
*
mtime_out
,
struct
timespec
*
ctime_out
,
int
*
blksize_out
,
unsigned
long
long
*
blocks_out
,
int
fd
)
static
void
stat64_to_hostfs
(
const
struct
stat64
*
buf
,
struct
hostfs_stat
*
p
)
{
p
->
ino
=
buf
->
st_ino
;
p
->
mode
=
buf
->
st_mode
;
p
->
nlink
=
buf
->
st_nlink
;
p
->
uid
=
buf
->
st_uid
;
p
->
gid
=
buf
->
st_gid
;
p
->
size
=
buf
->
st_size
;
p
->
atime
.
tv_sec
=
buf
->
st_atime
;
p
->
atime
.
tv_nsec
=
0
;
p
->
ctime
.
tv_sec
=
buf
->
st_ctime
;
p
->
ctime
.
tv_nsec
=
0
;
p
->
mtime
.
tv_sec
=
buf
->
st_mtime
;
p
->
mtime
.
tv_nsec
=
0
;
p
->
blksize
=
buf
->
st_blksize
;
p
->
blocks
=
buf
->
st_blocks
;
p
->
maj
=
os_major
(
buf
->
st_rdev
);
p
->
min
=
os_minor
(
buf
->
st_rdev
);
}
int
stat_file
(
const
char
*
path
,
struct
hostfs_stat
*
p
,
int
fd
)
{
struct
stat64
buf
;
...
...
@@ -33,35 +49,7 @@ int stat_file(const char *path, unsigned long long *inode_out, int *mode_out,
}
else
if
(
lstat64
(
path
,
&
buf
)
<
0
)
{
return
-
errno
;
}
if
(
inode_out
!=
NULL
)
*
inode_out
=
buf
.
st_ino
;
if
(
mode_out
!=
NULL
)
*
mode_out
=
buf
.
st_mode
;
if
(
nlink_out
!=
NULL
)
*
nlink_out
=
buf
.
st_nlink
;
if
(
uid_out
!=
NULL
)
*
uid_out
=
buf
.
st_uid
;
if
(
gid_out
!=
NULL
)
*
gid_out
=
buf
.
st_gid
;
if
(
size_out
!=
NULL
)
*
size_out
=
buf
.
st_size
;
if
(
atime_out
!=
NULL
)
{
atime_out
->
tv_sec
=
buf
.
st_atime
;
atime_out
->
tv_nsec
=
0
;
}
if
(
mtime_out
!=
NULL
)
{
mtime_out
->
tv_sec
=
buf
.
st_mtime
;
mtime_out
->
tv_nsec
=
0
;
}
if
(
ctime_out
!=
NULL
)
{
ctime_out
->
tv_sec
=
buf
.
st_ctime
;
ctime_out
->
tv_nsec
=
0
;
}
if
(
blksize_out
!=
NULL
)
*
blksize_out
=
buf
.
st_blksize
;
if
(
blocks_out
!=
NULL
)
*
blocks_out
=
buf
.
st_blocks
;
stat64_to_hostfs
(
&
buf
,
p
);
return
0
;
}
...
...
@@ -235,8 +223,8 @@ int file_create(char *name, int ur, int uw, int ux, int gr,
int
set_attr
(
const
char
*
file
,
struct
hostfs_iattr
*
attrs
,
int
fd
)
{
struct
hostfs_stat
st
;
struct
timeval
times
[
2
];
struct
timespec
atime_ts
,
mtime_ts
;
int
err
,
ma
;
if
(
attrs
->
ia_valid
&
HOSTFS_ATTR_MODE
)
{
...
...
@@ -279,15 +267,14 @@ int set_attr(const char *file, struct hostfs_iattr *attrs, int fd)
*/
ma
=
(
HOSTFS_ATTR_ATIME_SET
|
HOSTFS_ATTR_MTIME_SET
);
if
(
attrs
->
ia_valid
&
ma
)
{
err
=
stat_file
(
file
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
&
atime_ts
,
&
mtime_ts
,
NULL
,
NULL
,
NULL
,
fd
);
err
=
stat_file
(
file
,
&
st
,
fd
);
if
(
err
!=
0
)
return
err
;
times
[
0
].
tv_sec
=
atime_ts
.
tv_sec
;
times
[
0
].
tv_usec
=
atime_ts
.
tv_nsec
/
1000
;
times
[
1
].
tv_sec
=
mtime_ts
.
tv_sec
;
times
[
1
].
tv_usec
=
mtime_ts
.
tv_nsec
/
1000
;
times
[
0
].
tv_sec
=
st
.
atime
.
tv_sec
;
times
[
0
].
tv_usec
=
st
.
atime
.
tv_nsec
/
1000
;
times
[
1
].
tv_sec
=
st
.
mtime
.
tv_sec
;
times
[
1
].
tv_usec
=
st
.
mtime
.
tv_nsec
/
1000
;
if
(
attrs
->
ia_valid
&
HOSTFS_ATTR_ATIME_SET
)
{
times
[
0
].
tv_sec
=
attrs
->
ia_atime
.
tv_sec
;
...
...
@@ -308,9 +295,9 @@ int set_attr(const char *file, struct hostfs_iattr *attrs, int fd)
/* Note: ctime is not handled */
if
(
attrs
->
ia_valid
&
(
HOSTFS_ATTR_ATIME
|
HOSTFS_ATTR_MTIME
))
{
err
=
stat_file
(
file
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
NULL
,
&
attrs
->
ia_atime
,
&
attrs
->
ia_mtime
,
NULL
,
NULL
,
NULL
,
fd
)
;
err
=
stat_file
(
file
,
&
st
,
fd
);
attrs
->
ia_atime
=
st
.
atime
;
attrs
->
ia_mtime
=
st
.
mtime
;
if
(
err
!=
0
)
return
err
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录