Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xiphi1978
linux
提交
ffdc9064
L
linux
项目概览
xiphi1978
/
linux
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ffdc9064
编写于
6月 08, 2009
作者:
A
Al Viro
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
repair adfs ->write_inode(), switch to simple_fsync()
Signed-off-by:
N
Al Viro
<
viro@zeniv.linux.org.uk
>
上级
bea6b64c
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
48 addition
and
6 deletion
+48
-6
fs/adfs/adfs.h
fs/adfs/adfs.h
+3
-1
fs/adfs/dir.c
fs/adfs/dir.c
+8
-2
fs/adfs/dir_f.c
fs/adfs/dir_f.c
+17
-0
fs/adfs/dir_fplus.c
fs/adfs/dir_fplus.c
+17
-0
fs/adfs/file.c
fs/adfs/file.c
+1
-1
fs/adfs/inode.c
fs/adfs/inode.c
+2
-2
未找到文件。
fs/adfs/adfs.h
浏览文件 @
ffdc9064
...
...
@@ -53,6 +53,7 @@ struct adfs_dir_ops {
int
(
*
update
)(
struct
adfs_dir
*
dir
,
struct
object_info
*
obj
);
int
(
*
create
)(
struct
adfs_dir
*
dir
,
struct
object_info
*
obj
);
int
(
*
remove
)(
struct
adfs_dir
*
dir
,
struct
object_info
*
obj
);
int
(
*
sync
)(
struct
adfs_dir
*
dir
);
void
(
*
free
)(
struct
adfs_dir
*
dir
);
};
...
...
@@ -90,7 +91,8 @@ extern const struct dentry_operations adfs_dentry_operations;
extern
struct
adfs_dir_ops
adfs_f_dir_ops
;
extern
struct
adfs_dir_ops
adfs_fplus_dir_ops
;
extern
int
adfs_dir_update
(
struct
super_block
*
sb
,
struct
object_info
*
obj
);
extern
int
adfs_dir_update
(
struct
super_block
*
sb
,
struct
object_info
*
obj
,
int
wait
);
/* file.c */
extern
const
struct
inode_operations
adfs_file_inode_operations
;
...
...
fs/adfs/dir.c
浏览文件 @
ffdc9064
...
...
@@ -83,7 +83,7 @@ adfs_readdir(struct file *filp, void *dirent, filldir_t filldir)
}
int
adfs_dir_update
(
struct
super_block
*
sb
,
struct
object_info
*
obj
)
adfs_dir_update
(
struct
super_block
*
sb
,
struct
object_info
*
obj
,
int
wait
)
{
int
ret
=
-
EINVAL
;
#ifdef CONFIG_ADFS_FS_RW
...
...
@@ -106,6 +106,12 @@ adfs_dir_update(struct super_block *sb, struct object_info *obj)
ret
=
ops
->
update
(
&
dir
,
obj
);
write_unlock
(
&
adfs_dir_lock
);
if
(
wait
)
{
int
err
=
ops
->
sync
(
&
dir
);
if
(
!
ret
)
ret
=
err
;
}
ops
->
free
(
&
dir
);
out:
#endif
...
...
@@ -199,7 +205,7 @@ const struct file_operations adfs_dir_operations = {
.
read
=
generic_read_dir
,
.
llseek
=
generic_file_llseek
,
.
readdir
=
adfs_readdir
,
.
fsync
=
fi
le_fsync
,
.
fsync
=
simp
le_fsync
,
};
static
int
...
...
fs/adfs/dir_f.c
浏览文件 @
ffdc9064
...
...
@@ -437,6 +437,22 @@ adfs_f_update(struct adfs_dir *dir, struct object_info *obj)
#endif
}
static
int
adfs_f_sync
(
struct
adfs_dir
*
dir
)
{
int
err
=
0
;
int
i
;
for
(
i
=
dir
->
nr_buffers
-
1
;
i
>=
0
;
i
--
)
{
struct
buffer_head
*
bh
=
dir
->
bh
[
i
];
sync_dirty_buffer
(
bh
);
if
(
buffer_req
(
bh
)
&&
!
buffer_uptodate
(
bh
))
err
=
-
EIO
;
}
return
err
;
}
static
void
adfs_f_free
(
struct
adfs_dir
*
dir
)
{
...
...
@@ -456,5 +472,6 @@ struct adfs_dir_ops adfs_f_dir_ops = {
.
setpos
=
adfs_f_setpos
,
.
getnext
=
adfs_f_getnext
,
.
update
=
adfs_f_update
,
.
sync
=
adfs_f_sync
,
.
free
=
adfs_f_free
};
fs/adfs/dir_fplus.c
浏览文件 @
ffdc9064
...
...
@@ -161,6 +161,22 @@ adfs_fplus_getnext(struct adfs_dir *dir, struct object_info *obj)
return
ret
;
}
static
int
adfs_fplus_sync
(
struct
adfs_dir
*
dir
)
{
int
err
=
0
;
int
i
;
for
(
i
=
dir
->
nr_buffers
-
1
;
i
>=
0
;
i
--
)
{
struct
buffer_head
*
bh
=
dir
->
bh
[
i
];
sync_dirty_buffer
(
bh
);
if
(
buffer_req
(
bh
)
&&
!
buffer_uptodate
(
bh
))
err
=
-
EIO
;
}
return
err
;
}
static
void
adfs_fplus_free
(
struct
adfs_dir
*
dir
)
{
...
...
@@ -175,5 +191,6 @@ struct adfs_dir_ops adfs_fplus_dir_ops = {
.
read
=
adfs_fplus_read
,
.
setpos
=
adfs_fplus_setpos
,
.
getnext
=
adfs_fplus_getnext
,
.
sync
=
adfs_fplus_sync
,
.
free
=
adfs_fplus_free
};
fs/adfs/file.c
浏览文件 @
ffdc9064
...
...
@@ -30,7 +30,7 @@ const struct file_operations adfs_file_operations = {
.
read
=
do_sync_read
,
.
aio_read
=
generic_file_aio_read
,
.
mmap
=
generic_file_mmap
,
.
fsync
=
fi
le_fsync
,
.
fsync
=
simp
le_fsync
,
.
write
=
do_sync_write
,
.
aio_write
=
generic_file_aio_write
,
.
splice_read
=
generic_file_splice_read
,
...
...
fs/adfs/inode.c
浏览文件 @
ffdc9064
...
...
@@ -376,7 +376,7 @@ adfs_notify_change(struct dentry *dentry, struct iattr *attr)
* The adfs-specific inode data has already been updated by
* adfs_notify_change()
*/
int
adfs_write_inode
(
struct
inode
*
inode
,
int
unused
)
int
adfs_write_inode
(
struct
inode
*
inode
,
int
wait
)
{
struct
super_block
*
sb
=
inode
->
i_sb
;
struct
object_info
obj
;
...
...
@@ -391,7 +391,7 @@ int adfs_write_inode(struct inode *inode, int unused)
obj
.
attr
=
ADFS_I
(
inode
)
->
attr
;
obj
.
size
=
inode
->
i_size
;
ret
=
adfs_dir_update
(
sb
,
&
obj
);
ret
=
adfs_dir_update
(
sb
,
&
obj
,
wait
);
unlock_kernel
();
return
ret
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录