lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Message-ID: <202104302043.QTwjFznm-lkp@intel.com>
Date:   Fri, 30 Apr 2021 20:03:00 +0800
From:   kernel test robot <lkp@...el.com>
To:     "Matthew Wilcox (Oracle)" <willy@...radead.org>
Cc:     kbuild-all@...ts.01.org, clang-built-linux@...glegroups.com,
        linux-kernel@...r.kernel.org,
        Andrew Morton <akpm@...ux-foundation.org>,
        Linux Memory Management List <linux-mm@...ck.org>
Subject: fs/ntfs/file.c:1727:16: warning: stack frame size of 4064 bytes in
 function 'ntfs_perform_write'

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   8ca5297e7e38f2dc8c753d33a5092e7be181fff0
commit: 0060ef3b4e6dd1410da164d48a595eadb2fb02f7 mm: support THPs in zero_user_segments
date:   5 months ago
config: powerpc-randconfig-r023-20210430 (attached as .config)
compiler: clang version 13.0.0 (https://github.com/llvm/llvm-project 8f5a2a5836cc8e4c1def2bdeb022e7b496623439)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install powerpc cross compiling tool for clang build
        # apt-get install binutils-powerpc-linux-gnu
        # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=0060ef3b4e6dd1410da164d48a595eadb2fb02f7
        git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout 0060ef3b4e6dd1410da164d48a595eadb2fb02f7
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 ARCH=powerpc 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@...el.com>

All warnings (new ones prefixed by >>):

   arch/powerpc/include/asm/io-defs.h:45:1: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   DEF_PCI_AC_NORET(insw, (unsigned long p, void *b, unsigned long c),
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   arch/powerpc/include/asm/io.h:601:3: note: expanded from macro 'DEF_PCI_AC_NORET'
                   __do_##name al;                                 \
                   ^~~~~~~~~~~~~~
   <scratch space>:109:1: note: expanded from here
   __do_insw
   ^
   arch/powerpc/include/asm/io.h:542:56: note: expanded from macro '__do_insw'
   #define __do_insw(p, b, n)      readsw((PCI_IO_ADDR)_IO_BASE+(p), (b), (n))
                                          ~~~~~~~~~~~~~~~~~~~~~^
   In file included from fs/ntfs/file.c:8:
   In file included from include/linux/backing-dev.h:15:
   In file included from include/linux/blkdev.h:14:
   In file included from include/linux/pagemap.h:11:
   In file included from include/linux/highmem.h:10:
   In file included from include/linux/hardirq.h:10:
   In file included from arch/powerpc/include/asm/hardirq.h:6:
   In file included from include/linux/irq.h:20:
   In file included from include/linux/io.h:13:
   In file included from arch/powerpc/include/asm/io.h:604:
   arch/powerpc/include/asm/io-defs.h:47:1: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   DEF_PCI_AC_NORET(insl, (unsigned long p, void *b, unsigned long c),
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   arch/powerpc/include/asm/io.h:601:3: note: expanded from macro 'DEF_PCI_AC_NORET'
                   __do_##name al;                                 \
                   ^~~~~~~~~~~~~~
   <scratch space>:113:1: note: expanded from here
   __do_insl
   ^
   arch/powerpc/include/asm/io.h:543:56: note: expanded from macro '__do_insl'
   #define __do_insl(p, b, n)      readsl((PCI_IO_ADDR)_IO_BASE+(p), (b), (n))
                                          ~~~~~~~~~~~~~~~~~~~~~^
   In file included from fs/ntfs/file.c:8:
   In file included from include/linux/backing-dev.h:15:
   In file included from include/linux/blkdev.h:14:
   In file included from include/linux/pagemap.h:11:
   In file included from include/linux/highmem.h:10:
   In file included from include/linux/hardirq.h:10:
   In file included from arch/powerpc/include/asm/hardirq.h:6:
   In file included from include/linux/irq.h:20:
   In file included from include/linux/io.h:13:
   In file included from arch/powerpc/include/asm/io.h:604:
   arch/powerpc/include/asm/io-defs.h:49:1: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   DEF_PCI_AC_NORET(outsb, (unsigned long p, const void *b, unsigned long c),
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   arch/powerpc/include/asm/io.h:601:3: note: expanded from macro 'DEF_PCI_AC_NORET'
                   __do_##name al;                                 \
                   ^~~~~~~~~~~~~~
   <scratch space>:117:1: note: expanded from here
   __do_outsb
   ^
   arch/powerpc/include/asm/io.h:544:58: note: expanded from macro '__do_outsb'
   #define __do_outsb(p, b, n)     writesb((PCI_IO_ADDR)_IO_BASE+(p),(b),(n))
                                           ~~~~~~~~~~~~~~~~~~~~~^
   In file included from fs/ntfs/file.c:8:
   In file included from include/linux/backing-dev.h:15:
   In file included from include/linux/blkdev.h:14:
   In file included from include/linux/pagemap.h:11:
   In file included from include/linux/highmem.h:10:
   In file included from include/linux/hardirq.h:10:
   In file included from arch/powerpc/include/asm/hardirq.h:6:
   In file included from include/linux/irq.h:20:
   In file included from include/linux/io.h:13:
   In file included from arch/powerpc/include/asm/io.h:604:
   arch/powerpc/include/asm/io-defs.h:51:1: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   DEF_PCI_AC_NORET(outsw, (unsigned long p, const void *b, unsigned long c),
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   arch/powerpc/include/asm/io.h:601:3: note: expanded from macro 'DEF_PCI_AC_NORET'
                   __do_##name al;                                 \
                   ^~~~~~~~~~~~~~
   <scratch space>:121:1: note: expanded from here
   __do_outsw
   ^
   arch/powerpc/include/asm/io.h:545:58: note: expanded from macro '__do_outsw'
   #define __do_outsw(p, b, n)     writesw((PCI_IO_ADDR)_IO_BASE+(p),(b),(n))
                                           ~~~~~~~~~~~~~~~~~~~~~^
   In file included from fs/ntfs/file.c:8:
   In file included from include/linux/backing-dev.h:15:
   In file included from include/linux/blkdev.h:14:
   In file included from include/linux/pagemap.h:11:
   In file included from include/linux/highmem.h:10:
   In file included from include/linux/hardirq.h:10:
   In file included from arch/powerpc/include/asm/hardirq.h:6:
   In file included from include/linux/irq.h:20:
   In file included from include/linux/io.h:13:
   In file included from arch/powerpc/include/asm/io.h:604:
   arch/powerpc/include/asm/io-defs.h:53:1: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
   DEF_PCI_AC_NORET(outsl, (unsigned long p, const void *b, unsigned long c),
   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   arch/powerpc/include/asm/io.h:601:3: note: expanded from macro 'DEF_PCI_AC_NORET'
                   __do_##name al;                                 \
                   ^~~~~~~~~~~~~~
   <scratch space>:125:1: note: expanded from here
   __do_outsl
   ^
   arch/powerpc/include/asm/io.h:546:58: note: expanded from macro '__do_outsl'
   #define __do_outsl(p, b, n)     writesl((PCI_IO_ADDR)_IO_BASE+(p),(b),(n))
                                           ~~~~~~~~~~~~~~~~~~~~~^
>> fs/ntfs/file.c:1727:16: warning: stack frame size of 4064 bytes in function 'ntfs_perform_write' [-Wframe-larger-than=]
   static ssize_t ntfs_perform_write(struct file *file, struct iov_iter *i,
                  ^
   13 warnings generated.


vim +/ntfs_perform_write +1727 fs/ntfs/file.c

9014da7525dffe Marco Stornelli    2012-12-15  1720  
98b270362bb9ea Anton Altaparmakov 2005-10-11  1721  /**
a632f559304130 Anton Altaparmakov 2015-03-11  1722   * ntfs_perform_write - perform buffered write to a file
a632f559304130 Anton Altaparmakov 2015-03-11  1723   * @file:	file to write to
a632f559304130 Anton Altaparmakov 2015-03-11  1724   * @i:		iov_iter with data to write
a632f559304130 Anton Altaparmakov 2015-03-11  1725   * @pos:	byte offset in file at which to begin writing to
98b270362bb9ea Anton Altaparmakov 2005-10-11  1726   */
a632f559304130 Anton Altaparmakov 2015-03-11 @1727  static ssize_t ntfs_perform_write(struct file *file, struct iov_iter *i,
a632f559304130 Anton Altaparmakov 2015-03-11  1728  		loff_t pos)
98b270362bb9ea Anton Altaparmakov 2005-10-11  1729  {
98b270362bb9ea Anton Altaparmakov 2005-10-11  1730  	struct address_space *mapping = file->f_mapping;
98b270362bb9ea Anton Altaparmakov 2005-10-11  1731  	struct inode *vi = mapping->host;
98b270362bb9ea Anton Altaparmakov 2005-10-11  1732  	ntfs_inode *ni = NTFS_I(vi);
98b270362bb9ea Anton Altaparmakov 2005-10-11  1733  	ntfs_volume *vol = ni->vol;
98b270362bb9ea Anton Altaparmakov 2005-10-11  1734  	struct page *pages[NTFS_MAX_PAGES_PER_CLUSTER];
98b270362bb9ea Anton Altaparmakov 2005-10-11  1735  	struct page *cached_page = NULL;
98b270362bb9ea Anton Altaparmakov 2005-10-11  1736  	VCN last_vcn;
98b270362bb9ea Anton Altaparmakov 2005-10-11  1737  	LCN lcn;
a632f559304130 Anton Altaparmakov 2015-03-11  1738  	size_t bytes;
a632f559304130 Anton Altaparmakov 2015-03-11  1739  	ssize_t status, written = 0;
98b270362bb9ea Anton Altaparmakov 2005-10-11  1740  	unsigned nr_pages;
98b270362bb9ea Anton Altaparmakov 2005-10-11  1741  
a632f559304130 Anton Altaparmakov 2015-03-11  1742  	ntfs_debug("Entering for i_ino 0x%lx, attribute type 0x%x, pos "
a632f559304130 Anton Altaparmakov 2015-03-11  1743  			"0x%llx, count 0x%lx.", vi->i_ino,
a632f559304130 Anton Altaparmakov 2015-03-11  1744  			(unsigned)le32_to_cpu(ni->type),
a632f559304130 Anton Altaparmakov 2015-03-11  1745  			(unsigned long long)pos,
a632f559304130 Anton Altaparmakov 2015-03-11  1746  			(unsigned long)iov_iter_count(i));
98b270362bb9ea Anton Altaparmakov 2005-10-11  1747  	/*
98b270362bb9ea Anton Altaparmakov 2005-10-11  1748  	 * If a previous ntfs_truncate() failed, repeat it and abort if it
98b270362bb9ea Anton Altaparmakov 2005-10-11  1749  	 * fails again.
98b270362bb9ea Anton Altaparmakov 2005-10-11  1750  	 */
98b270362bb9ea Anton Altaparmakov 2005-10-11  1751  	if (unlikely(NInoTruncateFailed(ni))) {
a632f559304130 Anton Altaparmakov 2015-03-11  1752  		int err;
a632f559304130 Anton Altaparmakov 2015-03-11  1753  
bd5fe6c5eb9c54 Christoph Hellwig  2011-06-24  1754  		inode_dio_wait(vi);
98b270362bb9ea Anton Altaparmakov 2005-10-11  1755  		err = ntfs_truncate(vi);
98b270362bb9ea Anton Altaparmakov 2005-10-11  1756  		if (err || NInoTruncateFailed(ni)) {
98b270362bb9ea Anton Altaparmakov 2005-10-11  1757  			if (!err)
98b270362bb9ea Anton Altaparmakov 2005-10-11  1758  				err = -EIO;
98b270362bb9ea Anton Altaparmakov 2005-10-11  1759  			ntfs_error(vol->sb, "Cannot perform write to inode "
98b270362bb9ea Anton Altaparmakov 2005-10-11  1760  					"0x%lx, attribute type 0x%x, because "
98b270362bb9ea Anton Altaparmakov 2005-10-11  1761  					"ntfs_truncate() failed (error code "
98b270362bb9ea Anton Altaparmakov 2005-10-11  1762  					"%i).", vi->i_ino,
98b270362bb9ea Anton Altaparmakov 2005-10-11  1763  					(unsigned)le32_to_cpu(ni->type), err);
98b270362bb9ea Anton Altaparmakov 2005-10-11  1764  			return err;
98b270362bb9ea Anton Altaparmakov 2005-10-11  1765  		}
98b270362bb9ea Anton Altaparmakov 2005-10-11  1766  	}
98b270362bb9ea Anton Altaparmakov 2005-10-11  1767  	/*
98b270362bb9ea Anton Altaparmakov 2005-10-11  1768  	 * Determine the number of pages per cluster for non-resident
98b270362bb9ea Anton Altaparmakov 2005-10-11  1769  	 * attributes.
98b270362bb9ea Anton Altaparmakov 2005-10-11  1770  	 */
98b270362bb9ea Anton Altaparmakov 2005-10-11  1771  	nr_pages = 1;
09cbfeaf1a5a67 Kirill A. Shutemov 2016-04-01  1772  	if (vol->cluster_size > PAGE_SIZE && NInoNonResident(ni))
09cbfeaf1a5a67 Kirill A. Shutemov 2016-04-01  1773  		nr_pages = vol->cluster_size >> PAGE_SHIFT;
98b270362bb9ea Anton Altaparmakov 2005-10-11  1774  	last_vcn = -1;
98b270362bb9ea Anton Altaparmakov 2005-10-11  1775  	do {
98b270362bb9ea Anton Altaparmakov 2005-10-11  1776  		VCN vcn;
98b270362bb9ea Anton Altaparmakov 2005-10-11  1777  		pgoff_t idx, start_idx;
98b270362bb9ea Anton Altaparmakov 2005-10-11  1778  		unsigned ofs, do_pages, u;
98b270362bb9ea Anton Altaparmakov 2005-10-11  1779  		size_t copied;
98b270362bb9ea Anton Altaparmakov 2005-10-11  1780  
09cbfeaf1a5a67 Kirill A. Shutemov 2016-04-01  1781  		start_idx = idx = pos >> PAGE_SHIFT;
09cbfeaf1a5a67 Kirill A. Shutemov 2016-04-01  1782  		ofs = pos & ~PAGE_MASK;
09cbfeaf1a5a67 Kirill A. Shutemov 2016-04-01  1783  		bytes = PAGE_SIZE - ofs;
98b270362bb9ea Anton Altaparmakov 2005-10-11  1784  		do_pages = 1;
98b270362bb9ea Anton Altaparmakov 2005-10-11  1785  		if (nr_pages > 1) {
98b270362bb9ea Anton Altaparmakov 2005-10-11  1786  			vcn = pos >> vol->cluster_size_bits;
98b270362bb9ea Anton Altaparmakov 2005-10-11  1787  			if (vcn != last_vcn) {
98b270362bb9ea Anton Altaparmakov 2005-10-11  1788  				last_vcn = vcn;
98b270362bb9ea Anton Altaparmakov 2005-10-11  1789  				/*
98b270362bb9ea Anton Altaparmakov 2005-10-11  1790  				 * Get the lcn of the vcn the write is in.  If
98b270362bb9ea Anton Altaparmakov 2005-10-11  1791  				 * it is a hole, need to lock down all pages in
98b270362bb9ea Anton Altaparmakov 2005-10-11  1792  				 * the cluster.
98b270362bb9ea Anton Altaparmakov 2005-10-11  1793  				 */
98b270362bb9ea Anton Altaparmakov 2005-10-11  1794  				down_read(&ni->runlist.lock);
98b270362bb9ea Anton Altaparmakov 2005-10-11  1795  				lcn = ntfs_attr_vcn_to_lcn_nolock(ni, pos >>
c49c31115067bc Richard Knutsson   2006-09-30  1796  						vol->cluster_size_bits, false);
98b270362bb9ea Anton Altaparmakov 2005-10-11  1797  				up_read(&ni->runlist.lock);
98b270362bb9ea Anton Altaparmakov 2005-10-11  1798  				if (unlikely(lcn < LCN_HOLE)) {
98b270362bb9ea Anton Altaparmakov 2005-10-11  1799  					if (lcn == LCN_ENOMEM)
98b270362bb9ea Anton Altaparmakov 2005-10-11  1800  						status = -ENOMEM;
a632f559304130 Anton Altaparmakov 2015-03-11  1801  					else {
a632f559304130 Anton Altaparmakov 2015-03-11  1802  						status = -EIO;
98b270362bb9ea Anton Altaparmakov 2005-10-11  1803  						ntfs_error(vol->sb, "Cannot "
98b270362bb9ea Anton Altaparmakov 2005-10-11  1804  							"perform write to "
98b270362bb9ea Anton Altaparmakov 2005-10-11  1805  							"inode 0x%lx, "
98b270362bb9ea Anton Altaparmakov 2005-10-11  1806  							"attribute type 0x%x, "
98b270362bb9ea Anton Altaparmakov 2005-10-11  1807  							"because the attribute "
98b270362bb9ea Anton Altaparmakov 2005-10-11  1808  							"is corrupt.",
98b270362bb9ea Anton Altaparmakov 2005-10-11  1809  							vi->i_ino, (unsigned)
98b270362bb9ea Anton Altaparmakov 2005-10-11  1810  							le32_to_cpu(ni->type));
a632f559304130 Anton Altaparmakov 2015-03-11  1811  					}
98b270362bb9ea Anton Altaparmakov 2005-10-11  1812  					break;
98b270362bb9ea Anton Altaparmakov 2005-10-11  1813  				}
98b270362bb9ea Anton Altaparmakov 2005-10-11  1814  				if (lcn == LCN_HOLE) {
98b270362bb9ea Anton Altaparmakov 2005-10-11  1815  					start_idx = (pos & ~(s64)
98b270362bb9ea Anton Altaparmakov 2005-10-11  1816  							vol->cluster_size_mask)
09cbfeaf1a5a67 Kirill A. Shutemov 2016-04-01  1817  							>> PAGE_SHIFT;
98b270362bb9ea Anton Altaparmakov 2005-10-11  1818  					bytes = vol->cluster_size - (pos &
98b270362bb9ea Anton Altaparmakov 2005-10-11  1819  							vol->cluster_size_mask);
98b270362bb9ea Anton Altaparmakov 2005-10-11  1820  					do_pages = nr_pages;
98b270362bb9ea Anton Altaparmakov 2005-10-11  1821  				}
98b270362bb9ea Anton Altaparmakov 2005-10-11  1822  			}
98b270362bb9ea Anton Altaparmakov 2005-10-11  1823  		}
a632f559304130 Anton Altaparmakov 2015-03-11  1824  		if (bytes > iov_iter_count(i))
a632f559304130 Anton Altaparmakov 2015-03-11  1825  			bytes = iov_iter_count(i);
a632f559304130 Anton Altaparmakov 2015-03-11  1826  again:
98b270362bb9ea Anton Altaparmakov 2005-10-11  1827  		/*
98b270362bb9ea Anton Altaparmakov 2005-10-11  1828  		 * Bring in the user page(s) that we will copy from _first_.
98b270362bb9ea Anton Altaparmakov 2005-10-11  1829  		 * Otherwise there is a nasty deadlock on copying from the same
98b270362bb9ea Anton Altaparmakov 2005-10-11  1830  		 * page(s) as we are writing to, without it/them being marked
98b270362bb9ea Anton Altaparmakov 2005-10-11  1831  		 * up-to-date.  Note, at present there is nothing to stop the
98b270362bb9ea Anton Altaparmakov 2005-10-11  1832  		 * pages being swapped out between us bringing them into memory
98b270362bb9ea Anton Altaparmakov 2005-10-11  1833  		 * and doing the actual copying.
98b270362bb9ea Anton Altaparmakov 2005-10-11  1834  		 */
4bce9f6ee8f84f Al Viro            2016-09-17  1835  		if (unlikely(iov_iter_fault_in_readable(i, bytes))) {
a632f559304130 Anton Altaparmakov 2015-03-11  1836  			status = -EFAULT;
a632f559304130 Anton Altaparmakov 2015-03-11  1837  			break;
a632f559304130 Anton Altaparmakov 2015-03-11  1838  		}
98b270362bb9ea Anton Altaparmakov 2005-10-11  1839  		/* Get and lock @do_pages starting at index @start_idx. */
98b270362bb9ea Anton Altaparmakov 2005-10-11  1840  		status = __ntfs_grab_cache_pages(mapping, start_idx, do_pages,
4c99000ac47cbd Minchan Kim        2010-05-24  1841  				pages, &cached_page);
98b270362bb9ea Anton Altaparmakov 2005-10-11  1842  		if (unlikely(status))
98b270362bb9ea Anton Altaparmakov 2005-10-11  1843  			break;
98b270362bb9ea Anton Altaparmakov 2005-10-11  1844  		/*
98b270362bb9ea Anton Altaparmakov 2005-10-11  1845  		 * For non-resident attributes, we need to fill any holes with
98b270362bb9ea Anton Altaparmakov 2005-10-11  1846  		 * actual clusters and ensure all bufferes are mapped.  We also
98b270362bb9ea Anton Altaparmakov 2005-10-11  1847  		 * need to bring uptodate any buffers that are only partially
98b270362bb9ea Anton Altaparmakov 2005-10-11  1848  		 * being written to.
98b270362bb9ea Anton Altaparmakov 2005-10-11  1849  		 */
98b270362bb9ea Anton Altaparmakov 2005-10-11  1850  		if (NInoNonResident(ni)) {
98b270362bb9ea Anton Altaparmakov 2005-10-11  1851  			status = ntfs_prepare_pages_for_non_resident_write(
98b270362bb9ea Anton Altaparmakov 2005-10-11  1852  					pages, do_pages, pos, bytes);
98b270362bb9ea Anton Altaparmakov 2005-10-11  1853  			if (unlikely(status)) {
98b270362bb9ea Anton Altaparmakov 2005-10-11  1854  				do {
98b270362bb9ea Anton Altaparmakov 2005-10-11  1855  					unlock_page(pages[--do_pages]);
09cbfeaf1a5a67 Kirill A. Shutemov 2016-04-01  1856  					put_page(pages[do_pages]);
98b270362bb9ea Anton Altaparmakov 2005-10-11  1857  				} while (do_pages);
98b270362bb9ea Anton Altaparmakov 2005-10-11  1858  				break;
98b270362bb9ea Anton Altaparmakov 2005-10-11  1859  			}
98b270362bb9ea Anton Altaparmakov 2005-10-11  1860  		}
09cbfeaf1a5a67 Kirill A. Shutemov 2016-04-01  1861  		u = (pos >> PAGE_SHIFT) - pages[0]->index;
a632f559304130 Anton Altaparmakov 2015-03-11  1862  		copied = ntfs_copy_from_user_iter(pages + u, do_pages - u, ofs,
a632f559304130 Anton Altaparmakov 2015-03-11  1863  					i, bytes);
98b270362bb9ea Anton Altaparmakov 2005-10-11  1864  		ntfs_flush_dcache_pages(pages + u, do_pages - u);
a632f559304130 Anton Altaparmakov 2015-03-11  1865  		status = 0;
a632f559304130 Anton Altaparmakov 2015-03-11  1866  		if (likely(copied == bytes)) {
a632f559304130 Anton Altaparmakov 2015-03-11  1867  			status = ntfs_commit_pages_after_write(pages, do_pages,
a632f559304130 Anton Altaparmakov 2015-03-11  1868  					pos, bytes);
a632f559304130 Anton Altaparmakov 2015-03-11  1869  			if (!status)
a632f559304130 Anton Altaparmakov 2015-03-11  1870  				status = bytes;
98b270362bb9ea Anton Altaparmakov 2005-10-11  1871  		}
98b270362bb9ea Anton Altaparmakov 2005-10-11  1872  		do {
98b270362bb9ea Anton Altaparmakov 2005-10-11  1873  			unlock_page(pages[--do_pages]);
09cbfeaf1a5a67 Kirill A. Shutemov 2016-04-01  1874  			put_page(pages[do_pages]);
98b270362bb9ea Anton Altaparmakov 2005-10-11  1875  		} while (do_pages);
a632f559304130 Anton Altaparmakov 2015-03-11  1876  		if (unlikely(status < 0))
98b270362bb9ea Anton Altaparmakov 2005-10-11  1877  			break;
a632f559304130 Anton Altaparmakov 2015-03-11  1878  		copied = status;
98b270362bb9ea Anton Altaparmakov 2005-10-11  1879  		cond_resched();
a632f559304130 Anton Altaparmakov 2015-03-11  1880  		if (unlikely(!copied)) {
a632f559304130 Anton Altaparmakov 2015-03-11  1881  			size_t sc;
a632f559304130 Anton Altaparmakov 2015-03-11  1882  
a632f559304130 Anton Altaparmakov 2015-03-11  1883  			/*
a632f559304130 Anton Altaparmakov 2015-03-11  1884  			 * We failed to copy anything.  Fall back to single
a632f559304130 Anton Altaparmakov 2015-03-11  1885  			 * segment length write.
a632f559304130 Anton Altaparmakov 2015-03-11  1886  			 *
a632f559304130 Anton Altaparmakov 2015-03-11  1887  			 * This is needed to avoid possible livelock in the
a632f559304130 Anton Altaparmakov 2015-03-11  1888  			 * case that all segments in the iov cannot be copied
a632f559304130 Anton Altaparmakov 2015-03-11  1889  			 * at once without a pagefault.
a632f559304130 Anton Altaparmakov 2015-03-11  1890  			 */
a632f559304130 Anton Altaparmakov 2015-03-11  1891  			sc = iov_iter_single_seg_count(i);
a632f559304130 Anton Altaparmakov 2015-03-11  1892  			if (bytes > sc)
a632f559304130 Anton Altaparmakov 2015-03-11  1893  				bytes = sc;
a632f559304130 Anton Altaparmakov 2015-03-11  1894  			goto again;
a632f559304130 Anton Altaparmakov 2015-03-11  1895  		}
a632f559304130 Anton Altaparmakov 2015-03-11  1896  		iov_iter_advance(i, copied);
a632f559304130 Anton Altaparmakov 2015-03-11  1897  		pos += copied;
a632f559304130 Anton Altaparmakov 2015-03-11  1898  		written += copied;
a632f559304130 Anton Altaparmakov 2015-03-11  1899  		balance_dirty_pages_ratelimited(mapping);
a632f559304130 Anton Altaparmakov 2015-03-11  1900  		if (fatal_signal_pending(current)) {
a632f559304130 Anton Altaparmakov 2015-03-11  1901  			status = -EINTR;
a632f559304130 Anton Altaparmakov 2015-03-11  1902  			break;
a632f559304130 Anton Altaparmakov 2015-03-11  1903  		}
a632f559304130 Anton Altaparmakov 2015-03-11  1904  	} while (iov_iter_count(i));
98b270362bb9ea Anton Altaparmakov 2005-10-11  1905  	if (cached_page)
09cbfeaf1a5a67 Kirill A. Shutemov 2016-04-01  1906  		put_page(cached_page);
98b270362bb9ea Anton Altaparmakov 2005-10-11  1907  	ntfs_debug("Done.  Returning %s (written 0x%lx, status %li).",
98b270362bb9ea Anton Altaparmakov 2005-10-11  1908  			written ? "written" : "status", (unsigned long)written,
98b270362bb9ea Anton Altaparmakov 2005-10-11  1909  			(long)status);
98b270362bb9ea Anton Altaparmakov 2005-10-11  1910  	return written ? written : status;
98b270362bb9ea Anton Altaparmakov 2005-10-11  1911  }
98b270362bb9ea Anton Altaparmakov 2005-10-11  1912  

:::::: The code at line 1727 was first introduced by commit
:::::: a632f5593041305c8adbf4727bc1ccdf0b45178b NTFS: Version 2.1.32 - Update file write from aio_write to write_iter.

:::::: TO: Anton Altaparmakov <anton@...era.com>
:::::: CC: Al Viro <viro@...iv.linux.org.uk>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

Download attachment ".config.gz" of type "application/gzip" (27532 bytes)

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ