Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
05459ca8
Commit
05459ca8
authored
Jun 07, 2009
by
Al Viro
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
repair sysv_write_inode(), switch sysv to simple_fsync()
Signed-off-by:
Al Viro
<
viro@zeniv.linux.org.uk
>
parent
0d7916d7
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
18 additions
and
47 deletions
+18
-47
fs/sysv/dir.c
fs/sysv/dir.c
+1
-1
fs/sysv/file.c
fs/sysv/file.c
+1
-16
fs/sysv/inode.c
fs/sysv/inode.c
+16
-29
fs/sysv/sysv.h
fs/sysv/sysv.h
+0
-1
No files found.
fs/sysv/dir.c
View file @
05459ca8
...
...
@@ -24,7 +24,7 @@ static int sysv_readdir(struct file *, void *, filldir_t);
const
struct
file_operations
sysv_dir_operations
=
{
.
read
=
generic_read_dir
,
.
readdir
=
sysv_readdir
,
.
fsync
=
s
ysv_sync_file
,
.
fsync
=
s
imple_fsync
,
};
static
inline
void
dir_put_page
(
struct
page
*
page
)
...
...
fs/sysv/file.c
View file @
05459ca8
...
...
@@ -26,7 +26,7 @@ const struct file_operations sysv_file_operations = {
.
write
=
do_sync_write
,
.
aio_write
=
generic_file_aio_write
,
.
mmap
=
generic_file_mmap
,
.
fsync
=
s
ysv_sync_file
,
.
fsync
=
s
imple_fsync
,
.
splice_read
=
generic_file_splice_read
,
};
...
...
@@ -34,18 +34,3 @@ const struct inode_operations sysv_file_inode_operations = {
.
truncate
=
sysv_truncate
,
.
getattr
=
sysv_getattr
,
};
int
sysv_sync_file
(
struct
file
*
file
,
struct
dentry
*
dentry
,
int
datasync
)
{
struct
inode
*
inode
=
dentry
->
d_inode
;
int
err
;
err
=
sync_mapping_buffers
(
inode
->
i_mapping
);
if
(
!
(
inode
->
i_state
&
I_DIRTY
))
return
err
;
if
(
datasync
&&
!
(
inode
->
i_state
&
I_DIRTY_DATASYNC
))
return
err
;
err
|=
sysv_sync_inode
(
inode
);
return
err
?
-
EIO
:
0
;
}
fs/sysv/inode.c
View file @
05459ca8
...
...
@@ -247,7 +247,7 @@ struct inode *sysv_iget(struct super_block *sb, unsigned int ino)
return
ERR_PTR
(
-
EIO
);
}
static
struct
buffer_head
*
sysv_update_inode
(
struct
inode
*
inode
)
int
sysv_write_inode
(
struct
inode
*
inode
,
int
wait
)
{
struct
super_block
*
sb
=
inode
->
i_sb
;
struct
sysv_sb_info
*
sbi
=
SYSV_SB
(
sb
);
...
...
@@ -255,19 +255,21 @@ static struct buffer_head * sysv_update_inode(struct inode * inode)
struct
sysv_inode
*
raw_inode
;
struct
sysv_inode_info
*
si
;
unsigned
int
ino
,
block
;
int
err
=
0
;
ino
=
inode
->
i_ino
;
if
(
!
ino
||
ino
>
sbi
->
s_ninodes
)
{
printk
(
"Bad inode number on dev %s: %d is out of range
\n
"
,
inode
->
i_sb
->
s_id
,
ino
);
return
NULL
;
return
-
EIO
;
}
raw_inode
=
sysv_raw_inode
(
sb
,
ino
,
&
bh
);
if
(
!
raw_inode
)
{
printk
(
"unable to read i-node block
\n
"
);
return
NULL
;
return
-
EIO
;
}
lock_kernel
();
raw_inode
->
i_mode
=
cpu_to_fs16
(
sbi
,
inode
->
i_mode
);
raw_inode
->
i_uid
=
cpu_to_fs16
(
sbi
,
fs_high2lowuid
(
inode
->
i_uid
));
raw_inode
->
i_gid
=
cpu_to_fs16
(
sbi
,
fs_high2lowgid
(
inode
->
i_gid
));
...
...
@@ -283,38 +285,23 @@ static struct buffer_head * sysv_update_inode(struct inode * inode)
for
(
block
=
0
;
block
<
10
+
1
+
1
+
1
;
block
++
)
write3byte
(
sbi
,
(
u8
*
)
&
si
->
i_data
[
block
],
&
raw_inode
->
i_data
[
3
*
block
]);
unlock_kernel
();
mark_buffer_dirty
(
bh
);
return
bh
;
}
int
sysv_write_inode
(
struct
inode
*
inode
,
int
wait
)
{
struct
buffer_head
*
bh
;
lock_kernel
();
bh
=
sysv_update_inode
(
inode
);
if
(
wait
)
{
sync_dirty_buffer
(
bh
);
if
(
buffer_req
(
bh
)
&&
!
buffer_uptodate
(
bh
))
{
printk
(
"IO error syncing sysv inode [%s:%08x]
\n
"
,
sb
->
s_id
,
ino
);
err
=
-
EIO
;
}
}
brelse
(
bh
);
unlock_kernel
();
return
0
;
}
int
sysv_sync_inode
(
struct
inode
*
inode
)
int
sysv_sync_inode
(
struct
inode
*
inode
)
{
int
err
=
0
;
struct
buffer_head
*
bh
;
bh
=
sysv_update_inode
(
inode
);
if
(
bh
&&
buffer_dirty
(
bh
))
{
sync_dirty_buffer
(
bh
);
if
(
buffer_req
(
bh
)
&&
!
buffer_uptodate
(
bh
))
{
printk
(
"IO error syncing sysv inode [%s:%08lx]
\n
"
,
inode
->
i_sb
->
s_id
,
inode
->
i_ino
);
err
=
-
1
;
}
}
else
if
(
!
bh
)
err
=
-
1
;
brelse
(
bh
);
return
err
;
return
sysv_write_inode
(
inode
,
1
);
}
static
void
sysv_delete_inode
(
struct
inode
*
inode
)
...
...
fs/sysv/sysv.h
View file @
05459ca8
...
...
@@ -144,7 +144,6 @@ extern int __sysv_write_begin(struct file *file, struct address_space *mapping,
extern
struct
inode
*
sysv_iget
(
struct
super_block
*
,
unsigned
int
);
extern
int
sysv_write_inode
(
struct
inode
*
,
int
);
extern
int
sysv_sync_inode
(
struct
inode
*
);
extern
int
sysv_sync_file
(
struct
file
*
,
struct
dentry
*
,
int
);
extern
void
sysv_set_inode
(
struct
inode
*
,
dev_t
);
extern
int
sysv_getattr
(
struct
vfsmount
*
,
struct
dentry
*
,
struct
kstat
*
);
extern
int
sysv_init_icache
(
void
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment