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

Reply via email to