gfs2: Get rid of gfs2_ea_strlen
authorAndreas Gruenbacher <agruenba@redhat.com>
Fri, 3 Aug 2018 09:57:52 +0000 (10:57 +0100)
committerAndreas Gruenbacher <agruenba@redhat.com>
Fri, 3 Aug 2018 12:20:02 +0000 (13:20 +0100)
Function gfs2_ea_strlen is only called from ea_list_i, so inline it
there.  Remove the duplicate switch statement and the creative use of
memcpy to set a null byte.

Signed-off-by: Andreas Gruenbacher <agruenba@redhat.com>
Reviewed-by: Andrew Price <anprice@redhat.com>
Reviewed-by: Bob Peterson <rpeterso@redhat.com>
fs/gfs2/xattr.c

index f2bce1e0f6fb5ee04f15a21356df99bda32c027e..38515988aaf746efb426674cc3f431d582ca523f 100644 (file)
@@ -343,60 +343,45 @@ struct ea_list {
        unsigned int ei_size;
 };
 
-static inline unsigned int gfs2_ea_strlen(struct gfs2_ea_header *ea)
-{
-       switch (ea->ea_type) {
-       case GFS2_EATYPE_USR:
-               return 5 + ea->ea_name_len + 1;
-       case GFS2_EATYPE_SYS:
-               return 7 + ea->ea_name_len + 1;
-       case GFS2_EATYPE_SECURITY:
-               return 9 + ea->ea_name_len + 1;
-       default:
-               return 0;
-       }
-}
-
 static int ea_list_i(struct gfs2_inode *ip, struct buffer_head *bh,
                     struct gfs2_ea_header *ea, struct gfs2_ea_header *prev,
                     void *private)
 {
        struct ea_list *ei = private;
        struct gfs2_ea_request *er = ei->ei_er;
-       unsigned int ea_size = gfs2_ea_strlen(ea);
+       unsigned int ea_size;
+       char *prefix;
+       unsigned int l;
 
        if (ea->ea_type == GFS2_EATYPE_UNUSED)
                return 0;
 
-       if (er->er_data_len) {
-               char *prefix = NULL;
-               unsigned int l = 0;
-               char c = 0;
+       switch (ea->ea_type) {
+       case GFS2_EATYPE_USR:
+               prefix = "user.";
+               l = 5;
+               break;
+       case GFS2_EATYPE_SYS:
+               prefix = "system.";
+               l = 7;
+               break;
+       case GFS2_EATYPE_SECURITY:
+               prefix = "security.";
+               l = 9;
+               break;
+       default:
+               BUG();
+       }
 
+       ea_size = l + ea->ea_name_len + 1;
+       if (er->er_data_len) {
                if (ei->ei_size + ea_size > er->er_data_len)
                        return -ERANGE;
 
-               switch (ea->ea_type) {
-               case GFS2_EATYPE_USR:
-                       prefix = "user.";
-                       l = 5;
-                       break;
-               case GFS2_EATYPE_SYS:
-                       prefix = "system.";
-                       l = 7;
-                       break;
-               case GFS2_EATYPE_SECURITY:
-                       prefix = "security.";
-                       l = 9;
-                       break;
-               }
-
-               BUG_ON(l == 0);
-
                memcpy(er->er_data + ei->ei_size, prefix, l);
                memcpy(er->er_data + ei->ei_size + l, GFS2_EA2NAME(ea),
                       ea->ea_name_len);
-               memcpy(er->er_data + ei->ei_size + ea_size - 1, &c, 1);
+               er->er_data[ei->ei_size + ea_size - 1] = 0;
        }
 
        ei->ei_size += ea_size;