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
882415a8
Commit
882415a8
authored
Sep 15, 2009
by
Stephen Rothwell
Browse files
Options
Browse Files
Download
Plain Diff
Merge commit 'ext3/for_next'
parents
1fdaf71d
a22b086b
Changes
9
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
79 additions
and
59 deletions
+79
-59
MAINTAINERS
MAINTAINERS
+1
-2
fs/ext3/inode.c
fs/ext3/inode.c
+24
-4
fs/jbd/checkpoint.c
fs/jbd/checkpoint.c
+3
-3
fs/jbd/commit.c
fs/jbd/commit.c
+1
-1
fs/jbd/journal.c
fs/jbd/journal.c
+15
-15
fs/jbd/recovery.c
fs/jbd/recovery.c
+9
-9
fs/jbd/revoke.c
fs/jbd/revoke.c
+8
-8
fs/jbd/transaction.c
fs/jbd/transaction.c
+5
-4
include/linux/jbd.h
include/linux/jbd.h
+13
-13
No files found.
MAINTAINERS
View file @
882415a8
...
@@ -1971,7 +1971,6 @@ F: fs/ext2/
...
@@ -1971,7 +1971,6 @@ F: fs/ext2/
F: include/linux/ext2*
F: include/linux/ext2*
EXT3 FILE SYSTEM
EXT3 FILE SYSTEM
M: Stephen Tweedie <sct@redhat.com>
M: Andrew Morton <akpm@linux-foundation.org>
M: Andrew Morton <akpm@linux-foundation.org>
M: Andreas Dilger <adilger@sun.com>
M: Andreas Dilger <adilger@sun.com>
L: linux-ext4@vger.kernel.org
L: linux-ext4@vger.kernel.org
...
@@ -2889,8 +2888,8 @@ F: fs/jffs2/
...
@@ -2889,8 +2888,8 @@ F: fs/jffs2/
F: include/linux/jffs2.h
F: include/linux/jffs2.h
JOURNALLING LAYER FOR BLOCK DEVICES (JBD)
JOURNALLING LAYER FOR BLOCK DEVICES (JBD)
M: Stephen Tweedie <sct@redhat.com>
M: Andrew Morton <akpm@linux-foundation.org>
M: Andrew Morton <akpm@linux-foundation.org>
M: Jan Kara <jack@suse.cz>
L: linux-ext4@vger.kernel.org
L: linux-ext4@vger.kernel.org
S: Maintained
S: Maintained
F: fs/jbd*/
F: fs/jbd*/
...
...
fs/ext3/inode.c
View file @
882415a8
...
@@ -172,10 +172,21 @@ static int try_to_extend_transaction(handle_t *handle, struct inode *inode)
...
@@ -172,10 +172,21 @@ static int try_to_extend_transaction(handle_t *handle, struct inode *inode)
* so before we call here everything must be consistently dirtied against
* so before we call here everything must be consistently dirtied against
* this transaction.
* this transaction.
*/
*/
static
int
ext3_journal_test_restart
(
handle_t
*
handle
,
struct
inode
*
inode
)
static
int
truncate_restart_transaction
(
handle_t
*
handle
,
struct
inode
*
inode
)
{
{
int
ret
;
jbd_debug
(
2
,
"restarting handle %p
\n
"
,
handle
);
jbd_debug
(
2
,
"restarting handle %p
\n
"
,
handle
);
return
ext3_journal_restart
(
handle
,
blocks_for_truncate
(
inode
));
/*
* Drop truncate_mutex to avoid deadlock with ext3_get_blocks_handle
* At this moment, get_block can be called only for blocks inside
* i_size since page cache has been already dropped and writes are
* blocked by i_mutex. So we can safely drop the truncate_mutex.
*/
mutex_unlock
(
&
EXT3_I
(
inode
)
->
truncate_mutex
);
ret
=
ext3_journal_restart
(
handle
,
blocks_for_truncate
(
inode
));
mutex_lock
(
&
EXT3_I
(
inode
)
->
truncate_mutex
);
return
ret
;
}
}
/*
/*
...
@@ -2072,7 +2083,7 @@ static void ext3_clear_blocks(handle_t *handle, struct inode *inode,
...
@@ -2072,7 +2083,7 @@ static void ext3_clear_blocks(handle_t *handle, struct inode *inode,
ext3_journal_dirty_metadata
(
handle
,
bh
);
ext3_journal_dirty_metadata
(
handle
,
bh
);
}
}
ext3_mark_inode_dirty
(
handle
,
inode
);
ext3_mark_inode_dirty
(
handle
,
inode
);
ext3_journal_test_restart
(
handle
,
inode
);
truncate_restart_transaction
(
handle
,
inode
);
if
(
bh
)
{
if
(
bh
)
{
BUFFER_TRACE
(
bh
,
"retaking write access"
);
BUFFER_TRACE
(
bh
,
"retaking write access"
);
ext3_journal_get_write_access
(
handle
,
bh
);
ext3_journal_get_write_access
(
handle
,
bh
);
...
@@ -2282,7 +2293,7 @@ static void ext3_free_branches(handle_t *handle, struct inode *inode,
...
@@ -2282,7 +2293,7 @@ static void ext3_free_branches(handle_t *handle, struct inode *inode,
return
;
return
;
if
(
try_to_extend_transaction
(
handle
,
inode
))
{
if
(
try_to_extend_transaction
(
handle
,
inode
))
{
ext3_mark_inode_dirty
(
handle
,
inode
);
ext3_mark_inode_dirty
(
handle
,
inode
);
ext3_journal_test_restart
(
handle
,
inode
);
truncate_restart_transaction
(
handle
,
inode
);
}
}
ext3_free_blocks
(
handle
,
inode
,
nr
,
1
);
ext3_free_blocks
(
handle
,
inode
,
nr
,
1
);
...
@@ -2892,6 +2903,10 @@ static int ext3_do_update_inode(handle_t *handle,
...
@@ -2892,6 +2903,10 @@ static int ext3_do_update_inode(handle_t *handle,
struct
buffer_head
*
bh
=
iloc
->
bh
;
struct
buffer_head
*
bh
=
iloc
->
bh
;
int
err
=
0
,
rc
,
block
;
int
err
=
0
,
rc
,
block
;
again:
/* we can't allow multiple procs in here at once, its a bit racey */
lock_buffer
(
bh
);
/* For fields not not tracking in the in-memory inode,
/* For fields not not tracking in the in-memory inode,
* initialise them to zero for new inodes. */
* initialise them to zero for new inodes. */
if
(
ei
->
i_state
&
EXT3_STATE_NEW
)
if
(
ei
->
i_state
&
EXT3_STATE_NEW
)
...
@@ -2951,16 +2966,20 @@ static int ext3_do_update_inode(handle_t *handle,
...
@@ -2951,16 +2966,20 @@ static int ext3_do_update_inode(handle_t *handle,
/* If this is the first large file
/* If this is the first large file
* created, add a flag to the superblock.
* created, add a flag to the superblock.
*/
*/
unlock_buffer
(
bh
);
err
=
ext3_journal_get_write_access
(
handle
,
err
=
ext3_journal_get_write_access
(
handle
,
EXT3_SB
(
sb
)
->
s_sbh
);
EXT3_SB
(
sb
)
->
s_sbh
);
if
(
err
)
if
(
err
)
goto
out_brelse
;
goto
out_brelse
;
ext3_update_dynamic_rev
(
sb
);
ext3_update_dynamic_rev
(
sb
);
EXT3_SET_RO_COMPAT_FEATURE
(
sb
,
EXT3_SET_RO_COMPAT_FEATURE
(
sb
,
EXT3_FEATURE_RO_COMPAT_LARGE_FILE
);
EXT3_FEATURE_RO_COMPAT_LARGE_FILE
);
handle
->
h_sync
=
1
;
handle
->
h_sync
=
1
;
err
=
ext3_journal_dirty_metadata
(
handle
,
err
=
ext3_journal_dirty_metadata
(
handle
,
EXT3_SB
(
sb
)
->
s_sbh
);
EXT3_SB
(
sb
)
->
s_sbh
);
/* get our lock and start over */
goto
again
;
}
}
}
}
}
}
...
@@ -2983,6 +3002,7 @@ static int ext3_do_update_inode(handle_t *handle,
...
@@ -2983,6 +3002,7 @@ static int ext3_do_update_inode(handle_t *handle,
raw_inode
->
i_extra_isize
=
cpu_to_le16
(
ei
->
i_extra_isize
);
raw_inode
->
i_extra_isize
=
cpu_to_le16
(
ei
->
i_extra_isize
);
BUFFER_TRACE
(
bh
,
"call ext3_journal_dirty_metadata"
);
BUFFER_TRACE
(
bh
,
"call ext3_journal_dirty_metadata"
);
unlock_buffer
(
bh
);
rc
=
ext3_journal_dirty_metadata
(
handle
,
bh
);
rc
=
ext3_journal_dirty_metadata
(
handle
,
bh
);
if
(
!
err
)
if
(
!
err
)
err
=
rc
;
err
=
rc
;
...
...
fs/jbd/checkpoint.c
View file @
882415a8
...
@@ -456,7 +456,7 @@ int cleanup_journal_tail(journal_t *journal)
...
@@ -456,7 +456,7 @@ int cleanup_journal_tail(journal_t *journal)
{
{
transaction_t
*
transaction
;
transaction_t
*
transaction
;
tid_t
first_tid
;
tid_t
first_tid
;
unsigned
long
blocknr
,
freed
;
unsigned
int
blocknr
,
freed
;
if
(
is_journal_aborted
(
journal
))
if
(
is_journal_aborted
(
journal
))
return
1
;
return
1
;
...
@@ -502,8 +502,8 @@ int cleanup_journal_tail(journal_t *journal)
...
@@ -502,8 +502,8 @@ int cleanup_journal_tail(journal_t *journal)
freed
=
freed
+
journal
->
j_last
-
journal
->
j_first
;
freed
=
freed
+
journal
->
j_last
-
journal
->
j_first
;
jbd_debug
(
1
,
jbd_debug
(
1
,
"Cleaning journal tail from %d to %d (offset %
l
u), "
"Cleaning journal tail from %d to %d (offset %u), "
"freeing %
l
u
\n
"
,
"freeing %u
\n
"
,
journal
->
j_tail_sequence
,
first_tid
,
blocknr
,
freed
);
journal
->
j_tail_sequence
,
first_tid
,
blocknr
,
freed
);
journal
->
j_free
+=
freed
;
journal
->
j_free
+=
freed
;
...
...
fs/jbd/commit.c
View file @
882415a8
...
@@ -308,7 +308,7 @@ void journal_commit_transaction(journal_t *journal)
...
@@ -308,7 +308,7 @@ void journal_commit_transaction(journal_t *journal)
int
bufs
;
int
bufs
;
int
flags
;
int
flags
;
int
err
;
int
err
;
unsigned
long
blocknr
;
unsigned
int
blocknr
;
ktime_t
start_time
;
ktime_t
start_time
;
u64
commit_time
;
u64
commit_time
;
char
*
tagp
=
NULL
;
char
*
tagp
=
NULL
;
...
...
fs/jbd/journal.c
View file @
882415a8
...
@@ -276,7 +276,7 @@ static void journal_kill_thread(journal_t *journal)
...
@@ -276,7 +276,7 @@ static void journal_kill_thread(journal_t *journal)
int
journal_write_metadata_buffer
(
transaction_t
*
transaction
,
int
journal_write_metadata_buffer
(
transaction_t
*
transaction
,
struct
journal_head
*
jh_in
,
struct
journal_head
*
jh_in
,
struct
journal_head
**
jh_out
,
struct
journal_head
**
jh_out
,
unsigned
long
blocknr
)
unsigned
int
blocknr
)
{
{
int
need_copy_out
=
0
;
int
need_copy_out
=
0
;
int
done_copy_out
=
0
;
int
done_copy_out
=
0
;
...
@@ -567,9 +567,9 @@ int log_wait_commit(journal_t *journal, tid_t tid)
...
@@ -567,9 +567,9 @@ int log_wait_commit(journal_t *journal, tid_t tid)
* Log buffer allocation routines:
* Log buffer allocation routines:
*/
*/
int
journal_next_log_block
(
journal_t
*
journal
,
unsigned
long
*
retp
)
int
journal_next_log_block
(
journal_t
*
journal
,
unsigned
int
*
retp
)
{
{
unsigned
long
blocknr
;
unsigned
int
blocknr
;
spin_lock
(
&
journal
->
j_state_lock
);
spin_lock
(
&
journal
->
j_state_lock
);
J_ASSERT
(
journal
->
j_free
>
1
);
J_ASSERT
(
journal
->
j_free
>
1
);
...
@@ -590,11 +590,11 @@ int journal_next_log_block(journal_t *journal, unsigned long *retp)
...
@@ -590,11 +590,11 @@ int journal_next_log_block(journal_t *journal, unsigned long *retp)
* this is a no-op. If needed, we can use j_blk_offset - everything is
* this is a no-op. If needed, we can use j_blk_offset - everything is
* ready.
* ready.
*/
*/
int
journal_bmap
(
journal_t
*
journal
,
unsigned
long
blocknr
,
int
journal_bmap
(
journal_t
*
journal
,
unsigned
int
blocknr
,
unsigned
long
*
retp
)
unsigned
int
*
retp
)
{
{
int
err
=
0
;
int
err
=
0
;
unsigned
long
ret
;
unsigned
int
ret
;
if
(
journal
->
j_inode
)
{
if
(
journal
->
j_inode
)
{
ret
=
bmap
(
journal
->
j_inode
,
blocknr
);
ret
=
bmap
(
journal
->
j_inode
,
blocknr
);
...
@@ -604,7 +604,7 @@ int journal_bmap(journal_t *journal, unsigned long blocknr,
...
@@ -604,7 +604,7 @@ int journal_bmap(journal_t *journal, unsigned long blocknr,
char
b
[
BDEVNAME_SIZE
];
char
b
[
BDEVNAME_SIZE
];
printk
(
KERN_ALERT
"%s: journal block not found "
printk
(
KERN_ALERT
"%s: journal block not found "
"at offset %
l
u on %s
\n
"
,
"at offset %u on %s
\n
"
,
__func__
,
__func__
,
blocknr
,
blocknr
,
bdevname
(
journal
->
j_dev
,
b
));
bdevname
(
journal
->
j_dev
,
b
));
...
@@ -630,7 +630,7 @@ int journal_bmap(journal_t *journal, unsigned long blocknr,
...
@@ -630,7 +630,7 @@ int journal_bmap(journal_t *journal, unsigned long blocknr,
struct
journal_head
*
journal_get_descriptor_buffer
(
journal_t
*
journal
)
struct
journal_head
*
journal_get_descriptor_buffer
(
journal_t
*
journal
)
{
{
struct
buffer_head
*
bh
;
struct
buffer_head
*
bh
;
unsigned
long
blocknr
;
unsigned
int
blocknr
;
int
err
;
int
err
;
err
=
journal_next_log_block
(
journal
,
&
blocknr
);
err
=
journal_next_log_block
(
journal
,
&
blocknr
);
...
@@ -774,7 +774,7 @@ journal_t * journal_init_inode (struct inode *inode)
...
@@ -774,7 +774,7 @@ journal_t * journal_init_inode (struct inode *inode)
journal_t
*
journal
=
journal_init_common
();
journal_t
*
journal
=
journal_init_common
();
int
err
;
int
err
;
int
n
;
int
n
;
unsigned
long
blocknr
;
unsigned
int
blocknr
;
if
(
!
journal
)
if
(
!
journal
)
return
NULL
;
return
NULL
;
...
@@ -846,12 +846,12 @@ static void journal_fail_superblock (journal_t *journal)
...
@@ -846,12 +846,12 @@ static void journal_fail_superblock (journal_t *journal)
static
int
journal_reset
(
journal_t
*
journal
)
static
int
journal_reset
(
journal_t
*
journal
)
{
{
journal_superblock_t
*
sb
=
journal
->
j_superblock
;
journal_superblock_t
*
sb
=
journal
->
j_superblock
;
unsigned
long
first
,
last
;
unsigned
int
first
,
last
;
first
=
be32_to_cpu
(
sb
->
s_first
);
first
=
be32_to_cpu
(
sb
->
s_first
);
last
=
be32_to_cpu
(
sb
->
s_maxlen
);
last
=
be32_to_cpu
(
sb
->
s_maxlen
);
if
(
first
+
JFS_MIN_JOURNAL_BLOCKS
>
last
+
1
)
{
if
(
first
+
JFS_MIN_JOURNAL_BLOCKS
>
last
+
1
)
{
printk
(
KERN_ERR
"JBD: Journal too short (blocks %
lu-%l
u).
\n
"
,
printk
(
KERN_ERR
"JBD: Journal too short (blocks %
u-%
u).
\n
"
,
first
,
last
);
first
,
last
);
journal_fail_superblock
(
journal
);
journal_fail_superblock
(
journal
);
return
-
EINVAL
;
return
-
EINVAL
;
...
@@ -885,7 +885,7 @@ static int journal_reset(journal_t *journal)
...
@@ -885,7 +885,7 @@ static int journal_reset(journal_t *journal)
**/
**/
int
journal_create
(
journal_t
*
journal
)
int
journal_create
(
journal_t
*
journal
)
{
{
unsigned
long
blocknr
;
unsigned
int
blocknr
;
struct
buffer_head
*
bh
;
struct
buffer_head
*
bh
;
journal_superblock_t
*
sb
;
journal_superblock_t
*
sb
;
int
i
,
err
;
int
i
,
err
;
...
@@ -969,14 +969,14 @@ void journal_update_superblock(journal_t *journal, int wait)
...
@@ -969,14 +969,14 @@ void journal_update_superblock(journal_t *journal, int wait)
if
(
sb
->
s_start
==
0
&&
journal
->
j_tail_sequence
==
if
(
sb
->
s_start
==
0
&&
journal
->
j_tail_sequence
==
journal
->
j_transaction_sequence
)
{
journal
->
j_transaction_sequence
)
{
jbd_debug
(
1
,
"JBD: Skipping superblock update on recovered sb "
jbd_debug
(
1
,
"JBD: Skipping superblock update on recovered sb "
"(start %
ld
, seq %d, errno %d)
\n
"
,
"(start %
u
, seq %d, errno %d)
\n
"
,
journal
->
j_tail
,
journal
->
j_tail_sequence
,
journal
->
j_tail
,
journal
->
j_tail_sequence
,
journal
->
j_errno
);
journal
->
j_errno
);
goto
out
;
goto
out
;
}
}
spin_lock
(
&
journal
->
j_state_lock
);
spin_lock
(
&
journal
->
j_state_lock
);
jbd_debug
(
1
,
"JBD: updating superblock (start %
ld
, seq %d, errno %d)
\n
"
,
jbd_debug
(
1
,
"JBD: updating superblock (start %
u
, seq %d, errno %d)
\n
"
,
journal
->
j_tail
,
journal
->
j_tail_sequence
,
journal
->
j_errno
);
journal
->
j_tail
,
journal
->
j_tail_sequence
,
journal
->
j_errno
);
sb
->
s_sequence
=
cpu_to_be32
(
journal
->
j_tail_sequence
);
sb
->
s_sequence
=
cpu_to_be32
(
journal
->
j_tail_sequence
);
...
@@ -1371,7 +1371,7 @@ int journal_flush(journal_t *journal)
...
@@ -1371,7 +1371,7 @@ int journal_flush(journal_t *journal)
{
{
int
err
=
0
;
int
err
=
0
;
transaction_t
*
transaction
=
NULL
;
transaction_t
*
transaction
=
NULL
;
unsigned
long
old_tail
;
unsigned
int
old_tail
;
spin_lock
(
&
journal
->
j_state_lock
);
spin_lock
(
&
journal
->
j_state_lock
);
...
...
fs/jbd/recovery.c
View file @
882415a8
...
@@ -70,7 +70,7 @@ static int do_readahead(journal_t *journal, unsigned int start)
...
@@ -70,7 +70,7 @@ static int do_readahead(journal_t *journal, unsigned int start)
{
{
int
err
;
int
err
;
unsigned
int
max
,
nbufs
,
next
;
unsigned
int
max
,
nbufs
,
next
;
unsigned
long
blocknr
;
unsigned
int
blocknr
;
struct
buffer_head
*
bh
;
struct
buffer_head
*
bh
;
struct
buffer_head
*
bufs
[
MAXBUF
];
struct
buffer_head
*
bufs
[
MAXBUF
];
...
@@ -132,7 +132,7 @@ static int jread(struct buffer_head **bhp, journal_t *journal,
...
@@ -132,7 +132,7 @@ static int jread(struct buffer_head **bhp, journal_t *journal,
unsigned
int
offset
)
unsigned
int
offset
)
{
{
int
err
;
int
err
;
unsigned
long
blocknr
;
unsigned
int
blocknr
;
struct
buffer_head
*
bh
;
struct
buffer_head
*
bh
;
*
bhp
=
NULL
;
*
bhp
=
NULL
;
...
@@ -314,7 +314,7 @@ static int do_one_pass(journal_t *journal,
...
@@ -314,7 +314,7 @@ static int do_one_pass(journal_t *journal,
struct
recovery_info
*
info
,
enum
passtype
pass
)
struct
recovery_info
*
info
,
enum
passtype
pass
)
{
{
unsigned
int
first_commit_ID
,
next_commit_ID
;
unsigned
int
first_commit_ID
,
next_commit_ID
;
unsigned
long
next_log_block
;
unsigned
int
next_log_block
;
int
err
,
success
=
0
;
int
err
,
success
=
0
;
journal_superblock_t
*
sb
;
journal_superblock_t
*
sb
;
journal_header_t
*
tmp
;
journal_header_t
*
tmp
;
...
@@ -367,14 +367,14 @@ static int do_one_pass(journal_t *journal,
...
@@ -367,14 +367,14 @@ static int do_one_pass(journal_t *journal,
if
(
tid_geq
(
next_commit_ID
,
info
->
end_transaction
))
if
(
tid_geq
(
next_commit_ID
,
info
->
end_transaction
))
break
;
break
;
jbd_debug
(
2
,
"Scanning for sequence ID %u at %
lu/%l
u
\n
"
,
jbd_debug
(
2
,
"Scanning for sequence ID %u at %
u/%
u
\n
"
,
next_commit_ID
,
next_log_block
,
journal
->
j_last
);
next_commit_ID
,
next_log_block
,
journal
->
j_last
);
/* Skip over each chunk of the transaction looking
/* Skip over each chunk of the transaction looking
* either the next descriptor block or the final commit
* either the next descriptor block or the final commit
* record. */
* record. */
jbd_debug
(
3
,
"JBD: checking block %
ld
\n
"
,
next_log_block
);
jbd_debug
(
3
,
"JBD: checking block %
u
\n
"
,
next_log_block
);
err
=
jread
(
&
bh
,
journal
,
next_log_block
);
err
=
jread
(
&
bh
,
journal
,
next_log_block
);
if
(
err
)
if
(
err
)
goto
failed
;
goto
failed
;
...
@@ -429,7 +429,7 @@ static int do_one_pass(journal_t *journal,
...
@@ -429,7 +429,7 @@ static int do_one_pass(journal_t *journal,
tagp
=
&
bh
->
b_data
[
sizeof
(
journal_header_t
)];
tagp
=
&
bh
->
b_data
[
sizeof
(
journal_header_t
)];
while
((
tagp
-
bh
->
b_data
+
sizeof
(
journal_block_tag_t
))
while
((
tagp
-
bh
->
b_data
+
sizeof
(
journal_block_tag_t
))
<=
journal
->
j_blocksize
)
{
<=
journal
->
j_blocksize
)
{
unsigned
long
io_block
;
unsigned
int
io_block
;
tag
=
(
journal_block_tag_t
*
)
tagp
;
tag
=
(
journal_block_tag_t
*
)
tagp
;
flags
=
be32_to_cpu
(
tag
->
t_flags
);
flags
=
be32_to_cpu
(
tag
->
t_flags
);
...
@@ -443,10 +443,10 @@ static int do_one_pass(journal_t *journal,
...
@@ -443,10 +443,10 @@ static int do_one_pass(journal_t *journal,
success
=
err
;
success
=
err
;
printk
(
KERN_ERR
printk
(
KERN_ERR
"JBD: IO error %d recovering "
"JBD: IO error %d recovering "
"block %
ld
in log
\n
"
,
"block %
u
in log
\n
"
,
err
,
io_block
);
err
,
io_block
);
}
else
{
}
else
{
unsigned
long
blocknr
;
unsigned
int
blocknr
;
J_ASSERT
(
obh
!=
NULL
);
J_ASSERT
(
obh
!=
NULL
);
blocknr
=
be32_to_cpu
(
tag
->
t_blocknr
);
blocknr
=
be32_to_cpu
(
tag
->
t_blocknr
);
...
@@ -581,7 +581,7 @@ static int scan_revoke_records(journal_t *journal, struct buffer_head *bh,
...
@@ -581,7 +581,7 @@ static int scan_revoke_records(journal_t *journal, struct buffer_head *bh,
max
=
be32_to_cpu
(
header
->
r_count
);
max
=
be32_to_cpu
(
header
->
r_count
);
while
(
offset
<
max
)
{
while
(
offset
<
max
)
{
unsigned
long
blocknr
;
unsigned
int
blocknr
;
int
err
;
int
err
;
blocknr
=
be32_to_cpu
(
*
((
__be32
*
)
(
bh
->
b_data
+
offset
)));
blocknr
=
be32_to_cpu
(
*
((
__be32
*
)
(
bh
->
b_data
+
offset
)));
...
...
fs/jbd/revoke.c
View file @
882415a8
...
@@ -101,7 +101,7 @@ struct jbd_revoke_record_s
...
@@ -101,7 +101,7 @@ struct jbd_revoke_record_s
{
{
struct
list_head
hash
;
struct
list_head
hash
;
tid_t
sequence
;
/* Used for recovery only */
tid_t
sequence
;
/* Used for recovery only */
unsigned
long
blocknr
;
unsigned
int
blocknr
;
};
};
...
@@ -126,7 +126,7 @@ static void flush_descriptor(journal_t *, struct journal_head *, int, int);
...
@@ -126,7 +126,7 @@ static void flush_descriptor(journal_t *, struct journal_head *, int, int);
/* Utility functions to maintain the revoke table */
/* Utility functions to maintain the revoke table */
/* Borrowed from buffer.c: this is a tried and tested block hash function */
/* Borrowed from buffer.c: this is a tried and tested block hash function */
static
inline
int
hash
(
journal_t
*
journal
,
unsigned
long
block
)
static
inline
int
hash
(
journal_t
*
journal
,
unsigned
int
block
)
{
{
struct
jbd_revoke_table_s
*
table
=
journal
->
j_revoke
;
struct
jbd_revoke_table_s
*
table
=
journal
->
j_revoke
;
int
hash_shift
=
table
->
hash_shift
;
int
hash_shift
=
table
->
hash_shift
;
...
@@ -136,7 +136,7 @@ static inline int hash(journal_t *journal, unsigned long block)
...
@@ -136,7 +136,7 @@ static inline int hash(journal_t *journal, unsigned long block)
(
block
<<
(
hash_shift
-
12
)))
&
(
table
->
hash_size
-
1
);
(
block
<<
(
hash_shift
-
12
)))
&
(
table
->
hash_size
-
1
);
}
}
static
int
insert_revoke_hash
(
journal_t
*
journal
,
unsigned
long
blocknr
,
static
int
insert_revoke_hash
(
journal_t
*
journal
,
unsigned
int
blocknr
,
tid_t
seq
)
tid_t
seq
)
{
{
struct
list_head
*
hash_list
;
struct
list_head
*
hash_list
;
...
@@ -166,7 +166,7 @@ oom:
...
@@ -166,7 +166,7 @@ oom:
/* Find a revoke record in the journal's hash table. */
/* Find a revoke record in the journal's hash table. */
static
struct
jbd_revoke_record_s
*
find_revoke_record
(
journal_t
*
journal
,
static
struct
jbd_revoke_record_s
*
find_revoke_record
(
journal_t
*
journal
,
unsigned
long
blocknr
)
unsigned
int
blocknr
)
{
{
struct
list_head
*
hash_list
;
struct
list_head
*
hash_list
;
struct
jbd_revoke_record_s
*
record
;
struct
jbd_revoke_record_s
*
record
;
...
@@ -332,7 +332,7 @@ void journal_destroy_revoke(journal_t *journal)
...
@@ -332,7 +332,7 @@ void journal_destroy_revoke(journal_t *journal)
* by one.
* by one.
*/
*/
int
journal_revoke
(
handle_t
*
handle
,
unsigned
long
blocknr
,
int
journal_revoke
(
handle_t
*
handle
,
unsigned
int
blocknr
,
struct
buffer_head
*
bh_in
)
struct
buffer_head
*
bh_in
)
{
{
struct
buffer_head
*
bh
=
NULL
;
struct
buffer_head
*
bh
=
NULL
;
...
@@ -401,7 +401,7 @@ int journal_revoke(handle_t *handle, unsigned long blocknr,
...
@@ -401,7 +401,7 @@ int journal_revoke(handle_t *handle, unsigned long blocknr,
}
}
}
}
jbd_debug
(
2
,
"insert revoke for block %
l
u, bh_in=%p
\n
"
,
blocknr
,
bh_in
);
jbd_debug
(
2
,
"insert revoke for block %u, bh_in=%p
\n
"
,
blocknr
,
bh_in
);
err
=
insert_revoke_hash
(
journal
,
blocknr
,
err
=
insert_revoke_hash
(
journal
,
blocknr
,
handle
->
h_transaction
->
t_tid
);
handle
->
h_transaction
->
t_tid
);
BUFFER_TRACE
(
bh_in
,
"exit"
);
BUFFER_TRACE
(
bh_in
,
"exit"
);
...
@@ -644,7 +644,7 @@ static void flush_descriptor(journal_t *journal,
...
@@ -644,7 +644,7 @@ static void flush_descriptor(journal_t *journal,
*/
*/
int
journal_set_revoke
(
journal_t
*
journal
,
int
journal_set_revoke
(
journal_t
*
journal
,
unsigned
long
blocknr
,
unsigned
int
blocknr
,
tid_t
sequence
)
tid_t
sequence
)
{
{
struct
jbd_revoke_record_s
*
record
;
struct
jbd_revoke_record_s
*
record
;
...
@@ -668,7 +668,7 @@ int journal_set_revoke(journal_t *journal,
...
@@ -668,7 +668,7 @@ int journal_set_revoke(journal_t *journal,
*/
*/
int
journal_test_revoke
(
journal_t
*
journal
,
int
journal_test_revoke
(
journal_t
*
journal
,
unsigned
long
blocknr
,
unsigned
int
blocknr
,
tid_t
sequence
)
tid_t
sequence
)
{
{
struct
jbd_revoke_record_s
*
record
;
struct
jbd_revoke_record_s
*
record
;
...
...
fs/jbd/transaction.c
View file @
882415a8
...
@@ -56,7 +56,8 @@ get_transaction(journal_t *journal, transaction_t *transaction)
...
@@ -56,7 +56,8 @@ get_transaction(journal_t *journal, transaction_t *transaction)
spin_lock_init
(
&
transaction
->
t_handle_lock
);
spin_lock_init
(
&
transaction
->
t_handle_lock
);
/* Set up the commit timer for the new transaction. */
/* Set up the commit timer for the new transaction. */
journal
->
j_commit_timer
.
expires
=
round_jiffies
(
transaction
->
t_expires
);
journal
->
j_commit_timer
.
expires
=
round_jiffies_up
(
transaction
->
t_expires
);
add_timer
(
&
journal
->
j_commit_timer
);
add_timer
(
&
journal
->
j_commit_timer
);
J_ASSERT
(
journal
->
j_running_transaction
==
NULL
);
J_ASSERT
(
journal
->
j_running_transaction
==
NULL
);
...
@@ -228,6 +229,8 @@ repeat_locked:
...
@@ -228,6 +229,8 @@ repeat_locked:
__log_space_left
(
journal
));
__log_space_left
(
journal
));
spin_unlock
(
&
transaction
->
t_handle_lock
);
spin_unlock
(
&
transaction
->
t_handle_lock
);
spin_unlock
(
&
journal
->
j_state_lock
);
spin_unlock
(
&
journal
->
j_state_lock
);
lock_map_acquire
(
&
handle
->
h_lockdep_map
);
out:
out:
if
(
unlikely
(
new_transaction
))
/* It's usually NULL */
if
(
unlikely
(
new_transaction
))
/* It's usually NULL */
kfree
(
new_transaction
);
kfree
(
new_transaction
);
...
@@ -292,9 +295,6 @@ handle_t *journal_start(journal_t *journal, int nblocks)
...
@@ -292,9 +295,6 @@ handle_t *journal_start(journal_t *journal, int nblocks)
handle
=
ERR_PTR
(
err
);
handle
=
ERR_PTR
(
err
);
goto
out
;
goto
out
;
}
}
lock_map_acquire
(
&
handle
->
h_lockdep_map
);
out:
out:
return
handle
;
return
handle
;
}
}
...
@@ -416,6 +416,7 @@ int journal_restart(handle_t *handle, int nblocks)
...
@@ -416,6 +416,7 @@ int journal_restart(handle_t *handle, int nblocks)
__log_start_commit
(
journal
,
transaction
->
t_tid
);
__log_start_commit
(
journal
,
transaction
->
t_tid
);
spin_unlock
(
&
journal
->
j_state_lock
);
spin_unlock
(
&
journal
->
j_state_lock
);
lock_map_release
(
&
handle
->
h_lockdep_map
);
handle
->
h_buffer_credits
=
nblocks
;
handle
->
h_buffer_credits
=
nblocks
;
ret
=
start_this_handle
(
journal
,
handle
);
ret
=
start_this_handle
(
journal
,
handle
);
return
ret
;
return
ret
;
...
...
include/linux/jbd.h
View file @
882415a8
...
@@ -446,7 +446,7 @@ struct transaction_s
...
@@ -446,7 +446,7 @@ struct transaction_s
/*
/*
* Where in the log does this transaction's commit start? [no locking]
* Where in the log does this transaction's commit start? [no locking]
*/
*/
unsigned
long
t_log_start
;
unsigned
int
t_log_start
;
/* Number of buffers on the t_buffers list [j_list_lock] */
/* Number of buffers on the t_buffers list [j_list_lock] */
int
t_nr_buffers
;
int
t_nr_buffers
;
...
@@ -701,26 +701,26 @@ struct journal_s
...
@@ -701,26 +701,26 @@ struct journal_s
* Journal head: identifies the first unused block in the journal.
* Journal head: identifies the first unused block in the journal.
* [j_state_lock]
* [j_state_lock]
*/
*/
unsigned
long
j_head
;
unsigned
int
j_head
;
/*
/*
* Journal tail: identifies the oldest still-used block in the journal.
* Journal tail: identifies the oldest still-used block in the journal.
* [j_state_lock]
* [j_state_lock]
*/
*/
unsigned
long
j_tail
;
unsigned
int
j_tail
;
/*
/*
* Journal free: how many free blocks are there in the journal?
* Journal free: how many free blocks are there in the journal?
* [j_state_lock]
* [j_state_lock]
*/
*/
unsigned
long
j_free
;
unsigned
int
j_free
;
/*
/*
* Journal start and end: the block numbers of the first usable block
* Journal start and end: the block numbers of the first usable block
* and one beyond the last usable block in the journal. [j_state_lock]
* and one beyond the last usable block in the journal. [j_state_lock]
*/
*/
unsigned
long
j_first
;
unsigned
int
j_first
;
unsigned
long
j_last
;
unsigned
int
j_last
;
/*
/*
* Device, blocksize and starting block offset for the location where we
* Device, blocksize and starting block offset for the location where we
...
@@ -728,7 +728,7 @@ struct journal_s
...
@@ -728,7 +728,7 @@ struct journal_s
*/
*/
struct
block_device
*
j_dev
;
struct
block_device
*
j_dev
;
int
j_blocksize
;
int
j_blocksize
;
unsigned
long
j_blk_offset
;
unsigned
int
j_blk_offset
;
/*
/*
* Device which holds the client fs. For internal journal this will be
* Device which holds the client fs. For internal journal this will be
...
@@ -859,7 +859,7 @@ extern void __journal_clean_data_list(transaction_t *transaction);
...
@@ -859,7 +859,7 @@ extern void __journal_clean_data_list(transaction_t *transaction);
/* Log buffer allocation */
/* Log buffer allocation */
extern
struct
journal_head
*
journal_get_descriptor_buffer
(
journal_t
*
);
extern
struct
journal_head
*
journal_get_descriptor_buffer
(
journal_t
*
);
int
journal_next_log_block
(
journal_t
*
,
unsigned
long
*
);
int
journal_next_log_block
(
journal_t
*
,
unsigned
int
*
);
/* Commit management */
/* Commit management */
extern
void
journal_commit_transaction
(
journal_t
*
);
extern
void
journal_commit_transaction
(
journal_t
*
);
...
@@ -874,7 +874,7 @@ extern int
...
@@ -874,7 +874,7 @@ extern int
journal_write_metadata_buffer
(
transaction_t
*
transaction
,
journal_write_metadata_buffer
(
transaction_t
*
transaction
,
struct
journal_head
*
jh_in
,
struct
journal_head
*
jh_in
,
struct
journal_head
**
jh_out
,
struct
journal_head
**
jh_out
,
unsigned
long
blocknr
);
unsigned
int
blocknr
);
/* Transaction locking */
/* Transaction locking */
extern
void
__wait_on_journal
(
journal_t
*
);
extern
void
__wait_on_journal
(
journal_t
*
);
...
@@ -942,7 +942,7 @@ extern void journal_abort (journal_t *, int);
...
@@ -942,7 +942,7 @@ extern void journal_abort (journal_t *, int);
extern
int
journal_errno
(
journal_t
*
);
extern
int
journal_errno
(
journal_t
*
);
extern
void
journal_ack_err
(
journal_t
*
);
extern
void
journal_ack_err
(
journal_t
*
);
extern
int
journal_clear_err
(
journal_t
*
);
extern
int
journal_clear_err
(
journal_t
*
);
extern
int
journal_bmap
(
journal_t
*
,
unsigned
long
,
unsigned
long
*
);
extern
int
journal_bmap
(
journal_t
*
,
unsigned
int
,
unsigned
int
*
);
extern
int
journal_force_commit
(
journal_t
*
);
extern
int
journal_force_commit
(
journal_t
*
);
/*
/*
...
@@ -976,14 +976,14 @@ extern int journal_init_revoke_caches(void);
...
@@ -976,14 +976,14 @@ extern int journal_init_revoke_caches(void);
extern
void
journal_destroy_revoke
(
journal_t
*
);
extern
void
journal_destroy_revoke
(
journal_t
*
);
extern
int
journal_revoke
(
handle_t
*
,
extern
int
journal_revoke
(
handle_t
*
,
unsigned
long
,
struct
buffer_head
*
);
unsigned
int
,
struct
buffer_head
*
);
extern
int
journal_cancel_revoke
(
handle_t
*
,
struct
journal_head
*
);
extern
int
journal_cancel_revoke
(
handle_t
*
,
struct
journal_head
*
);
extern
void
journal_write_revoke_records
(
journal_t
*
,
extern
void
journal_write_revoke_records
(
journal_t
*
,
transaction_t
*
,
int
);
transaction_t
*
,
int
);
/* Recovery revoke support */
/* Recovery revoke support */
extern
int
journal_set_revoke
(
journal_t
*
,
unsigned
long
,
tid_t
);
extern
int
journal_set_revoke
(
journal_t
*
,
unsigned
int
,
tid_t
);
extern
int
journal_test_revoke
(
journal_t
*
,
unsigned
long
,
tid_t
);
extern
int
journal_test_revoke
(
journal_t
*
,
unsigned
int
,
tid_t
);
extern
void
journal_clear_revoke
(
journal_t
*
);
extern
void
journal_clear_revoke
(
journal_t
*
);
extern
void
journal_switch_revoke_table
(
journal_t
*
journal
);
extern
void
journal_switch_revoke_table
(
journal_t
*
journal
);
...
...
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