Re: [PATCH 28/52] Do fallocate() to grow file before mapping for file growing writes

From: kbuild test robot
Date: Tue Dec 11 2018 - 01:14:37 EST


Hi Vivek,

I love your patch! Perhaps something to improve:

[auto build test WARNING on fuse/for-next]
[also build test WARNING on v4.20-rc6]
[cannot apply to next-20181210]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url: https://github.com/0day-ci/linux/commits/Vivek-Goyal/virtio-fs-shared-file-system-for-virtual-machines/20181211-103034
base: https://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse.git for-next
config: i386-randconfig-x005-201849 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-1) 7.3.0
reproduce:
# save the attached .config to linux build tree
make ARCH=i386

All warnings (new ones prefixed by >>):

fs/fuse/file.c: In function 'fuse_dax_write_iter':
>> fs/fuse/file.c:1834:47: warning: format '%lx' expects argument of type 'long unsigned int', but argument 3 has type 'size_t {aka unsigned int}' [-Wformat=]
printk("fallocate(offset=0x%llx length=0x%lx)"
~~^
%x
fs/fuse/file.c:1836:4:
iov_iter_count(from), ret);
~~~~~~~~~~~~~~~~~~~~
>> fs/fuse/file.c:1834:11: warning: format '%ld' expects argument of type 'long int', but argument 4 has type 'ssize_t {aka int}' [-Wformat=]
printk("fallocate(offset=0x%llx length=0x%lx)"
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
fs/fuse/file.c:1835:20: note: format string is defined here
" failed. err=%ld\n", iocb->ki_pos,
~~^
%d
In file included from include/linux/kernel.h:14:0,
from include/linux/list.h:9,
from include/linux/wait.h:7,
from include/linux/wait_bit.h:8,
from include/linux/fs.h:6,
from fs/fuse/fuse_i.h:13,
from fs/fuse/file.c:9:
fs/fuse/file.c:1839:12: warning: format '%lx' expects argument of type 'long unsigned int', but argument 4 has type 'size_t {aka unsigned int}' [-Wformat=]
pr_debug("fallocate(offset=0x%llx length=0x%lx)"
^
include/linux/printk.h:292:21: note: in definition of macro 'pr_fmt'
#define pr_fmt(fmt) fmt
^~~
include/linux/printk.h:340:2: note: in expansion of macro 'dynamic_pr_debug'
dynamic_pr_debug(fmt, ##__VA_ARGS__)
^~~~~~~~~~~~~~~~
>> fs/fuse/file.c:1839:3: note: in expansion of macro 'pr_debug'
pr_debug("fallocate(offset=0x%llx length=0x%lx)"
^~~~~~~~
fs/fuse/file.c:1839:48: note: format string is defined here
pr_debug("fallocate(offset=0x%llx length=0x%lx)"
~~^
%x
In file included from include/linux/kernel.h:14:0,
from include/linux/list.h:9,
from include/linux/wait.h:7,
from include/linux/wait_bit.h:8,
from include/linux/fs.h:6,
from fs/fuse/fuse_i.h:13,
from fs/fuse/file.c:9:
fs/fuse/file.c:1839:12: warning: format '%ld' expects argument of type 'long int', but argument 5 has type 'ssize_t {aka int}' [-Wformat=]
pr_debug("fallocate(offset=0x%llx length=0x%lx)"
^
include/linux/printk.h:292:21: note: in definition of macro 'pr_fmt'
#define pr_fmt(fmt) fmt
^~~
include/linux/printk.h:340:2: note: in expansion of macro 'dynamic_pr_debug'
dynamic_pr_debug(fmt, ##__VA_ARGS__)
^~~~~~~~~~~~~~~~
>> fs/fuse/file.c:1839:3: note: in expansion of macro 'pr_debug'
pr_debug("fallocate(offset=0x%llx length=0x%lx)"
^~~~~~~~
fs/fuse/file.c:1840:20: note: format string is defined here
" succeed. ret=%ld\n", iocb->ki_pos, iov_iter_count(from), ret);
~~^
%d
Cyclomatic Complexity 5 include/linux/compiler.h:__read_once_size
Cyclomatic Complexity 5 include/linux/compiler.h:__write_once_size
Cyclomatic Complexity 1 include/linux/kasan-checks.h:kasan_check_read
Cyclomatic Complexity 1 include/linux/kasan-checks.h:kasan_check_write
Cyclomatic Complexity 2 arch/x86/include/asm/bitops.h:set_bit
Cyclomatic Complexity 1 arch/x86/include/asm/bitops.h:__set_bit
Cyclomatic Complexity 2 arch/x86/include/asm/bitops.h:clear_bit
Cyclomatic Complexity 1 arch/x86/include/asm/bitops.h:__clear_bit
Cyclomatic Complexity 1 arch/x86/include/asm/bitops.h:test_and_set_bit
Cyclomatic Complexity 1 arch/x86/include/asm/bitops.h:test_and_set_bit_lock
Cyclomatic Complexity 1 arch/x86/include/asm/bitops.h:constant_test_bit
Cyclomatic Complexity 1 arch/x86/include/asm/bitops.h:fls
Cyclomatic Complexity 1 include/linux/log2.h:__ilog2_u32
Cyclomatic Complexity 2 arch/x86/include/asm/jump_label.h:arch_static_branch
Cyclomatic Complexity 1 include/linux/list.h:INIT_LIST_HEAD
Cyclomatic Complexity 1 include/linux/list.h:__list_add_valid
Cyclomatic Complexity 1 include/linux/list.h:__list_del_entry_valid
Cyclomatic Complexity 2 include/linux/list.h:__list_add
Cyclomatic Complexity 1 include/linux/list.h:list_add
Cyclomatic Complexity 1 include/linux/list.h:list_add_tail
Cyclomatic Complexity 1 include/linux/list.h:__list_del
Cyclomatic Complexity 2 include/linux/list.h:__list_del_entry
Cyclomatic Complexity 1 include/linux/list.h:list_del
Cyclomatic Complexity 1 include/linux/list.h:list_del_init
Cyclomatic Complexity 1 include/linux/list.h:list_empty
Cyclomatic Complexity 1 arch/x86/include/asm/current.h:get_current
Cyclomatic Complexity 1 arch/x86/include/asm/page_32.h:copy_page
Cyclomatic Complexity 1 include/asm-generic/getorder.h:__get_order
Cyclomatic Complexity 1 include/linux/err.h:PTR_ERR
Cyclomatic Complexity 1 include/linux/err.h:IS_ERR
Cyclomatic Complexity 1 arch/x86/include/asm/irqflags.h:native_save_fl
Cyclomatic Complexity 1 arch/x86/include/asm/irqflags.h:native_restore_fl
Cyclomatic Complexity 1 arch/x86/include/asm/irqflags.h:native_irq_disable
Cyclomatic Complexity 1 arch/x86/include/asm/irqflags.h:arch_local_save_flags
Cyclomatic Complexity 1 arch/x86/include/asm/irqflags.h:arch_local_irq_restore
Cyclomatic Complexity 1 arch/x86/include/asm/irqflags.h:arch_local_irq_disable
Cyclomatic Complexity 1 arch/x86/include/asm/irqflags.h:arch_local_irq_save
Cyclomatic Complexity 1 arch/x86/include/asm/processor.h:rep_nop
Cyclomatic Complexity 1 arch/x86/include/asm/processor.h:cpu_relax
Cyclomatic Complexity 1 arch/x86/include/asm/atomic.h:arch_atomic_read
Cyclomatic Complexity 1 arch/x86/include/asm/atomic.h:arch_atomic_set
Cyclomatic Complexity 1 arch/x86/include/asm/atomic.h:arch_atomic_inc
Cyclomatic Complexity 1 arch/x86/include/asm/atomic.h:arch_atomic_dec_and_test
Cyclomatic Complexity 1 include/asm-generic/atomic-instrumented.h:atomic_read
Cyclomatic Complexity 1 include/asm-generic/atomic-instrumented.h:atomic_set
Cyclomatic Complexity 1 include/asm-generic/atomic-instrumented.h:atomic_inc
Cyclomatic Complexity 1 include/asm-generic/atomic-instrumented.h:atomic_dec_and_test
Cyclomatic Complexity 5 arch/x86/include/asm/preempt.h:__preempt_count_add
Cyclomatic Complexity 5 arch/x86/include/asm/preempt.h:__preempt_count_sub
Cyclomatic Complexity 1 include/linux/spinlock.h:spinlock_check
Cyclomatic Complexity 1 include/linux/spinlock.h:spin_lock
Cyclomatic Complexity 1 include/linux/spinlock.h:spin_unlock
Cyclomatic Complexity 1 include/linux/wait.h:waitqueue_active
Cyclomatic Complexity 1 include/linux/rcupdate.h:__rcu_read_lock
Cyclomatic Complexity 1 include/linux/rcupdate.h:__rcu_read_unlock
Cyclomatic Complexity 1 include/linux/rcupdate.h:rcu_lock_acquire
Cyclomatic Complexity 1 include/linux/rcupdate.h:rcu_lock_release
Cyclomatic Complexity 1 include/linux/rcupdate.h:rcu_read_lock
Cyclomatic Complexity 1 include/linux/rcupdate.h:rcu_read_unlock
Cyclomatic Complexity 1 include/linux/seqlock.h:seqcount_lockdep_reader_access
Cyclomatic Complexity 2 include/linux/seqlock.h:__read_seqcount_begin
Cyclomatic Complexity 1 include/linux/seqlock.h:raw_read_seqcount_begin
Cyclomatic Complexity 1 include/linux/seqlock.h:read_seqcount_begin
Cyclomatic Complexity 1 include/linux/seqlock.h:__read_seqcount_retry
Cyclomatic Complexity 1 include/linux/seqlock.h:read_seqcount_retry
Cyclomatic Complexity 1 include/linux/seqlock.h:raw_write_seqcount_begin
Cyclomatic Complexity 1 include/linux/seqlock.h:raw_write_seqcount_end
Cyclomatic Complexity 1 include/linux/seqlock.h:write_seqcount_begin_nested
Cyclomatic Complexity 1 include/linux/seqlock.h:write_seqcount_begin
Cyclomatic Complexity 1 include/linux/seqlock.h:write_seqcount_end
Cyclomatic Complexity 2 include/linux/dcache.h:d_real
Cyclomatic Complexity 1 include/linux/completion.h:__init_completion
Cyclomatic Complexity 1 arch/x86/include/asm/topology.h:numa_node_id
Cyclomatic Complexity 1 include/linux/rbtree.h:rb_link_node
Cyclomatic Complexity 1 include/linux/topology.h:numa_mem_id
Cyclomatic Complexity 1 include/linux/gfp.h:__alloc_pages
Cyclomatic Complexity 1 include/linux/gfp.h:__alloc_pages_node
Cyclomatic Complexity 2 include/linux/gfp.h:alloc_pages_node
Cyclomatic Complexity 1 include/linux/refcount.h:refcount_set
Cyclomatic Complexity 1 include/linux/refcount.h:refcount_read
Cyclomatic Complexity 1 arch/x86/include/asm/refcount.h:refcount_inc
Cyclomatic Complexity 1 arch/x86/include/asm/refcount.h:refcount_dec_and_test
Cyclomatic Complexity 1 include/linux/fs.h:is_sync_kiocb
Cyclomatic Complexity 1 include/linux/fs.h:mapping_writably_mapped
Cyclomatic Complexity 1 include/linux/fs.h:inode_lock
Cyclomatic Complexity 1 include/linux/fs.h:inode_unlock
Cyclomatic Complexity 1 include/linux/fs.h:inode_lock_shared
Cyclomatic Complexity 1 include/linux/fs.h:inode_unlock_shared
Cyclomatic Complexity 1 include/linux/fs.h:inode_trylock
Cyclomatic Complexity 1 include/linux/fs.h:inode_trylock_shared
Cyclomatic Complexity 2 include/linux/fs.h:i_size_read
Cyclomatic Complexity 1 include/linux/fs.h:i_size_write
Cyclomatic Complexity 1 include/linux/fs.h:file_inode
Cyclomatic Complexity 1 include/linux/fs.h:file_dentry

vim +1834 fs/fuse/file.c

1803
1804 static ssize_t fuse_dax_write_iter(struct kiocb *iocb, struct iov_iter *from)
1805 {
1806 struct inode *inode = file_inode(iocb->ki_filp);
1807 ssize_t ret;
1808
1809 if (iocb->ki_flags & IOCB_NOWAIT) {
1810 if (!inode_trylock(inode))
1811 return -EAGAIN;
1812 } else {
1813 inode_lock(inode);
1814 }
1815
1816 ret = generic_write_checks(iocb, from);
1817 if (ret <= 0)
1818 goto out;
1819
1820 ret = file_remove_privs(iocb->ki_filp);
1821 if (ret)
1822 goto out;
1823 /* TODO file_update_time() but we don't want metadata I/O */
1824
1825 /* TODO handle growing the file */
1826 /* Grow file here if need be. iomap_begin() does not have access
1827 * to file pointer
1828 */
1829 if (iov_iter_rw(from) == WRITE &&
1830 ((iocb->ki_pos + iov_iter_count(from)) > i_size_read(inode))) {
1831 ret = __fuse_file_fallocate(iocb->ki_filp, 0, iocb->ki_pos,
1832 iov_iter_count(from));
1833 if (ret < 0) {
> 1834 printk("fallocate(offset=0x%llx length=0x%lx)"
1835 " failed. err=%ld\n", iocb->ki_pos,
1836 iov_iter_count(from), ret);
1837 goto out;
1838 }
> 1839 pr_debug("fallocate(offset=0x%llx length=0x%lx)"
1840 " succeed. ret=%ld\n", iocb->ki_pos, iov_iter_count(from), ret);
1841 }
1842
1843 ret = dax_iomap_rw(iocb, from, &fuse_iomap_ops);
1844
1845 out:
1846 inode_unlock(inode);
1847
1848 if (ret > 0)
1849 ret = generic_write_sync(iocb, ret);
1850 return ret;
1851 }
1852

---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation

Attachment: .config.gz
Description: application/gzip