Merge tag 'fixes_for_v6.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/jack...
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 20 Feb 2023 20:44:08 +0000 (12:44 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 20 Feb 2023 20:44:08 +0000 (12:44 -0800)
Pull UDF and ext2 fixes from Jan Kara:

 - Rewrite of udf directory iteration code to address multiple syzbot
   reports

 - Fixes to udf extent handling and block mapping code to address
   several syzbot reports and filesystem corruption issues uncovered by
   fsx & fsstress

 - Convert udf to kmap_local()

 - Add sanity checks when loading udf bitmaps

 - Drop old VARCONV support which I've never seen used and which was
   broken for quite some years without anybody noticing

 - Finish conversion of ext2 to kmap_local()

 - One fix to mpage_writepages() on which other udf fixes depend

* tag 'fixes_for_v6.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs: (78 commits)
  udf: Avoid directory type conversion failure due to ENOMEM
  udf: Use unsigned variables for size calculations
  udf: remove reporting loc in debug output
  udf: Check consistency of Space Bitmap Descriptor
  udf: Fix file counting in LVID
  udf: Limit file size to 4TB
  udf: Don't return bh from udf_expand_dir_adinicb()
  udf: Convert udf_expand_file_adinicb() to avoid kmap_atomic()
  udf: Convert udf_adinicb_writepage() to memcpy_to_page()
  udf: Switch udf_adinicb_readpage() to kmap_local_page()
  udf: Move udf_adinicb_readpage() to inode.c
  udf: Mark aops implementation static
  udf: Switch to single address_space_operations
  udf: Add handling of in-ICB files to udf_bmap()
  udf: Convert all file types to use udf_write_end()
  udf: Convert in-ICB files to use udf_write_begin()
  udf: Convert in-ICB files to use udf_direct_IO()
  udf: Convert in-ICB files to use udf_writepages()
  udf: Unify .read_folio for normal and in-ICB files
  udf: Fix off-by-one error when discarding preallocation
  ...

1  2 
fs/ext2/ext2.h
fs/ext2/namei.c
fs/udf/file.c
fs/udf/ialloc.c
fs/udf/namei.c
fs/udf/symlink.c

diff --cc fs/ext2/ext2.h
Simple merge
diff --cc fs/ext2/namei.c
Simple merge
diff --cc fs/udf/file.c
Simple merge
diff --cc fs/udf/ialloc.c
index e78a859d13e333133d884b97b93ee44015b1510e,ffd9ccbce0d0649ec6ecacdfad3b9ee871c5684e..8d50121778a57d585c789bae43ddee17581eacad
@@@ -92,20 -77,10 +77,10 @@@ struct inode *udf_new_inode(struct inod
                return ERR_PTR(err);
        }
  
-       lvidiu = udf_sb_lvidiu(sb);
-       if (lvidiu) {
-               iinfo->i_unique = lvid_get_unique_id(sb);
-               inode->i_generation = iinfo->i_unique;
-               mutex_lock(&sbi->s_alloc_mutex);
-               if (S_ISDIR(mode))
-                       le32_add_cpu(&lvidiu->numDirs, 1);
-               else
-                       le32_add_cpu(&lvidiu->numFiles, 1);
-               udf_updated_lvid(sb);
-               mutex_unlock(&sbi->s_alloc_mutex);
-       }
+       iinfo->i_unique = lvid_get_unique_id(sb);
+       inode->i_generation = iinfo->i_unique;
  
 -      inode_init_owner(&init_user_ns, inode, dir, mode);
 +      inode_init_owner(&nop_mnt_idmap, inode, dir, mode);
        if (UDF_QUERY_FLAG(sb, UDF_FLAG_UID_SET))
                inode->i_uid = sbi->s_uid;
        if (UDF_QUERY_FLAG(sb, UDF_FLAG_GID_SET))
diff --cc fs/udf/namei.c
index bdba2206a678db66600ea45e86df40c4475be3cb,55b0d78a581fcd306b8244cb2395f5cfb788a313..fd20423d3ed24c9349e7e153f9afaca8f41371df
@@@ -869,19 -562,16 +562,16 @@@ static int udf_unlink(struct inode *dir
        dir->i_ctime = dir->i_mtime = current_time(dir);
        mark_inode_dirty(dir);
        inode_dec_link_count(inode);
+       udf_add_fid_counter(dir->i_sb, false, -1);
        inode->i_ctime = dir->i_ctime;
-       retval = 0;
+       ret = 0;
  end_unlink:
-       if (fibh.sbh != fibh.ebh)
-               brelse(fibh.ebh);
-       brelse(fibh.sbh);
+       udf_fiiter_release(&iter);
  out:
-       return retval;
+       return ret;
  }
  
 -static int udf_symlink(struct user_namespace *mnt_userns, struct inode *dir,
 +static int udf_symlink(struct mnt_idmap *idmap, struct inode *dir,
                       struct dentry *dentry, const char *symname)
  {
        struct inode *inode = udf_new_inode(dir, S_IFLNK | 0777);
Simple merge