On Fri, Sep 15, 2023 at 03:57:56PM +0300, Dan Carpenter wrote:
> Hello Kent Overstreet,
>
> The patch e0750d947352: "bcachefs: Initial commit" from Mar 16, 2017
> (linux-next), leads to the following Smatch static checker warning:
>
> fs/bcachefs/fs-io.c:1013 bch2_seek_hole()
> warn: error code type promoted to positive: 'next_hole'
>
> fs/bcachefs/fs-io.c
> 977 static loff_t bch2_seek_hole(struct file *file, u64 offset)
> 978 {
> 979 struct bch_inode_info *inode = file_bch_inode(file);
> 980 struct bch_fs *c = inode->v.i_sb->s_fs_info;
> 981 struct btree_trans *trans;
> 982 struct btree_iter iter;
> 983 struct bkey_s_c k;
> 984 subvol_inum inum = inode_inum(inode);
> 985 u64 isize, next_hole = MAX_LFS_FILESIZE;
> 986 u32 snapshot;
> 987 int ret;
> 988
> 989 isize = i_size_read(&inode->v);
> 990 if (offset >= isize)
> 991 return -ENXIO;
> 992
> 993 trans = bch2_trans_get(c);
> 994 retry:
> 995 bch2_trans_begin(trans);
> 996
> 997 ret = bch2_subvolume_get_snapshot(trans, inum.subvol,
> &snapshot);
> 998 if (ret)
> 999 goto err;
> 1000
> 1001 for_each_btree_key_norestart(trans, iter, BTREE_ID_extents,
> 1002 SPOS(inode->v.i_ino, offset >> 9,
> snapshot),
> 1003 BTREE_ITER_SLOTS, k, ret) {
> 1004 if (k.k->p.inode != inode->v.i_ino) {
> 1005 next_hole =
> bch2_seek_pagecache_hole(&inode->v,
> 1006 offset, MAX_LFS_FILESIZE, 0,
> false);
> 1007 break;
> 1008 } else if (!bkey_extent_is_data(k.k)) {
> 1009 next_hole =
> bch2_seek_pagecache_hole(&inode->v,
> 1010 max(offset,
> bkey_start_offset(k.k) << 9),
> 1011 k.k->p.offset << 9, 0,
> false);
> 1012
>
> bch2_seek_pagecache_hole returns llof_t. Negatives on error. This code
> has no error checking?
It doesn't return an error.