* [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.