All of lore.kernel.org
 help / color / mirror / Atom feed
* [Cluster-devel] [bug report] [GFS2] The core of GFS2
@ 2018-07-11 12:18 Dan Carpenter
  2018-07-11 12:35 ` Steven Whitehouse
  0 siblings, 1 reply; 2+ messages in thread
From: Dan Carpenter @ 2018-07-11 12:18 UTC (permalink / raw)
  To: cluster-devel.redhat.com

Hello David Teigland,

The patch b3b94faa5fe5: "[GFS2] The core of GFS2" from Jan 16, 2006,
leads to the following static checker warning:

	fs/gfs2/dir.c:1104 dir_split_leaf()
	warn: 'new' can also be NULL

fs/gfs2/dir.c
  1083          /*  Copy the entries  */
  1084          dent = (struct gfs2_dirent *)(obh->b_data + sizeof(struct gfs2_leaf));
  1085  
  1086          do {
  1087                  next = dent;
  1088                  if (dirent_next(dip, obh, &next))
  1089                          next = NULL;
  1090  
  1091                  if (!gfs2_dirent_sentinel(dent) &&
  1092                      be32_to_cpu(dent->de_hash) < divider) {
  1093                          struct qstr str;
  1094                          void *ptr = ((char *)dent - obh->b_data) + nbh->b_data;
  1095                          str.name = (char*)(dent+1);
  1096                          str.len = be16_to_cpu(dent->de_name_len);
  1097                          str.hash = be32_to_cpu(dent->de_hash);
  1098                          new = gfs2_dirent_split_alloc(inode, nbh, &str, ptr);
                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
This returns both NULL and error pointers.  There is no documentation
so I have no idea what the the returns mean.

  1099                          if (IS_ERR(new)) {
  1100                                  error = PTR_ERR(new);
  1101                                  break;
  1102                          }
  1103  
  1104                          new->de_inum = dent->de_inum; /* No endian worries */
  1105                          new->de_type = dent->de_type; /* No endian worries */
  1106                          be16_add_cpu(&nleaf->lf_entries, 1);
  1107  
  1108                          dirent_del(dip, obh, prev, dent);
  1109  
  1110                          if (!oleaf->lf_entries)
  1111                                  gfs2_consist_inode(dip);
  1112                          be16_add_cpu(&oleaf->lf_entries, -1);
  1113  
  1114                          if (!prev)
  1115                                  prev = dent;
  1116  
  1117                          moved = 1;
  1118                  } else {
  1119                          prev = dent;
  1120                  }
  1121                  dent = next;
  1122          } while (dent);
  1123  

regards,
dan carpenter



^ permalink raw reply	[flat|nested] 2+ messages in thread

* [Cluster-devel] [bug report] [GFS2] The core of GFS2
  2018-07-11 12:18 [Cluster-devel] [bug report] [GFS2] The core of GFS2 Dan Carpenter
@ 2018-07-11 12:35 ` Steven Whitehouse
  0 siblings, 0 replies; 2+ messages in thread
From: Steven Whitehouse @ 2018-07-11 12:35 UTC (permalink / raw)
  To: cluster-devel.redhat.com

Hi,


On 11/07/18 13:18, Dan Carpenter wrote:
> Hello David Teigland,
>
> The patch b3b94faa5fe5: "[GFS2] The core of GFS2" from Jan 16, 2006,
> leads to the following static checker warning:
>
> 	fs/gfs2/dir.c:1104 dir_split_leaf()
> 	warn: 'new' can also be NULL
>
> fs/gfs2/dir.c
>    1083          /*  Copy the entries  */
>    1084          dent = (struct gfs2_dirent *)(obh->b_data + sizeof(struct gfs2_leaf));
>    1085
>    1086          do {
>    1087                  next = dent;
>    1088                  if (dirent_next(dip, obh, &next))
>    1089                          next = NULL;
>    1090
>    1091                  if (!gfs2_dirent_sentinel(dent) &&
>    1092                      be32_to_cpu(dent->de_hash) < divider) {
>    1093                          struct qstr str;
>    1094                          void *ptr = ((char *)dent - obh->b_data) + nbh->b_data;
>    1095                          str.name = (char*)(dent+1);
>    1096                          str.len = be16_to_cpu(dent->de_name_len);
>    1097                          str.hash = be32_to_cpu(dent->de_hash);
>    1098                          new = gfs2_dirent_split_alloc(inode, nbh, &str, ptr);
>                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> This returns both NULL and error pointers.  There is no documentation
> so I have no idea what the the returns mean.
That can only happen in case the gfs2_dirent_scan does not find any free 
space. Since the leaf block has been split immediately before we run 
gfs2_dirent_scan, it can only happen if something has come along and 
stomped on the newly split leaf block, which should be impossible, so it 
looks like a false positive to me,

Steve.

>
>    1099                          if (IS_ERR(new)) {
>    1100                                  error = PTR_ERR(new);
>    1101                                  break;
>    1102                          }
>    1103
>    1104                          new->de_inum = dent->de_inum; /* No endian worries */
>    1105                          new->de_type = dent->de_type; /* No endian worries */
>    1106                          be16_add_cpu(&nleaf->lf_entries, 1);
>    1107
>    1108                          dirent_del(dip, obh, prev, dent);
>    1109
>    1110                          if (!oleaf->lf_entries)
>    1111                                  gfs2_consist_inode(dip);
>    1112                          be16_add_cpu(&oleaf->lf_entries, -1);
>    1113
>    1114                          if (!prev)
>    1115                                  prev = dent;
>    1116
>    1117                          moved = 1;
>    1118                  } else {
>    1119                          prev = dent;
>    1120                  }
>    1121                  dent = next;
>    1122          } while (dent);
>    1123
>
> regards,
> dan carpenter
>



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2018-07-11 12:35 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-07-11 12:18 [Cluster-devel] [bug report] [GFS2] The core of GFS2 Dan Carpenter
2018-07-11 12:35 ` Steven Whitehouse

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.