This patch adds a couple error messages to document when extended
attributes have errors in function check_eattr_entries. It also
refactors some of the code to make it more readable.
rhbz#1257625
---
gfs2/fsck/pass1.c | 28 +++++++++++++++++-----------
1 file changed, 17 insertions(+), 11 deletions(-)
diff --git a/gfs2/fsck/pass1.c b/gfs2/fsck/pass1.c
index a554845..aa31815 100644
--- a/gfs2/fsck/pass1.c
+++ b/gfs2/fsck/pass1.c
@@ -891,6 +891,8 @@ static int check_eattr_entries(struct gfs2_inode *ip,
{
struct gfs2_sbd *sdp = ip->i_sbd;
char ea_name[256];
+ uint32_t avail_size;
+ int max_ptrs;
if (!ea_hdr->ea_name_len){
/* Skip this entry for now */
@@ -904,22 +906,26 @@ static int check_eattr_entries(struct gfs2_inode *ip,
if (!GFS2_EATYPE_VALID(ea_hdr->ea_type) &&
((ea_hdr_prev) || (!ea_hdr_prev && ea_hdr->ea_type))){
/* Skip invalid entry */
+ log_err(_("EA (%s) type is invalid (%d > %d).\n"),
+ ea_name, ea_hdr->ea_type, GFS2_EATYPE_LAST);
return 1;
}
- if (ea_hdr->ea_num_ptrs){
- uint32_t avail_size;
- int max_ptrs;
+ if (!ea_hdr->ea_num_ptrs)
+ return 0;
- avail_size = sdp->sd_sb.sb_bsize - sizeof(struct
gfs2_meta_header);
- max_ptrs =
(be32_to_cpu(ea_hdr->ea_data_len)+avail_size-1)/avail_size;
+ avail_size = sdp->sd_sb.sb_bsize - sizeof(struct gfs2_meta_header);
+ max_ptrs = (be32_to_cpu(ea_hdr->ea_data_len)+avail_size-1)/avail_size;
- if (max_ptrs > ea_hdr->ea_num_ptrs) {
- return 1;
- } else {
- log_debug( _(" Pointers Required: %d\n Pointers
Reported: %d\n"),
- max_ptrs, ea_hdr->ea_num_ptrs);
- }
+ if (max_ptrs > ea_hdr->ea_num_ptrs) {
+ log_err(_("EA (%s) has incorrect number of pointers.\n"),
+ ea_name);
+ log_err(_(" Required: %d\n Reported: %d\n"),
+ max_ptrs, ea_hdr->ea_num_ptrs);
+ return 1;
+ } else {
+ log_debug( _(" Pointers Required: %d\n Pointers Reported:
%d\n"),
+ max_ptrs, ea_hdr->ea_num_ptrs);
}
return 0;
}
--
2.4.3