CC: [email protected] BCC: [email protected] In-Reply-To: <1e09cf20ca9309f2b9daf57136c3e2c1b22f94f6.1652682383.git....@suse.com> References: <1e09cf20ca9309f2b9daf57136c3e2c1b22f94f6.1652682383.git....@suse.com> TO: Qu Wenruo <[email protected]> TO: [email protected]
Hi Qu, Thank you for the patch! Perhaps something to improve: [auto build test WARNING on kdave/for-next] [also build test WARNING on v5.18-rc7 next-20220517] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/intel-lab-lkp/linux/commits/Qu-Wenruo/btrfs-prevent-remounting-to-v1-space-cache-for-subpage-mount/20220516-142802 base: https://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git for-next :::::: branch date: 32 hours ago :::::: commit date: 32 hours ago config: i386-randconfig-m021-20220516 (https://download.01.org/0day-ci/archive/20220517/[email protected]/config) compiler: gcc-11 (Debian 11.2.0-20) 11.2.0 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> Reported-by: Dan Carpenter <[email protected]> smatch warnings: fs/btrfs/super.c:1994 btrfs_remount() warn: missing error code 'ret' vim +/ret +1994 fs/btrfs/super.c dc81cdc58ad2f4 Miao Xie 2013-02-20 1958 c146afad2c7fea Yan Zheng 2008-11-12 1959 static int btrfs_remount(struct super_block *sb, int *flags, char *data) c146afad2c7fea Yan Zheng 2008-11-12 1960 { 815745cf3e4668 Al Viro 2011-11-17 1961 struct btrfs_fs_info *fs_info = btrfs_sb(sb); 49b25e0540904b Jeff Mahoney 2012-03-01 1962 unsigned old_flags = sb->s_flags; 49b25e0540904b Jeff Mahoney 2012-03-01 1963 unsigned long old_opts = fs_info->mount_opt; 49b25e0540904b Jeff Mahoney 2012-03-01 1964 unsigned long old_compress_type = fs_info->compress_type; 49b25e0540904b Jeff Mahoney 2012-03-01 1965 u64 old_max_inline = fs_info->max_inline; f7b885befd05fa Anand Jain 2018-02-13 1966 u32 old_thread_pool_size = fs_info->thread_pool_size; d612ac59efc3b5 Anand Jain 2018-02-26 1967 u32 old_metadata_ratio = fs_info->metadata_ratio; c146afad2c7fea Yan Zheng 2008-11-12 1968 int ret; c146afad2c7fea Yan Zheng 2008-11-12 1969 02b9984d640873 Theodore Ts'o 2014-03-13 1970 sync_filesystem(sb); 88c4703f00a9e8 Johannes Thumshirn 2020-07-23 1971 set_bit(BTRFS_FS_STATE_REMOUNTING, &fs_info->fs_state); dc81cdc58ad2f4 Miao Xie 2013-02-20 1972 f667aef6af626d Qu Wenruo 2014-09-23 1973 if (data) { 204cc0ccf1d49c Al Viro 2018-12-13 1974 void *new_sec_opts = NULL; f667aef6af626d Qu Wenruo 2014-09-23 1975 a65001e8a4d465 Al Viro 2018-12-10 1976 ret = security_sb_eat_lsm_opts(data, &new_sec_opts); a65001e8a4d465 Al Viro 2018-12-10 1977 if (!ret) 204cc0ccf1d49c Al Viro 2018-12-13 1978 ret = security_sb_remount(sb, new_sec_opts); f667aef6af626d Qu Wenruo 2014-09-23 1979 security_free_mnt_opts(&new_sec_opts); a65001e8a4d465 Al Viro 2018-12-10 1980 if (ret) f667aef6af626d Qu Wenruo 2014-09-23 1981 goto restore; f667aef6af626d Qu Wenruo 2014-09-23 1982 } f667aef6af626d Qu Wenruo 2014-09-23 1983 2ff7e61e0d30ff Jeff Mahoney 2016-06-22 1984 ret = btrfs_parse_options(fs_info, data, *flags); 891f41cb27cf50 Chengguang Xu 2018-05-09 1985 if (ret) 49b25e0540904b Jeff Mahoney 2012-03-01 1986 goto restore; b288052e177926 Chris Mason 2009-02-12 1987 fd847878aa1f3c Qu Wenruo 2022-05-16 1988 /* V1 cache is not supported for subpage mount. */ fd847878aa1f3c Qu Wenruo 2022-05-16 1989 if (fs_info->sectorsize < PAGE_SIZE && fd847878aa1f3c Qu Wenruo 2022-05-16 1990 btrfs_test_opt(fs_info, SPACE_CACHE)) { fd847878aa1f3c Qu Wenruo 2022-05-16 1991 btrfs_warn(fs_info, fd847878aa1f3c Qu Wenruo 2022-05-16 1992 "v1 space cache is not supported for page size %lu with sectorsize %u", fd847878aa1f3c Qu Wenruo 2022-05-16 1993 PAGE_SIZE, fs_info->sectorsize); fd847878aa1f3c Qu Wenruo 2022-05-16 @1994 goto restore; fd847878aa1f3c Qu Wenruo 2022-05-16 1995 } f42a34b2f10c41 Miao Xie 2013-04-11 1996 btrfs_remount_begin(fs_info, old_opts, *flags); 0d2450abfa359f Sergei Trofimovich 2012-04-24 1997 btrfs_resize_thread_pool(fs_info, 0d2450abfa359f Sergei Trofimovich 2012-04-24 1998 fs_info->thread_pool_size, old_thread_pool_size); 0d2450abfa359f Sergei Trofimovich 2012-04-24 1999 c55a4319c4f2c3 Boris Burkov 2021-02-23 2000 if ((bool)btrfs_test_opt(fs_info, FREE_SPACE_TREE) != c55a4319c4f2c3 Boris Burkov 2021-02-23 2001 (bool)btrfs_fs_compat_ro(fs_info, FREE_SPACE_TREE) && 2838d255cb9b85 Boris Burkov 2020-11-18 2002 (!sb_rdonly(sb) || (*flags & SB_RDONLY))) { 2838d255cb9b85 Boris Burkov 2020-11-18 2003 btrfs_warn(fs_info, 2838d255cb9b85 Boris Burkov 2020-11-18 2004 "remount supports changing free space tree only from ro to rw"); 2838d255cb9b85 Boris Burkov 2020-11-18 2005 /* Make sure free space cache options match the state on disk */ 2838d255cb9b85 Boris Burkov 2020-11-18 2006 if (btrfs_fs_compat_ro(fs_info, FREE_SPACE_TREE)) { 2838d255cb9b85 Boris Burkov 2020-11-18 2007 btrfs_set_opt(fs_info->mount_opt, FREE_SPACE_TREE); 2838d255cb9b85 Boris Burkov 2020-11-18 2008 btrfs_clear_opt(fs_info->mount_opt, SPACE_CACHE); 2838d255cb9b85 Boris Burkov 2020-11-18 2009 } 2838d255cb9b85 Boris Burkov 2020-11-18 2010 if (btrfs_free_space_cache_v1_active(fs_info)) { 2838d255cb9b85 Boris Burkov 2020-11-18 2011 btrfs_clear_opt(fs_info->mount_opt, FREE_SPACE_TREE); 2838d255cb9b85 Boris Burkov 2020-11-18 2012 btrfs_set_opt(fs_info->mount_opt, SPACE_CACHE); 2838d255cb9b85 Boris Burkov 2020-11-18 2013 } 2838d255cb9b85 Boris Burkov 2020-11-18 2014 } 2838d255cb9b85 Boris Burkov 2020-11-18 2015 1751e8a6cb935e Linus Torvalds 2017-11-27 2016 if ((bool)(*flags & SB_RDONLY) == sb_rdonly(sb)) dc81cdc58ad2f4 Miao Xie 2013-02-20 2017 goto out; c146afad2c7fea Yan Zheng 2008-11-12 2018 1751e8a6cb935e Linus Torvalds 2017-11-27 2019 if (*flags & SB_RDONLY) { 8dabb7420f014a Stefan Behrens 2012-11-06 2020 /* 8dabb7420f014a Stefan Behrens 2012-11-06 2021 * this also happens on 'umount -rf' or on shutdown, when 8dabb7420f014a Stefan Behrens 2012-11-06 2022 * the filesystem is busy. 8dabb7420f014a Stefan Behrens 2012-11-06 2023 */ 21c7e75654b77b Miao Xie 2014-05-13 2024 cancel_work_sync(&fs_info->async_reclaim_work); 5705674081cee7 Josef Bacik 2020-07-21 2025 cancel_work_sync(&fs_info->async_data_reclaim_work); 361c093d7f99c3 Stefan Behrens 2013-10-11 2026 b0643e59cfa609 Dennis Zhou 2019-12-13 2027 btrfs_discard_cleanup(fs_info); b0643e59cfa609 Dennis Zhou 2019-12-13 2028 361c093d7f99c3 Stefan Behrens 2013-10-11 2029 /* wait for the uuid_scan task to finish */ 361c093d7f99c3 Stefan Behrens 2013-10-11 2030 down(&fs_info->uuid_tree_rescan_sem); 361c093d7f99c3 Stefan Behrens 2013-10-11 2031 /* avoid complains from lockdep et al. */ 361c093d7f99c3 Stefan Behrens 2013-10-11 2032 up(&fs_info->uuid_tree_rescan_sem); 361c093d7f99c3 Stefan Behrens 2013-10-11 2033 a0a1db70df5f48 Filipe Manana 2020-12-14 2034 btrfs_set_sb_rdonly(sb); c146afad2c7fea Yan Zheng 2008-11-12 2035 e44163e177960e Jeff Mahoney 2015-06-15 2036 /* 1751e8a6cb935e Linus Torvalds 2017-11-27 2037 * Setting SB_RDONLY will put the cleaner thread to e44163e177960e Jeff Mahoney 2015-06-15 2038 * sleep at the next loop if it's already active. e44163e177960e Jeff Mahoney 2015-06-15 2039 * If it's already asleep, we'll leave unused block e44163e177960e Jeff Mahoney 2015-06-15 2040 * groups on disk until we're mounted read-write again e44163e177960e Jeff Mahoney 2015-06-15 2041 * unless we clean them up here. e44163e177960e Jeff Mahoney 2015-06-15 2042 */ e44163e177960e Jeff Mahoney 2015-06-15 2043 btrfs_delete_unused_bgs(fs_info); e44163e177960e Jeff Mahoney 2015-06-15 2044 a0a1db70df5f48 Filipe Manana 2020-12-14 2045 /* a0a1db70df5f48 Filipe Manana 2020-12-14 2046 * The cleaner task could be already running before we set the a0a1db70df5f48 Filipe Manana 2020-12-14 2047 * flag BTRFS_FS_STATE_RO (and SB_RDONLY in the superblock). a0a1db70df5f48 Filipe Manana 2020-12-14 2048 * We must make sure that after we finish the remount, i.e. after a0a1db70df5f48 Filipe Manana 2020-12-14 2049 * we call btrfs_commit_super(), the cleaner can no longer start a0a1db70df5f48 Filipe Manana 2020-12-14 2050 * a transaction - either because it was dropping a dead root, a0a1db70df5f48 Filipe Manana 2020-12-14 2051 * running delayed iputs or deleting an unused block group (the a0a1db70df5f48 Filipe Manana 2020-12-14 2052 * cleaner picked a block group from the list of unused block a0a1db70df5f48 Filipe Manana 2020-12-14 2053 * groups before we were able to in the previous call to a0a1db70df5f48 Filipe Manana 2020-12-14 2054 * btrfs_delete_unused_bgs()). a0a1db70df5f48 Filipe Manana 2020-12-14 2055 */ a0a1db70df5f48 Filipe Manana 2020-12-14 2056 wait_on_bit(&fs_info->flags, BTRFS_FS_CLEANER_RUNNING, a0a1db70df5f48 Filipe Manana 2020-12-14 2057 TASK_UNINTERRUPTIBLE); a0a1db70df5f48 Filipe Manana 2020-12-14 2058 a8cc263eb58ca1 Filipe Manana 2020-12-14 2059 /* a8cc263eb58ca1 Filipe Manana 2020-12-14 2060 * We've set the superblock to RO mode, so we might have made a8cc263eb58ca1 Filipe Manana 2020-12-14 2061 * the cleaner task sleep without running all pending delayed a8cc263eb58ca1 Filipe Manana 2020-12-14 2062 * iputs. Go through all the delayed iputs here, so that if an a8cc263eb58ca1 Filipe Manana 2020-12-14 2063 * unmount happens without remounting RW we don't end up at a8cc263eb58ca1 Filipe Manana 2020-12-14 2064 * finishing close_ctree() with a non-empty list of delayed a8cc263eb58ca1 Filipe Manana 2020-12-14 2065 * iputs. a8cc263eb58ca1 Filipe Manana 2020-12-14 2066 */ a8cc263eb58ca1 Filipe Manana 2020-12-14 2067 btrfs_run_delayed_iputs(fs_info); a8cc263eb58ca1 Filipe Manana 2020-12-14 2068 8dabb7420f014a Stefan Behrens 2012-11-06 2069 btrfs_dev_replace_suspend_for_unmount(fs_info); 8dabb7420f014a Stefan Behrens 2012-11-06 2070 btrfs_scrub_cancel(fs_info); 061594ef171a5b Miao Xie 2013-05-15 2071 btrfs_pause_balance(fs_info); 8dabb7420f014a Stefan Behrens 2012-11-06 2072 cb13eea3b49055 Filipe Manana 2020-12-14 2073 /* cb13eea3b49055 Filipe Manana 2020-12-14 2074 * Pause the qgroup rescan worker if it is running. We don't want cb13eea3b49055 Filipe Manana 2020-12-14 2075 * it to be still running after we are in RO mode, as after that, cb13eea3b49055 Filipe Manana 2020-12-14 2076 * by the time we unmount, it might have left a transaction open, cb13eea3b49055 Filipe Manana 2020-12-14 2077 * so we would leak the transaction and/or crash. cb13eea3b49055 Filipe Manana 2020-12-14 2078 */ cb13eea3b49055 Filipe Manana 2020-12-14 2079 btrfs_qgroup_wait_for_completion(fs_info, false); cb13eea3b49055 Filipe Manana 2020-12-14 2080 6bccf3ab1e1f09 Jeff Mahoney 2016-06-21 2081 ret = btrfs_commit_super(fs_info); 49b25e0540904b Jeff Mahoney 2012-03-01 2082 if (ret) 49b25e0540904b Jeff Mahoney 2012-03-01 2083 goto restore; c146afad2c7fea Yan Zheng 2008-11-12 2084 } else { 849615394515cc Josef Bacik 2021-10-05 2085 if (BTRFS_FS_ERROR(fs_info)) { 6ef3de9c9252b1 David Sterba 2013-09-13 2086 btrfs_err(fs_info, efe120a067c867 Frank Holton 2013-12-20 2087 "Remounting read-write after error is not allowed"); 6ef3de9c9252b1 David Sterba 2013-09-13 2088 ret = -EINVAL; 6ef3de9c9252b1 David Sterba 2013-09-13 2089 goto restore; 6ef3de9c9252b1 David Sterba 2013-09-13 2090 } 8a3db1849e9e25 Sergei Trofimovich 2012-04-16 2091 if (fs_info->fs_devices->rw_devices == 0) { 49b25e0540904b Jeff Mahoney 2012-03-01 2092 ret = -EACCES; 49b25e0540904b Jeff Mahoney 2012-03-01 2093 goto restore; 8a3db1849e9e25 Sergei Trofimovich 2012-04-16 2094 } 2b82032c34ec40 Yan Zheng 2008-11-17 2095 6528b99d3d2079 Anand Jain 2017-12-18 2096 if (!btrfs_check_rw_degradable(fs_info, NULL)) { efe120a067c867 Frank Holton 2013-12-20 2097 btrfs_warn(fs_info, 52042d8e82ff50 Andrea Gelmini 2018-11-28 2098 "too many missing devices, writable remount is not allowed"); 292fd7fc39aa06 Stefan Behrens 2012-10-30 2099 ret = -EACCES; 292fd7fc39aa06 Stefan Behrens 2012-10-30 2100 goto restore; 292fd7fc39aa06 Stefan Behrens 2012-10-30 2101 } 292fd7fc39aa06 Stefan Behrens 2012-10-30 2102 8a3db1849e9e25 Sergei Trofimovich 2012-04-16 2103 if (btrfs_super_log_root(fs_info->super_copy) != 0) { 10a3a3edc5b89a David Sterba 2020-02-05 2104 btrfs_warn(fs_info, 10a3a3edc5b89a David Sterba 2020-02-05 2105 "mount required to replay tree-log, cannot remount read-write"); 49b25e0540904b Jeff Mahoney 2012-03-01 2106 ret = -EINVAL; 49b25e0540904b Jeff Mahoney 2012-03-01 2107 goto restore; 8a3db1849e9e25 Sergei Trofimovich 2012-04-16 2108 } c146afad2c7fea Yan Zheng 2008-11-12 2109 44c0ca211a4da9 Boris Burkov 2020-11-18 2110 /* 44c0ca211a4da9 Boris Burkov 2020-11-18 2111 * NOTE: when remounting with a change that does writes, don't 44c0ca211a4da9 Boris Burkov 2020-11-18 2112 * put it anywhere above this point, as we are not sure to be 44c0ca211a4da9 Boris Burkov 2020-11-18 2113 * safe to write until we pass the above checks. 44c0ca211a4da9 Boris Burkov 2020-11-18 2114 */ 44c0ca211a4da9 Boris Burkov 2020-11-18 2115 ret = btrfs_start_pre_rw_mount(fs_info); 2b6ba629b5aac5 Ilya Dryomov 2012-06-22 2116 if (ret) 2b6ba629b5aac5 Ilya Dryomov 2012-06-22 2117 goto restore; 2b6ba629b5aac5 Ilya Dryomov 2012-06-22 2118 a0a1db70df5f48 Filipe Manana 2020-12-14 2119 btrfs_clear_sb_rdonly(sb); 90c711ab380d63 Zygo Blaxell 2016-06-12 2120 afcdd129e05a92 Josef Bacik 2016-09-02 2121 set_bit(BTRFS_FS_OPEN, &fs_info->flags); c146afad2c7fea Yan Zheng 2008-11-12 2122 } dc81cdc58ad2f4 Miao Xie 2013-02-20 2123 out: faa008899a4db2 Josef Bacik 2020-07-30 2124 /* faa008899a4db2 Josef Bacik 2020-07-30 2125 * We need to set SB_I_VERSION here otherwise it'll get cleared by VFS, faa008899a4db2 Josef Bacik 2020-07-30 2126 * since the absence of the flag means it can be toggled off by remount. faa008899a4db2 Josef Bacik 2020-07-30 2127 */ faa008899a4db2 Josef Bacik 2020-07-30 2128 *flags |= SB_I_VERSION; faa008899a4db2 Josef Bacik 2020-07-30 2129 2c6a92b0097464 Justin Maggard 2014-02-20 2130 wake_up_process(fs_info->transaction_kthread); dc81cdc58ad2f4 Miao Xie 2013-02-20 2131 btrfs_remount_cleanup(fs_info, old_opts); 8cd2908846d11a Boris Burkov 2020-11-18 2132 btrfs_clear_oneshot_options(fs_info); 88c4703f00a9e8 Johannes Thumshirn 2020-07-23 2133 clear_bit(BTRFS_FS_STATE_REMOUNTING, &fs_info->fs_state); 88c4703f00a9e8 Johannes Thumshirn 2020-07-23 2134 c146afad2c7fea Yan Zheng 2008-11-12 2135 return 0; 49b25e0540904b Jeff Mahoney 2012-03-01 2136 49b25e0540904b Jeff Mahoney 2012-03-01 2137 restore: 1751e8a6cb935e Linus Torvalds 2017-11-27 2138 /* We've hit an error - don't reset SB_RDONLY */ bc98a42c1f7d0f David Howells 2017-07-17 2139 if (sb_rdonly(sb)) 1751e8a6cb935e Linus Torvalds 2017-11-27 2140 old_flags |= SB_RDONLY; a0a1db70df5f48 Filipe Manana 2020-12-14 2141 if (!(old_flags & SB_RDONLY)) a0a1db70df5f48 Filipe Manana 2020-12-14 2142 clear_bit(BTRFS_FS_STATE_RO, &fs_info->fs_state); 49b25e0540904b Jeff Mahoney 2012-03-01 2143 sb->s_flags = old_flags; 49b25e0540904b Jeff Mahoney 2012-03-01 2144 fs_info->mount_opt = old_opts; 49b25e0540904b Jeff Mahoney 2012-03-01 2145 fs_info->compress_type = old_compress_type; 49b25e0540904b Jeff Mahoney 2012-03-01 2146 fs_info->max_inline = old_max_inline; 0d2450abfa359f Sergei Trofimovich 2012-04-24 2147 btrfs_resize_thread_pool(fs_info, 0d2450abfa359f Sergei Trofimovich 2012-04-24 2148 old_thread_pool_size, fs_info->thread_pool_size); 49b25e0540904b Jeff Mahoney 2012-03-01 2149 fs_info->metadata_ratio = old_metadata_ratio; dc81cdc58ad2f4 Miao Xie 2013-02-20 2150 btrfs_remount_cleanup(fs_info, old_opts); 88c4703f00a9e8 Johannes Thumshirn 2020-07-23 2151 clear_bit(BTRFS_FS_STATE_REMOUNTING, &fs_info->fs_state); 88c4703f00a9e8 Johannes Thumshirn 2020-07-23 2152 49b25e0540904b Jeff Mahoney 2012-03-01 2153 return ret; c146afad2c7fea Yan Zheng 2008-11-12 2154 } c146afad2c7fea Yan Zheng 2008-11-12 2155 -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
