Hello Andreas Gruenbacher,
The patch 8f18190e3173: "gfs2: Use mapping->gfp_mask for metadata
inodes" from Jul 26, 2023 (linux-next), leads to the following Smatch
static checker warning:
fs/gfs2/inode.c:286 gfs2_lookup_simple()
error: 'inode' dereferencing possible ERR_PTR()
fs/gfs2/inode.c
268 struct inode *gfs2_lookup_simple(struct inode *dip, const char *name)
269 {
270 struct qstr qstr;
271 struct inode *inode;
272 gfs2_str2qstr(&qstr, name);
273 inode = gfs2_lookupi(dip, &qstr, 1);
274 /* gfs2_lookupi has inconsistent callers: vfs
275 * related routines expect NULL for no entry found,
276 * gfs2_lookup_simple callers expect ENOENT
277 * and do not check for NULL.
This comment is ancient. I think how gfs2_lookupi() works is that if
there is an error it returns an error code, but if the file does not
exist it returns NULL. (This is just based on vague assumptions about
how mixed error pointer/NULL functions work).
278 */
279 if (inode == NULL)
280 return ERR_PTR(-ENOENT);
281
282 /*
283 * Must not call back into the filesystem when allocating
284 * pages in the metadata inode's address space.
285 */
--> 286 mapping_set_gfp_mask(inode->i_mapping, GFP_NOFS);
^^^^^^^^^^^^^^^^
error pointer dereference
287
288 return inode;
289 }
regards,
dan carpenter