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
Kirill Smelkov
linux
Commits
155cd433
Commit
155cd433
authored
Oct 03, 2016
by
Dave Chinner
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'xfs-4.9-log-recovery-fixes' into for-next
parents
a1f45e66
5cd9cee9
Changes
13
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
248 additions
and
98 deletions
+248
-98
fs/xfs/libxfs/xfs_alloc.c
fs/xfs/libxfs/xfs_alloc.c
+12
-11
fs/xfs/libxfs/xfs_alloc.h
fs/xfs/libxfs/xfs_alloc.h
+15
-2
fs/xfs/libxfs/xfs_bmap.c
fs/xfs/libxfs/xfs_bmap.c
+26
-15
fs/xfs/libxfs/xfs_bmap.h
fs/xfs/libxfs/xfs_bmap.h
+1
-1
fs/xfs/xfs_bmap_util.c
fs/xfs/xfs_bmap_util.c
+1
-1
fs/xfs/xfs_extent_busy.c
fs/xfs/xfs_extent_busy.c
+1
-1
fs/xfs/xfs_filestream.c
fs/xfs/xfs_filestream.c
+6
-3
fs/xfs/xfs_log_priv.h
fs/xfs/xfs_log_priv.h
+2
-1
fs/xfs/xfs_log_recover.c
fs/xfs/xfs_log_recover.c
+135
-56
fs/xfs/xfs_mount.c
fs/xfs/xfs_mount.c
+14
-0
fs/xfs/xfs_super.c
fs/xfs/xfs_super.c
+1
-1
fs/xfs/xfs_super.h
fs/xfs/xfs_super.h
+1
-0
fs/xfs/xfs_trace.h
fs/xfs/xfs_trace.h
+33
-6
No files found.
fs/xfs/libxfs/xfs_alloc.c
View file @
155cd433
...
...
@@ -258,7 +258,7 @@ xfs_alloc_compute_diff(
xfs_agblock_t
wantbno
,
/* target starting block */
xfs_extlen_t
wantlen
,
/* target length */
xfs_extlen_t
alignment
,
/* target alignment */
char
userdata
,
/* are we allocating data? */
int
datatype
,
/* are we allocating data? */
xfs_agblock_t
freebno
,
/* freespace's starting block */
xfs_extlen_t
freelen
,
/* freespace's length */
xfs_agblock_t
*
newbnop
)
/* result: best start block from free */
...
...
@@ -269,6 +269,7 @@ xfs_alloc_compute_diff(
xfs_extlen_t
newlen1
=
0
;
/* length with newbno1 */
xfs_extlen_t
newlen2
=
0
;
/* length with newbno2 */
xfs_agblock_t
wantend
;
/* end of target extent */
bool
userdata
=
xfs_alloc_is_userdata
(
datatype
);
ASSERT
(
freelen
>=
wantlen
);
freeend
=
freebno
+
freelen
;
...
...
@@ -924,7 +925,7 @@ xfs_alloc_find_best_extent(
sdiff
=
xfs_alloc_compute_diff
(
args
->
agbno
,
args
->
len
,
args
->
alignment
,
args
->
userdata
,
*
sbnoa
,
args
->
datatype
,
*
sbnoa
,
*
slena
,
&
new
);
/*
...
...
@@ -1108,7 +1109,7 @@ xfs_alloc_ag_vextent_near(
if
(
args
->
len
<
blen
)
continue
;
ltdiff
=
xfs_alloc_compute_diff
(
args
->
agbno
,
args
->
len
,
args
->
alignment
,
args
->
userdata
,
ltbnoa
,
args
->
alignment
,
args
->
datatype
,
ltbnoa
,
ltlena
,
&
ltnew
);
if
(
ltnew
!=
NULLAGBLOCK
&&
(
args
->
len
>
blen
||
ltdiff
<
bdiff
))
{
...
...
@@ -1261,7 +1262,7 @@ xfs_alloc_ag_vextent_near(
args
->
len
=
XFS_EXTLEN_MIN
(
ltlena
,
args
->
maxlen
);
xfs_alloc_fix_len
(
args
);
ltdiff
=
xfs_alloc_compute_diff
(
args
->
agbno
,
args
->
len
,
args
->
alignment
,
args
->
userdata
,
ltbnoa
,
args
->
alignment
,
args
->
datatype
,
ltbnoa
,
ltlena
,
&
ltnew
);
error
=
xfs_alloc_find_best_extent
(
args
,
...
...
@@ -1278,7 +1279,7 @@ xfs_alloc_ag_vextent_near(
args
->
len
=
XFS_EXTLEN_MIN
(
gtlena
,
args
->
maxlen
);
xfs_alloc_fix_len
(
args
);
gtdiff
=
xfs_alloc_compute_diff
(
args
->
agbno
,
args
->
len
,
args
->
alignment
,
args
->
userdata
,
gtbnoa
,
args
->
alignment
,
args
->
datatype
,
gtbnoa
,
gtlena
,
&
gtnew
);
error
=
xfs_alloc_find_best_extent
(
args
,
...
...
@@ -1338,7 +1339,7 @@ xfs_alloc_ag_vextent_near(
}
rlen
=
args
->
len
;
(
void
)
xfs_alloc_compute_diff
(
args
->
agbno
,
rlen
,
args
->
alignment
,
args
->
userdata
,
ltbnoa
,
ltlena
,
&
ltnew
);
args
->
datatype
,
ltbnoa
,
ltlena
,
&
ltnew
);
ASSERT
(
ltnew
>=
ltbno
);
ASSERT
(
ltnew
+
rlen
<=
ltbnoa
+
ltlena
);
ASSERT
(
ltnew
+
rlen
<=
be32_to_cpu
(
XFS_BUF_TO_AGF
(
args
->
agbp
)
->
agf_length
));
...
...
@@ -1617,9 +1618,9 @@ xfs_alloc_ag_vextent_small(
goto
error0
;
if
(
fbno
!=
NULLAGBLOCK
)
{
xfs_extent_busy_reuse
(
args
->
mp
,
args
->
agno
,
fbno
,
1
,
args
->
userdata
);
xfs_alloc_allow_busy_reuse
(
args
->
datatype
)
);
if
(
args
->
userdata
)
{
if
(
xfs_alloc_is_userdata
(
args
->
datatype
)
)
{
xfs_buf_t
*
bp
;
bp
=
xfs_btree_get_bufs
(
args
->
mp
,
args
->
tp
,
...
...
@@ -2099,7 +2100,7 @@ xfs_alloc_fix_freelist(
* somewhere else if we are not being asked to try harder at this
* point
*/
if
(
pag
->
pagf_metadata
&&
args
->
userdata
&&
if
(
pag
->
pagf_metadata
&&
xfs_alloc_is_userdata
(
args
->
datatype
)
&&
(
flags
&
XFS_ALLOC_FLAG_TRYLOCK
))
{
ASSERT
(
!
(
flags
&
XFS_ALLOC_FLAG_FREEING
));
goto
out_agbp_relse
;
...
...
@@ -2675,7 +2676,7 @@ xfs_alloc_vextent(
* Try near allocation first, then anywhere-in-ag after
* the first a.g. fails.
*/
if
((
args
->
userdata
&
XFS_ALLOC_INITIAL_USER_DATA
)
&&
if
((
args
->
datatype
&
XFS_ALLOC_INITIAL_USER_DATA
)
&&
(
mp
->
m_flags
&
XFS_MOUNT_32BITINODES
))
{
args
->
fsbno
=
XFS_AGB_TO_FSB
(
mp
,
((
mp
->
m_agfrotor
/
rotorstep
)
%
...
...
@@ -2808,7 +2809,7 @@ xfs_alloc_vextent(
#endif
/* Zero the extent if we were asked to do so */
if
(
args
->
userdata
&
XFS_ALLOC_USERDATA_ZERO
)
{
if
(
args
->
datatype
&
XFS_ALLOC_USERDATA_ZERO
)
{
error
=
xfs_zero_extent
(
args
->
ip
,
args
->
fsbno
,
args
->
len
);
if
(
error
)
goto
error0
;
...
...
fs/xfs/libxfs/xfs_alloc.h
View file @
155cd433
...
...
@@ -85,20 +85,33 @@ typedef struct xfs_alloc_arg {
xfs_extlen_t
len
;
/* output: actual size of extent */
xfs_alloctype_t
type
;
/* allocation type XFS_ALLOCTYPE_... */
xfs_alloctype_t
otype
;
/* original allocation type */
int
datatype
;
/* mask defining data type treatment */
char
wasdel
;
/* set if allocation was prev delayed */
char
wasfromfl
;
/* set if allocation is from freelist */
char
userdata
;
/* mask defining userdata treatment */
xfs_fsblock_t
firstblock
;
/* io first block allocated */
struct
xfs_owner_info
oinfo
;
/* owner of blocks being allocated */
enum
xfs_ag_resv_type
resv
;
/* block reservation to use */
}
xfs_alloc_arg_t
;
/*
* Defines for
userdata
* Defines for
datatype
*/
#define XFS_ALLOC_USERDATA (1 << 0)
/* allocation is for user data*/
#define XFS_ALLOC_INITIAL_USER_DATA (1 << 1)
/* special case start of file */
#define XFS_ALLOC_USERDATA_ZERO (1 << 2)
/* zero extent on allocation */
#define XFS_ALLOC_NOBUSY (1 << 3)
/* Busy extents not allowed */
static
inline
bool
xfs_alloc_is_userdata
(
int
datatype
)
{
return
(
datatype
&
~
XFS_ALLOC_NOBUSY
)
!=
0
;
}
static
inline
bool
xfs_alloc_allow_busy_reuse
(
int
datatype
)
{
return
(
datatype
&
XFS_ALLOC_NOBUSY
)
==
0
;
}
/* freespace limit calculations */
#define XFS_ALLOC_AGFL_RESERVE 4
...
...
fs/xfs/libxfs/xfs_bmap.c
View file @
155cd433
...
...
@@ -3348,7 +3348,8 @@ xfs_bmap_adjacent(
mp
=
ap
->
ip
->
i_mount
;
nullfb
=
*
ap
->
firstblock
==
NULLFSBLOCK
;
rt
=
XFS_IS_REALTIME_INODE
(
ap
->
ip
)
&&
ap
->
userdata
;
rt
=
XFS_IS_REALTIME_INODE
(
ap
->
ip
)
&&
xfs_alloc_is_userdata
(
ap
->
datatype
);
fb_agno
=
nullfb
?
NULLAGNUMBER
:
XFS_FSB_TO_AGNO
(
mp
,
*
ap
->
firstblock
);
/*
* If allocating at eof, and there's a previous real block,
...
...
@@ -3624,7 +3625,7 @@ xfs_bmap_btalloc(
{
xfs_mount_t
*
mp
;
/* mount point structure */
xfs_alloctype_t
atype
=
0
;
/* type for allocation routines */
xfs_extlen_t
align
;
/* minimum allocation alignment */
xfs_extlen_t
align
=
0
;
/* minimum allocation alignment */
xfs_agnumber_t
fb_agno
;
/* ag number of ap->firstblock */
xfs_agnumber_t
ag
;
xfs_alloc_arg_t
args
;
...
...
@@ -3647,7 +3648,8 @@ xfs_bmap_btalloc(
else
if
(
mp
->
m_dalign
)
stripe_align
=
mp
->
m_dalign
;
align
=
ap
->
userdata
?
xfs_get_extsz_hint
(
ap
->
ip
)
:
0
;
if
(
xfs_alloc_is_userdata
(
ap
->
datatype
))
align
=
xfs_get_extsz_hint
(
ap
->
ip
);
if
(
unlikely
(
align
))
{
error
=
xfs_bmap_extsize_align
(
mp
,
&
ap
->
got
,
&
ap
->
prev
,
align
,
0
,
ap
->
eof
,
0
,
ap
->
conv
,
...
...
@@ -3660,7 +3662,8 @@ xfs_bmap_btalloc(
nullfb
=
*
ap
->
firstblock
==
NULLFSBLOCK
;
fb_agno
=
nullfb
?
NULLAGNUMBER
:
XFS_FSB_TO_AGNO
(
mp
,
*
ap
->
firstblock
);
if
(
nullfb
)
{
if
(
ap
->
userdata
&&
xfs_inode_is_filestream
(
ap
->
ip
))
{
if
(
xfs_alloc_is_userdata
(
ap
->
datatype
)
&&
xfs_inode_is_filestream
(
ap
->
ip
))
{
ag
=
xfs_filestream_lookup_ag
(
ap
->
ip
);
ag
=
(
ag
!=
NULLAGNUMBER
)
?
ag
:
0
;
ap
->
blkno
=
XFS_AGB_TO_FSB
(
mp
,
ag
,
0
);
...
...
@@ -3700,7 +3703,8 @@ xfs_bmap_btalloc(
* enough for the request. If one isn't found, then adjust
* the minimum allocation size to the largest space found.
*/
if
(
ap
->
userdata
&&
xfs_inode_is_filestream
(
ap
->
ip
))
if
(
xfs_alloc_is_userdata
(
ap
->
datatype
)
&&
xfs_inode_is_filestream
(
ap
->
ip
))
error
=
xfs_bmap_btalloc_filestreams
(
ap
,
&
args
,
&
blen
);
else
error
=
xfs_bmap_btalloc_nullfb
(
ap
,
&
args
,
&
blen
);
...
...
@@ -3784,8 +3788,8 @@ xfs_bmap_btalloc(
args
.
minleft
=
ap
->
minleft
;
args
.
wasdel
=
ap
->
wasdel
;
args
.
resv
=
XFS_AG_RESV_NONE
;
args
.
userdata
=
ap
->
userdata
;
if
(
ap
->
userdata
&
XFS_ALLOC_USERDATA_ZERO
)
args
.
datatype
=
ap
->
datatype
;
if
(
ap
->
datatype
&
XFS_ALLOC_USERDATA_ZERO
)
args
.
ip
=
ap
->
ip
;
error
=
xfs_alloc_vextent
(
&
args
);
...
...
@@ -3879,7 +3883,8 @@ STATIC int
xfs_bmap_alloc
(
struct
xfs_bmalloca
*
ap
)
/* bmap alloc argument struct */
{
if
(
XFS_IS_REALTIME_INODE
(
ap
->
ip
)
&&
ap
->
userdata
)
if
(
XFS_IS_REALTIME_INODE
(
ap
->
ip
)
&&
xfs_alloc_is_userdata
(
ap
->
datatype
))
return
xfs_bmap_rtalloc
(
ap
);
return
xfs_bmap_btalloc
(
ap
);
}
...
...
@@ -4204,15 +4209,21 @@ xfs_bmapi_allocate(
}
/*
* Indicate if this is the first user data in the file, or just any
* user data. And if it is userdata, indicate whether it needs to
* be initialised to zero during allocation.
* Set the data type being allocated. For the data fork, the first data
* in the file is treated differently to all other allocations. For the
* attribute fork, we only need to ensure the allocated range is not on
* the busy list.
*/
if
(
!
(
bma
->
flags
&
XFS_BMAPI_METADATA
))
{
bma
->
userdata
=
(
bma
->
offset
==
0
)
?
XFS_ALLOC_INITIAL_USER_DATA
:
XFS_ALLOC_USERDATA
;
bma
->
datatype
=
XFS_ALLOC_NOBUSY
;
if
(
whichfork
==
XFS_DATA_FORK
)
{
if
(
bma
->
offset
==
0
)
bma
->
datatype
|=
XFS_ALLOC_INITIAL_USER_DATA
;
else
bma
->
datatype
|=
XFS_ALLOC_USERDATA
;
}
if
(
bma
->
flags
&
XFS_BMAPI_ZERO
)
bma
->
userdata
|=
XFS_ALLOC_USERDATA_ZERO
;
bma
->
datatype
|=
XFS_ALLOC_USERDATA_ZERO
;
}
bma
->
minlen
=
(
bma
->
flags
&
XFS_BMAPI_CONTIG
)
?
bma
->
length
:
1
;
...
...
@@ -4482,7 +4493,7 @@ xfs_bmapi_write(
bma
.
tp
=
tp
;
bma
.
ip
=
ip
;
bma
.
total
=
total
;
bma
.
userdata
=
0
;
bma
.
datatype
=
0
;
bma
.
dfops
=
dfops
;
bma
.
firstblock
=
firstblock
;
...
...
fs/xfs/libxfs/xfs_bmap.h
View file @
155cd433
...
...
@@ -54,7 +54,7 @@ struct xfs_bmalloca {
bool
wasdel
;
/* replacing a delayed allocation */
bool
aeof
;
/* allocated space at eof */
bool
conv
;
/* overwriting unwritten extents */
char
userdata
;
/* userdata mask
*/
int
datatype
;
/* data type being allocated
*/
int
flags
;
};
...
...
fs/xfs/xfs_bmap_util.c
View file @
155cd433
...
...
@@ -182,7 +182,7 @@ xfs_bmap_rtalloc(
XFS_TRANS_DQ_RTBCOUNT
,
(
long
)
ralen
);
/* Zero the extent if we were asked to do so */
if
(
ap
->
userdata
&
XFS_ALLOC_USERDATA_ZERO
)
{
if
(
ap
->
datatype
&
XFS_ALLOC_USERDATA_ZERO
)
{
error
=
xfs_zero_extent
(
ap
->
ip
,
ap
->
blkno
,
ap
->
length
);
if
(
error
)
return
error
;
...
...
fs/xfs/xfs_extent_busy.c
View file @
155cd433
...
...
@@ -384,7 +384,7 @@ xfs_extent_busy_trim(
* If this is a metadata allocation, try to reuse the busy
* extent instead of trimming the allocation.
*/
if
(
!
args
->
userdata
&&
if
(
!
xfs_alloc_is_userdata
(
args
->
datatype
)
&&
!
(
busyp
->
flags
&
XFS_EXTENT_BUSY_DISCARDED
))
{
if
(
!
xfs_extent_busy_update_extent
(
args
->
mp
,
args
->
pag
,
busyp
,
fbno
,
flen
,
...
...
fs/xfs/xfs_filestream.c
View file @
155cd433
...
...
@@ -371,7 +371,8 @@ xfs_filestream_new_ag(
struct
xfs_mount
*
mp
=
ip
->
i_mount
;
xfs_extlen_t
minlen
=
ap
->
length
;
xfs_agnumber_t
startag
=
0
;
int
flags
,
err
=
0
;
int
flags
=
0
;
int
err
=
0
;
struct
xfs_mru_cache_elem
*
mru
;
*
agp
=
NULLAGNUMBER
;
...
...
@@ -387,8 +388,10 @@ xfs_filestream_new_ag(
startag
=
(
item
->
ag
+
1
)
%
mp
->
m_sb
.
sb_agcount
;
}
flags
=
(
ap
->
userdata
?
XFS_PICK_USERDATA
:
0
)
|
(
ap
->
dfops
->
dop_low
?
XFS_PICK_LOWSPACE
:
0
);
if
(
xfs_alloc_is_userdata
(
ap
->
datatype
))
flags
|=
XFS_PICK_USERDATA
;
if
(
ap
->
dfops
->
dop_low
)
flags
|=
XFS_PICK_LOWSPACE
;
err
=
xfs_filestream_pick_ag
(
pip
,
startag
,
agp
,
flags
,
minlen
);
...
...
fs/xfs/xfs_log_priv.h
View file @
155cd433
...
...
@@ -413,7 +413,8 @@ struct xlog {
/* log record crc error injection factor */
uint32_t
l_badcrc_factor
;
#endif
/* log recovery lsn tracking (for buffer submission */
xfs_lsn_t
l_recovery_lsn
;
};
#define XLOG_BUF_CANCEL_BUCKET(log, blkno) \
...
...
fs/xfs/xfs_log_recover.c
View file @
155cd433
This diff is collapsed.
Click to expand it.
fs/xfs/xfs_mount.c
View file @
155cd433
...
...
@@ -933,6 +933,20 @@ xfs_mountfs(
goto
out_rtunmount
;
}
/*
* Now the log is fully replayed, we can transition to full read-only
* mode for read-only mounts. This will sync all the metadata and clean
* the log so that the recovery we just performed does not have to be
* replayed again on the next mount.
*
* We use the same quiesce mechanism as the rw->ro remount, as they are
* semantically identical operations.
*/
if
((
mp
->
m_flags
&
(
XFS_MOUNT_RDONLY
|
XFS_MOUNT_NORECOVERY
))
==
XFS_MOUNT_RDONLY
)
{
xfs_quiesce_attr
(
mp
);
}
/*
* Complete the quota initialisation, post-log-replay component.
*/
...
...
fs/xfs/xfs_super.c
View file @
155cd433
...
...
@@ -1137,7 +1137,7 @@ xfs_restore_resvblks(struct xfs_mount *mp)
* Note: xfs_log_quiesce() stops background log work - the callers must ensure
* it is started again when appropriate.
*/
static
void
void
xfs_quiesce_attr
(
struct
xfs_mount
*
mp
)
{
...
...
fs/xfs/xfs_super.h
View file @
155cd433
...
...
@@ -61,6 +61,7 @@ struct xfs_mount;
struct
xfs_buftarg
;
struct
block_device
;
extern
void
xfs_quiesce_attr
(
struct
xfs_mount
*
mp
);
extern
void
xfs_flush_inodes
(
struct
xfs_mount
*
mp
);
extern
void
xfs_blkdev_issue_flush
(
struct
xfs_buftarg
*
);
extern
xfs_agnumber_t
xfs_set_inode_alloc
(
struct
xfs_mount
*
,
...
...
fs/xfs/xfs_trace.h
View file @
155cd433
...
...
@@ -1624,7 +1624,7 @@ DECLARE_EVENT_CLASS(xfs_alloc_class,
__field
(
char
,
wasdel
)
__field
(
char
,
wasfromfl
)
__field
(
int
,
resv
)
__field
(
char
,
userdata
)
__field
(
int
,
datatype
)
__field
(
xfs_fsblock_t
,
firstblock
)
),
TP_fast_assign
(
...
...
@@ -1645,13 +1645,13 @@ DECLARE_EVENT_CLASS(xfs_alloc_class,
__entry
->
wasdel
=
args
->
wasdel
;
__entry
->
wasfromfl
=
args
->
wasfromfl
;
__entry
->
resv
=
args
->
resv
;
__entry
->
userdata
=
args
->
userdata
;
__entry
->
datatype
=
args
->
datatype
;
__entry
->
firstblock
=
args
->
firstblock
;
),
TP_printk
(
"dev %d:%d agno %u agbno %u minlen %u maxlen %u mod %u "
"prod %u minleft %u total %u alignment %u minalignslop %u "
"len %u type %s otype %s wasdel %d wasfromfl %d resv %d "
"
userdata %d
firstblock 0x%llx"
,
"
datatype 0x%x
firstblock 0x%llx"
,
MAJOR
(
__entry
->
dev
),
MINOR
(
__entry
->
dev
),
__entry
->
agno
,
__entry
->
agbno
,
...
...
@@ -1669,7 +1669,7 @@ DECLARE_EVENT_CLASS(xfs_alloc_class,
__entry
->
wasdel
,
__entry
->
wasfromfl
,
__entry
->
resv
,
__entry
->
userdata
,
__entry
->
datatype
,
(
unsigned
long
long
)
__entry
->
firstblock
)
)
...
...
@@ -1985,6 +1985,29 @@ DEFINE_EVENT(xfs_swap_extent_class, name, \
DEFINE_SWAPEXT_EVENT
(
xfs_swap_extent_before
);
DEFINE_SWAPEXT_EVENT
(
xfs_swap_extent_after
);
TRACE_EVENT
(
xfs_log_recover_record
,
TP_PROTO
(
struct
xlog
*
log
,
struct
xlog_rec_header
*
rhead
,
int
pass
),
TP_ARGS
(
log
,
rhead
,
pass
),
TP_STRUCT__entry
(
__field
(
dev_t
,
dev
)
__field
(
xfs_lsn_t
,
lsn
)
__field
(
int
,
len
)
__field
(
int
,
num_logops
)
__field
(
int
,
pass
)
),
TP_fast_assign
(
__entry
->
dev
=
log
->
l_mp
->
m_super
->
s_dev
;
__entry
->
lsn
=
be64_to_cpu
(
rhead
->
h_lsn
);
__entry
->
len
=
be32_to_cpu
(
rhead
->
h_len
);
__entry
->
num_logops
=
be32_to_cpu
(
rhead
->
h_num_logops
);
__entry
->
pass
=
pass
;
),
TP_printk
(
"dev %d:%d lsn 0x%llx len 0x%x num_logops 0x%x pass %d"
,
MAJOR
(
__entry
->
dev
),
MINOR
(
__entry
->
dev
),
__entry
->
lsn
,
__entry
->
len
,
__entry
->
num_logops
,
__entry
->
pass
)
)
DECLARE_EVENT_CLASS
(
xfs_log_recover_item_class
,
TP_PROTO
(
struct
xlog
*
log
,
struct
xlog_recover
*
trans
,
struct
xlog_recover_item
*
item
,
int
pass
),
...
...
@@ -1993,6 +2016,7 @@ DECLARE_EVENT_CLASS(xfs_log_recover_item_class,
__field
(
dev_t
,
dev
)
__field
(
unsigned
long
,
item
)
__field
(
xlog_tid_t
,
tid
)
__field
(
xfs_lsn_t
,
lsn
)
__field
(
int
,
type
)
__field
(
int
,
pass
)
__field
(
int
,
count
)
...
...
@@ -2002,15 +2026,17 @@ DECLARE_EVENT_CLASS(xfs_log_recover_item_class,
__entry
->
dev
=
log
->
l_mp
->
m_super
->
s_dev
;
__entry
->
item
=
(
unsigned
long
)
item
;
__entry
->
tid
=
trans
->
r_log_tid
;
__entry
->
lsn
=
trans
->
r_lsn
;
__entry
->
type
=
ITEM_TYPE
(
item
);
__entry
->
pass
=
pass
;
__entry
->
count
=
item
->
ri_cnt
;
__entry
->
total
=
item
->
ri_total
;
),
TP_printk
(
"dev %d:%d t
rans 0x%x, pass %d, item 0x%p, item type %s
"
"item region count/total %d/%d"
,
TP_printk
(
"dev %d:%d t
id 0x%x lsn 0x%llx, pass %d, item 0x%p,
"
"item
type %s item
region count/total %d/%d"
,
MAJOR
(
__entry
->
dev
),
MINOR
(
__entry
->
dev
),
__entry
->
tid
,
__entry
->
lsn
,
__entry
->
pass
,
(
void
*
)
__entry
->
item
,
__print_symbolic
(
__entry
->
type
,
XFS_LI_TYPE_DESC
),
...
...
@@ -2069,6 +2095,7 @@ DEFINE_LOG_RECOVER_BUF_ITEM(xfs_log_recover_buf_cancel);
DEFINE_LOG_RECOVER_BUF_ITEM
(
xfs_log_recover_buf_cancel_add
);
DEFINE_LOG_RECOVER_BUF_ITEM
(
xfs_log_recover_buf_cancel_ref_inc
);
DEFINE_LOG_RECOVER_BUF_ITEM
(
xfs_log_recover_buf_recover
);
DEFINE_LOG_RECOVER_BUF_ITEM
(
xfs_log_recover_buf_skip
);
DEFINE_LOG_RECOVER_BUF_ITEM
(
xfs_log_recover_buf_inode_buf
);
DEFINE_LOG_RECOVER_BUF_ITEM
(
xfs_log_recover_buf_reg_buf
);
DEFINE_LOG_RECOVER_BUF_ITEM
(
xfs_log_recover_buf_dquot_buf
);
...
...
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