Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
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 @@ bad_inode:
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