Hi Joanne, kernel test robot noticed the following build warnings: [auto build test WARNING on mszeredi-fuse/for-next] [also build test WARNING on akpm-mm/mm-everything linus/master v6.16-rc4 next-20250703] [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#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Joanne-Koong/mm-remove-BDI_CAP_WRITEBACK_ACCT/20250704-004813 base: https://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse.git for-next patch link: https://lore.kernel.org/r/20250703164556.1576674-1-joannelkoong%40gmail.com patch subject: [PATCH v1 1/2] fuse: use default writeback accounting config: microblaze-randconfig-r073-20250704 (https://download.01.org/0day-ci/archive/20250704/202507042032.MdzNkWm3-lkp@xxxxxxxxx/config) compiler: microblaze-linux-gcc (GCC) 8.5.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250704/202507042032.MdzNkWm3-lkp@xxxxxxxxx/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@xxxxxxxxx> | Closes: https://lore.kernel.org/oe-kbuild-all/202507042032.MdzNkWm3-lkp@xxxxxxxxx/ All warnings (new ones prefixed by >>): fs/fuse/file.c: In function 'fuse_writepage_finish': >> fs/fuse/file.c:1787:27: warning: unused variable 'bdi' [-Wunused-variable] struct backing_dev_info *bdi = inode_to_bdi(inode); ^~~ fs/fuse/file.c: In function 'fuse_writepage_args_page_fill': >> fs/fuse/file.c:1982:16: warning: unused variable 'inode' [-Wunused-variable] struct inode *inode = folio->mapping->host; ^~~~~ vim +/bdi +1787 fs/fuse/file.c 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1781 509a6458b44f72 Joanne Koong 2024-08-26 1782 static void fuse_writepage_finish(struct fuse_writepage_args *wpa) 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1783 { 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1784 struct fuse_args_pages *ap = &wpa->ia.ap; 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1785 struct inode *inode = wpa->inode; 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1786 struct fuse_inode *fi = get_fuse_inode(inode); 0c58a97f919c24 Joanne Koong 2025-04-14 @1787 struct backing_dev_info *bdi = inode_to_bdi(inode); 385b126815d927 Pavel Emelyanov 2013-06-29 1788 int i; 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1789 ef2027c20ad4a6 Joanne Koong 2025-07-03 1790 for (i = 0; i < ap->num_folios; i++) 0c58a97f919c24 Joanne Koong 2025-04-14 1791 /* 0c58a97f919c24 Joanne Koong 2025-04-14 1792 * Benchmarks showed that ending writeback within the 0c58a97f919c24 Joanne Koong 2025-04-14 1793 * scope of the fi->lock alleviates xarray lock 0c58a97f919c24 Joanne Koong 2025-04-14 1794 * contention and noticeably improves performance. 0c58a97f919c24 Joanne Koong 2025-04-14 1795 */ 0c58a97f919c24 Joanne Koong 2025-04-14 1796 folio_end_writeback(ap->folios[i]); c04e3b21181923 Joanne Koong 2024-08-26 1797 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1798 wake_up(&fi->page_waitq); 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1799 } 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1800 f15ecfef058d94 Kirill Tkhai 2018-11-09 1801 /* Called under fi->lock, may release and reacquire it */ fcee216beb9c15 Max Reitz 2020-05-06 1802 static void fuse_send_writepage(struct fuse_mount *fm, 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1803 struct fuse_writepage_args *wpa, loff_t size) f15ecfef058d94 Kirill Tkhai 2018-11-09 1804 __releases(fi->lock) f15ecfef058d94 Kirill Tkhai 2018-11-09 1805 __acquires(fi->lock) 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1806 { 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1807 struct fuse_inode *fi = get_fuse_inode(wpa->inode); ff7c3ee4842d87 Joanne Koong 2025-05-12 1808 struct fuse_args_pages *ap = &wpa->ia.ap; 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1809 struct fuse_write_in *inarg = &wpa->ia.write.in; ff7c3ee4842d87 Joanne Koong 2025-05-12 1810 struct fuse_args *args = &ap->args; ff7c3ee4842d87 Joanne Koong 2025-05-12 1811 __u64 data_size = 0; ff7c3ee4842d87 Joanne Koong 2025-05-12 1812 int err, i; ff7c3ee4842d87 Joanne Koong 2025-05-12 1813 ff7c3ee4842d87 Joanne Koong 2025-05-12 1814 for (i = 0; i < ap->num_folios; i++) ff7c3ee4842d87 Joanne Koong 2025-05-12 1815 data_size += ap->descs[i].length; 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1816 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1817 fi->writectr++; 385b126815d927 Pavel Emelyanov 2013-06-29 1818 if (inarg->offset + data_size <= size) { 385b126815d927 Pavel Emelyanov 2013-06-29 1819 inarg->size = data_size; 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1820 } else if (inarg->offset < size) { 385b126815d927 Pavel Emelyanov 2013-06-29 1821 inarg->size = size - inarg->offset; 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1822 } else { 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1823 /* Got truncated off completely */ 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1824 goto out_free; 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1825 } 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1826 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1827 args->in_args[1].size = inarg->size; 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1828 args->force = true; 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1829 args->nocreds = true; 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1830 fcee216beb9c15 Max Reitz 2020-05-06 1831 err = fuse_simple_background(fm, args, GFP_ATOMIC); 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1832 if (err == -ENOMEM) { 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1833 spin_unlock(&fi->lock); fcee216beb9c15 Max Reitz 2020-05-06 1834 err = fuse_simple_background(fm, args, GFP_NOFS | __GFP_NOFAIL); 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1835 spin_lock(&fi->lock); 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1836 } 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1837 f15ecfef058d94 Kirill Tkhai 2018-11-09 1838 /* Fails on broken connection only */ 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1839 if (unlikely(err)) f15ecfef058d94 Kirill Tkhai 2018-11-09 1840 goto out_free; f15ecfef058d94 Kirill Tkhai 2018-11-09 1841 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1842 return; 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1843 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1844 out_free: 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1845 fi->writectr--; 509a6458b44f72 Joanne Koong 2024-08-26 1846 fuse_writepage_finish(wpa); f15ecfef058d94 Kirill Tkhai 2018-11-09 1847 spin_unlock(&fi->lock); 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1848 fuse_writepage_free(wpa); f15ecfef058d94 Kirill Tkhai 2018-11-09 1849 spin_lock(&fi->lock); 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1850 } 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1851 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1852 /* 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1853 * If fi->writectr is positive (no truncate or fsync going on) send 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1854 * all queued writepage requests. 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1855 * f15ecfef058d94 Kirill Tkhai 2018-11-09 1856 * Called with fi->lock 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1857 */ 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1858 void fuse_flush_writepages(struct inode *inode) f15ecfef058d94 Kirill Tkhai 2018-11-09 1859 __releases(fi->lock) f15ecfef058d94 Kirill Tkhai 2018-11-09 1860 __acquires(fi->lock) 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1861 { fcee216beb9c15 Max Reitz 2020-05-06 1862 struct fuse_mount *fm = get_fuse_mount(inode); 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1863 struct fuse_inode *fi = get_fuse_inode(inode); 9de5be06d0a89c Miklos Szeredi 2019-04-24 1864 loff_t crop = i_size_read(inode); 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1865 struct fuse_writepage_args *wpa; 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1866 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1867 while (fi->writectr >= 0 && !list_empty(&fi->queued_writes)) { 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1868 wpa = list_entry(fi->queued_writes.next, 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1869 struct fuse_writepage_args, queue_entry); 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1870 list_del_init(&wpa->queue_entry); fcee216beb9c15 Max Reitz 2020-05-06 1871 fuse_send_writepage(fm, wpa, crop); 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1872 } 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1873 } 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1874 fcee216beb9c15 Max Reitz 2020-05-06 1875 static void fuse_writepage_end(struct fuse_mount *fm, struct fuse_args *args, 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1876 int error) 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1877 { 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1878 struct fuse_writepage_args *wpa = 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1879 container_of(args, typeof(*wpa), ia.ap.args); 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1880 struct inode *inode = wpa->inode; 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1881 struct fuse_inode *fi = get_fuse_inode(inode); 3466958beb31a8 Vivek Goyal 2021-04-06 1882 struct fuse_conn *fc = get_fuse_conn(inode); 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1883 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1884 mapping_set_error(inode->i_mapping, error); 3466958beb31a8 Vivek Goyal 2021-04-06 1885 /* 3466958beb31a8 Vivek Goyal 2021-04-06 1886 * A writeback finished and this might have updated mtime/ctime on 3466958beb31a8 Vivek Goyal 2021-04-06 1887 * server making local mtime/ctime stale. Hence invalidate attrs. 3466958beb31a8 Vivek Goyal 2021-04-06 1888 * Do this only if writeback_cache is not enabled. If writeback_cache 3466958beb31a8 Vivek Goyal 2021-04-06 1889 * is enabled, we trust local ctime/mtime. 3466958beb31a8 Vivek Goyal 2021-04-06 1890 */ 3466958beb31a8 Vivek Goyal 2021-04-06 1891 if (!fc->writeback_cache) fa5eee57e33e79 Miklos Szeredi 2021-10-22 1892 fuse_invalidate_attr_mask(inode, FUSE_STATX_MODIFY); f15ecfef058d94 Kirill Tkhai 2018-11-09 1893 spin_lock(&fi->lock); 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1894 fi->writectr--; 509a6458b44f72 Joanne Koong 2024-08-26 1895 fuse_writepage_finish(wpa); f15ecfef058d94 Kirill Tkhai 2018-11-09 1896 spin_unlock(&fi->lock); 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1897 fuse_writepage_free(wpa); 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1898 } 3be5a52b30aa5c Miklos Szeredi 2008-04-30 1899 a9667ac88e2b20 Miklos Szeredi 2021-09-01 1900 static struct fuse_file *__fuse_write_file_get(struct fuse_inode *fi) adcadfa8f373f3 Pavel Emelyanov 2013-06-29 1901 { 84840efc3c0f22 Miklos Szeredi 2021-10-22 1902 struct fuse_file *ff; adcadfa8f373f3 Pavel Emelyanov 2013-06-29 1903 f15ecfef058d94 Kirill Tkhai 2018-11-09 1904 spin_lock(&fi->lock); 84840efc3c0f22 Miklos Szeredi 2021-10-22 1905 ff = list_first_entry_or_null(&fi->write_files, struct fuse_file, 72523425fb434e Miklos Szeredi 2013-10-01 1906 write_entry); 84840efc3c0f22 Miklos Szeredi 2021-10-22 1907 if (ff) adcadfa8f373f3 Pavel Emelyanov 2013-06-29 1908 fuse_file_get(ff); f15ecfef058d94 Kirill Tkhai 2018-11-09 1909 spin_unlock(&fi->lock); adcadfa8f373f3 Pavel Emelyanov 2013-06-29 1910 adcadfa8f373f3 Pavel Emelyanov 2013-06-29 1911 return ff; adcadfa8f373f3 Pavel Emelyanov 2013-06-29 1912 } adcadfa8f373f3 Pavel Emelyanov 2013-06-29 1913 a9667ac88e2b20 Miklos Szeredi 2021-09-01 1914 static struct fuse_file *fuse_write_file_get(struct fuse_inode *fi) 1e18bda86e2dcc Miklos Szeredi 2014-04-28 1915 { a9667ac88e2b20 Miklos Szeredi 2021-09-01 1916 struct fuse_file *ff = __fuse_write_file_get(fi); 1e18bda86e2dcc Miklos Szeredi 2014-04-28 1917 WARN_ON(!ff); 1e18bda86e2dcc Miklos Szeredi 2014-04-28 1918 return ff; 1e18bda86e2dcc Miklos Szeredi 2014-04-28 1919 } 1e18bda86e2dcc Miklos Szeredi 2014-04-28 1920 1e18bda86e2dcc Miklos Szeredi 2014-04-28 1921 int fuse_write_inode(struct inode *inode, struct writeback_control *wbc) 1e18bda86e2dcc Miklos Szeredi 2014-04-28 1922 { 1e18bda86e2dcc Miklos Szeredi 2014-04-28 1923 struct fuse_inode *fi = get_fuse_inode(inode); 1e18bda86e2dcc Miklos Szeredi 2014-04-28 1924 struct fuse_file *ff; 1e18bda86e2dcc Miklos Szeredi 2014-04-28 1925 int err; 1e18bda86e2dcc Miklos Szeredi 2014-04-28 1926 5c791fe1e2a4f4 Miklos Szeredi 2021-10-22 1927 /* 5c791fe1e2a4f4 Miklos Szeredi 2021-10-22 1928 * Inode is always written before the last reference is dropped and 5c791fe1e2a4f4 Miklos Szeredi 2021-10-22 1929 * hence this should not be reached from reclaim. 5c791fe1e2a4f4 Miklos Szeredi 2021-10-22 1930 * 5c791fe1e2a4f4 Miklos Szeredi 2021-10-22 1931 * Writing back the inode from reclaim can deadlock if the request 5c791fe1e2a4f4 Miklos Szeredi 2021-10-22 1932 * processing itself needs an allocation. Allocations triggering 5c791fe1e2a4f4 Miklos Szeredi 2021-10-22 1933 * reclaim while serving a request can't be prevented, because it can 5c791fe1e2a4f4 Miklos Szeredi 2021-10-22 1934 * involve any number of unrelated userspace processes. 5c791fe1e2a4f4 Miklos Szeredi 2021-10-22 1935 */ 5c791fe1e2a4f4 Miklos Szeredi 2021-10-22 1936 WARN_ON(wbc->for_reclaim); 5c791fe1e2a4f4 Miklos Szeredi 2021-10-22 1937 a9667ac88e2b20 Miklos Szeredi 2021-09-01 1938 ff = __fuse_write_file_get(fi); ab9e13f7c771b5 Maxim Patlasov 2014-04-28 1939 err = fuse_flush_times(inode, ff); 1e18bda86e2dcc Miklos Szeredi 2014-04-28 1940 if (ff) e26ee4efbc7961 Amir Goldstein 2024-02-01 1941 fuse_file_put(ff, false); 1e18bda86e2dcc Miklos Szeredi 2014-04-28 1942 1e18bda86e2dcc Miklos Szeredi 2014-04-28 1943 return err; 1e18bda86e2dcc Miklos Szeredi 2014-04-28 1944 } 1e18bda86e2dcc Miklos Szeredi 2014-04-28 1945 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1946 static struct fuse_writepage_args *fuse_writepage_args_alloc(void) 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1947 { 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1948 struct fuse_writepage_args *wpa; 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1949 struct fuse_args_pages *ap; 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1950 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1951 wpa = kzalloc(sizeof(*wpa), GFP_NOFS); 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1952 if (wpa) { 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1953 ap = &wpa->ia.ap; cbe9c115b7441d Joanne Koong 2024-10-24 1954 ap->num_folios = 0; 68bfb7eb7f7de3 Joanne Koong 2024-10-24 1955 ap->folios = fuse_folios_alloc(1, GFP_NOFS, &ap->descs); cbe9c115b7441d Joanne Koong 2024-10-24 1956 if (!ap->folios) { 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1957 kfree(wpa); 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1958 wpa = NULL; 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1959 } 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1960 } 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1961 return wpa; 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1962 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1963 } 33826ebbbe4b45 Miklos Szeredi 2019-09-10 1964 660585b56e63ca Miklos Szeredi 2021-09-01 1965 static void fuse_writepage_add_to_bucket(struct fuse_conn *fc, 660585b56e63ca Miklos Szeredi 2021-09-01 1966 struct fuse_writepage_args *wpa) 660585b56e63ca Miklos Szeredi 2021-09-01 1967 { 660585b56e63ca Miklos Szeredi 2021-09-01 1968 if (!fc->sync_fs) 660585b56e63ca Miklos Szeredi 2021-09-01 1969 return; 660585b56e63ca Miklos Szeredi 2021-09-01 1970 660585b56e63ca Miklos Szeredi 2021-09-01 1971 rcu_read_lock(); 660585b56e63ca Miklos Szeredi 2021-09-01 1972 /* Prevent resurrection of dead bucket in unlikely race with syncfs */ 660585b56e63ca Miklos Szeredi 2021-09-01 1973 do { 660585b56e63ca Miklos Szeredi 2021-09-01 1974 wpa->bucket = rcu_dereference(fc->curr_bucket); 660585b56e63ca Miklos Szeredi 2021-09-01 1975 } while (unlikely(!atomic_inc_not_zero(&wpa->bucket->count))); 660585b56e63ca Miklos Szeredi 2021-09-01 1976 rcu_read_unlock(); 660585b56e63ca Miklos Szeredi 2021-09-01 1977 } 660585b56e63ca Miklos Szeredi 2021-09-01 1978 0acad9289be33d Joanne Koong 2024-08-26 1979 static void fuse_writepage_args_page_fill(struct fuse_writepage_args *wpa, struct folio *folio, 0c58a97f919c24 Joanne Koong 2025-04-14 1980 uint32_t folio_index) 0acad9289be33d Joanne Koong 2024-08-26 1981 { 0acad9289be33d Joanne Koong 2024-08-26 @1982 struct inode *inode = folio->mapping->host; 0acad9289be33d Joanne Koong 2024-08-26 1983 struct fuse_args_pages *ap = &wpa->ia.ap; 0acad9289be33d Joanne Koong 2024-08-26 1984 0c58a97f919c24 Joanne Koong 2025-04-14 1985 ap->folios[folio_index] = folio; 68bfb7eb7f7de3 Joanne Koong 2024-10-24 1986 ap->descs[folio_index].offset = 0; f3cb8bd908c72e Joanne Koong 2025-05-12 1987 ap->descs[folio_index].length = folio_size(folio); 0acad9289be33d Joanne Koong 2024-08-26 1988 } 0acad9289be33d Joanne Koong 2024-08-26 1989 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki