Hi Konstantin,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on linus/master]
[cannot apply to v5.3 next-20190919]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url:    
https://github.com/0day-ci/linux/commits/Konstantin-Khlebnikov/mm-implement-write-behind-policy-for-sequential-file-writes/20190920-155606
reproduce: make htmldocs
:::::: branch date: 8 hours ago
:::::: commit date: 8 hours ago

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <l...@intel.com>

All warnings (new ones prefixed by >>):

   drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c:1: warning: no structured comments 
found
   drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c:1: warning: no structured comments 
found
   drivers/gpu/drm/amd/amdgpu/amdgpu_pm.c:1: warning: 'pp_dpm_sclk pp_dpm_mclk 
pp_dpm_pcie' not found
   drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h:132: warning: Incorrect 
use of kernel-doc format: Documentation Makefile include scripts source 
@atomic_obj
   drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h:238: warning: Incorrect 
use of kernel-doc format: Documentation Makefile include scripts source 
gpu_info FW provided soc bounding box struct or 0 if not
   drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h:243: warning: Function 
parameter or member 'atomic_obj' not described in 'amdgpu_display_manager'
   drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h:243: warning: Function 
parameter or member 'backlight_link' not described in 'amdgpu_display_manager'
   drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h:243: warning: Function 
parameter or member 'backlight_caps' not described in 'amdgpu_display_manager'
   drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h:243: warning: Function 
parameter or member 'freesync_module' not described in 'amdgpu_display_manager'
   drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h:243: warning: Function 
parameter or member 'fw_dmcu' not described in 'amdgpu_display_manager'
   drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h:243: warning: Function 
parameter or member 'dmcu_fw_version' not described in 'amdgpu_display_manager'
   drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h:243: warning: Function 
parameter or member 'soc_bounding_box' not described in 'amdgpu_display_manager'
   drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c:1: warning: 
'register_hpd_handlers' not found
   drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c:1: warning: 
'dm_crtc_high_irq' not found
   drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c:1: warning: 
'dm_pflip_high_irq' not found
   include/linux/spi/spi.h:190: warning: Function parameter or member 
'driver_override' not described in 'spi_device'
   drivers/gpio/gpiolib-of.c:92: warning: Excess function parameter 'dev' 
description in 'of_gpio_need_valid_mask'
   include/linux/i2c.h:337: warning: Function parameter or member 'init_irq' 
not described in 'i2c_client'
   include/linux/regulator/machine.h:196: warning: Function parameter or member 
'max_uV_step' not described in 'regulation_constraints'
   include/linux/regulator/driver.h:223: warning: Function parameter or member 
'resume' not described in 'regulator_ops'
   fs/fs-writeback.c:913: warning: Excess function parameter 'nr_pages' 
description in 'cgroup_writeback_by_id'
   fs/direct-io.c:258: warning: Excess function parameter 'offset' description 
in 'dio_complete'
   fs/libfs.c:496: warning: Excess function parameter 'available' description 
in 'simple_write_end'
   fs/posix_acl.c:647: warning: Function parameter or member 'inode' not 
described in 'posix_acl_update_mode'
   fs/posix_acl.c:647: warning: Function parameter or member 'mode_p' not 
described in 'posix_acl_update_mode'
   fs/posix_acl.c:647: warning: Function parameter or member 'acl' not 
described in 'posix_acl_update_mode'
   drivers/usb/typec/bus.c:1: warning: 'typec_altmode_unregister_driver' not 
found
   drivers/usb/typec/bus.c:1: warning: 'typec_altmode_register_driver' not found
   drivers/usb/typec/class.c:1: warning: 'typec_altmode_register_notifier' not 
found
   drivers/usb/typec/class.c:1: warning: 'typec_altmode_unregister_notifier' 
not found
   kernel/dma/coherent.c:1: warning: no structured comments found
   include/linux/input/sparse-keymap.h:43: warning: Function parameter or 
member 'sw' not described in 'key_entry'
   include/linux/skbuff.h:888: warning: Function parameter or member 
'dev_scratch' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 'list' not 
described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 
'ip_defrag_offset' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 
'skb_mstamp_ns' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 
'__cloned_offset' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 
'head_frag' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 
'__pkt_type_offset' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 
'encapsulation' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 
'encap_hdr_csum' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 
'csum_valid' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 
'__pkt_vlan_present_offset' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 
'vlan_present' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 
'csum_complete_sw' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 
'csum_level' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 
'inner_protocol_type' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 
'remcsum_offload' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 
'sender_cpu' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 
'reserved_tailroom' not described in 'sk_buff'
   include/linux/skbuff.h:888: warning: Function parameter or member 
'inner_ipproto' not described in 'sk_buff'
   include/net/sock.h:233: warning: Function parameter or member 'skc_addrpair' 
not described in 'sock_common'
   include/net/sock.h:233: warning: Function parameter or member 'skc_portpair' 
not described in 'sock_common'
   include/net/sock.h:233: warning: Function parameter or member 'skc_ipv6only' 
not described in 'sock_common'
   include/net/sock.h:233: warning: Function parameter or member 
'skc_net_refcnt' not described in 'sock_common'
   include/net/sock.h:233: warning: Function parameter or member 'skc_v6_daddr' 
not described in 'sock_common'
   include/net/sock.h:233: warning: Function parameter or member 
'skc_v6_rcv_saddr' not described in 'sock_common'
   include/net/sock.h:233: warning: Function parameter or member 'skc_cookie' 
not described in 'sock_common'
   include/net/sock.h:233: warning: Function parameter or member 'skc_listener' 
not described in 'sock_common'
   include/net/sock.h:233: warning: Function parameter or member 'skc_tw_dr' 
not described in 'sock_common'
   include/net/sock.h:233: warning: Function parameter or member 'skc_rcv_wnd' 
not described in 'sock_common'
   include/net/sock.h:233: warning: Function parameter or member 
'skc_tw_rcv_nxt' not described in 'sock_common'
   include/net/sock.h:515: warning: Function parameter or member 
'sk_rx_skb_cache' not described in 'sock'
   include/net/sock.h:515: warning: Function parameter or member 'sk_wq_raw' 
not described in 'sock'
   include/net/sock.h:515: warning: Function parameter or member 
'tcp_rtx_queue' not described in 'sock'
   include/net/sock.h:515: warning: Function parameter or member 
'sk_tx_skb_cache' not described in 'sock'
   include/net/sock.h:515: warning: Function parameter or member 
'sk_route_forced_caps' not described in 'sock'
   include/net/sock.h:515: warning: Function parameter or member 
'sk_txtime_report_errors' not described in 'sock'
   include/net/sock.h:515: warning: Function parameter or member 
'sk_validate_xmit_skb' not described in 'sock'
   include/net/sock.h:515: warning: Function parameter or member 
'sk_bpf_storage' not described in 'sock'
   include/net/sock.h:2439: warning: Function parameter or member 
'tcp_rx_skb_cache_key' not described in 'DECLARE_STATIC_KEY_FALSE'
   include/net/sock.h:2439: warning: Excess function parameter 'sk' description 
in 'DECLARE_STATIC_KEY_FALSE'
   include/net/sock.h:2439: warning: Excess function parameter 'skb' 
description in 'DECLARE_STATIC_KEY_FALSE'
   include/linux/netdevice.h:2053: warning: Function parameter or member 
'gso_partial_features' not described in 'net_device'
   include/linux/netdevice.h:2053: warning: Function parameter or member 
'l3mdev_ops' not described in 'net_device'
   include/linux/netdevice.h:2053: warning: Function parameter or member 
'xfrmdev_ops' not described in 'net_device'
   include/linux/netdevice.h:2053: warning: Function parameter or member 
'tlsdev_ops' not described in 'net_device'
   include/linux/netdevice.h:2053: warning: Function parameter or member 
'name_assign_type' not described in 'net_device'
   include/linux/netdevice.h:2053: warning: Function parameter or member 
'ieee802154_ptr' not described in 'net_device'
   include/linux/netdevice.h:2053: warning: Function parameter or member 
'mpls_ptr' not described in 'net_device'
   include/linux/netdevice.h:2053: warning: Function parameter or member 
'xdp_prog' not described in 'net_device'
   include/linux/netdevice.h:2053: warning: Function parameter or member 
'gro_flush_timeout' not described in 'net_device'
   include/linux/netdevice.h:2053: warning: Function parameter or member 
'nf_hooks_ingress' not described in 'net_device'
   include/linux/netdevice.h:2053: warning: Function parameter or member 
'____cacheline_aligned_in_smp' not described in 'net_device'
   include/linux/netdevice.h:2053: warning: Function parameter or member 
'qdisc_hash' not described in 'net_device'
   include/linux/netdevice.h:2053: warning: Function parameter or member 
'xps_cpus_map' not described in 'net_device'
   include/linux/netdevice.h:2053: warning: Function parameter or member 
'xps_rxqs_map' not described in 'net_device'
   include/linux/phylink.h:56: warning: Function parameter or member 
'__ETHTOOL_DECLARE_LINK_MODE_MASK(advertising' not described in 
'phylink_link_state'
   include/linux/phylink.h:56: warning: Function parameter or member 
'__ETHTOOL_DECLARE_LINK_MODE_MASK(lp_advertising' not described in 
'phylink_link_state'
   drivers/net/phy/phylink.c:595: warning: Function parameter or member 
'config' not described in 'phylink_create'
   drivers/net/phy/phylink.c:595: warning: Excess function parameter 'ndev' 
description in 'phylink_create'
   lib/genalloc.c:1: warning: 'gen_pool_add_virt' not found
   lib/genalloc.c:1: warning: 'gen_pool_alloc' not found
   lib/genalloc.c:1: warning: 'gen_pool_free' not found
   lib/genalloc.c:1: warning: 'gen_pool_alloc_algo' not found
   include/linux/bitmap.h:341: warning: Function parameter or member 'nbits' 
not described in 'bitmap_or_equal'
   include/linux/rculist.h:374: warning: Excess function parameter 'cond' 
description in 'list_for_each_entry_rcu'
   include/linux/rculist.h:651: warning: Excess function parameter 'cond' 
description in 'hlist_for_each_entry_rcu'
   mm/util.c:1: warning: 'get_user_pages_fast' not found
   mm/slab.c:4215: warning: Function parameter or member 'objp' not described 
in '__ksize'
>> mm/filemap.c:3551: warning: Function parameter or member 'iocb' not 
>> described in 'generic_write_behind'
>> mm/filemap.c:3551: warning: Function parameter or member 'count' not 
>> described in 'generic_write_behind'
   include/drm/drm_modeset_helper_vtables.h:1053: warning: Function parameter 
or member 'prepare_writeback_job' not described in 'drm_connector_helper_funcs'
   include/drm/drm_modeset_helper_vtables.h:1053: warning: Function parameter 
or member 'cleanup_writeback_job' not described in 'drm_connector_helper_funcs'
   include/drm/drm_atomic_state_helper.h:1: warning: no structured comments 
found
   include/drm/drm_gem_shmem_helper.h:87: warning: Function parameter or member 
'madv' not described in 'drm_gem_shmem_object'
   include/drm/drm_gem_shmem_helper.h:87: warning: Function parameter or member 
'madv_list' not described in 'drm_gem_shmem_object'
   drivers/gpu/drm/i915/display/intel_dpll_mgr.h:158: warning: Enum value 
'DPLL_ID_TGL_MGPLL5' not described in enum 'intel_dpll_id'
   drivers/gpu/drm/i915/display/intel_dpll_mgr.h:158: warning: Enum value 
'DPLL_ID_TGL_MGPLL6' not described in enum 'intel_dpll_id'
   drivers/gpu/drm/i915/display/intel_dpll_mgr.h:158: warning: Excess enum 
value 'DPLL_ID_TGL_TCPLL6' description in 'intel_dpll_id'
   drivers/gpu/drm/i915/display/intel_dpll_mgr.h:158: warning: Excess enum 
value 'DPLL_ID_TGL_TCPLL5' description in 'intel_dpll_id'
   drivers/gpu/drm/i915/display/intel_dpll_mgr.h:342: warning: Function 
parameter or member 'wakeref' not described in 'intel_shared_dpll'
   Error: Cannot open file drivers/gpu/drm/i915/i915_gem_batch_pool.c
   Error: Cannot open file drivers/gpu/drm/i915/i915_gem_batch_pool.c
   Error: Cannot open file drivers/gpu/drm/i915/i915_gem_batch_pool.c
   drivers/gpu/drm/i915/i915_drv.h:1129: warning: Incorrect use of kernel-doc 
format: Documentation Makefile include scripts source The OA context specific 
information.
   drivers/gpu/drm/i915/i915_drv.h:1143: warning: Incorrect use of kernel-doc 
format: Documentation Makefile include scripts source State of the OA buffer.
   drivers/gpu/drm/i915/i915_drv.h:1154: warning: Incorrect use of kernel-doc 
format: Documentation Makefile include scripts source Locks reads and writes to 
all head/tail state
   drivers/gpu/drm/i915/i915_drv.h:1176: warning: Incorrect use of kernel-doc 
format: Documentation Makefile include scripts source One 'aging' tail pointer 
and one 'aged' tail pointer ready to
   drivers/gpu/drm/i915/i915_drv.h:1188: warning: Incorrect use of kernel-doc 
format: Documentation Makefile include scripts source Index for the aged tail 
ready to read() data up to.
   drivers/gpu/drm/i915/i915_drv.h:1193: warning: Incorrect use of kernel-doc 
format: Documentation Makefile include scripts source A monotonic timestamp for 
when the current aging tail pointer
   drivers/gpu/drm/i915/i915_drv.h:1199: warning: Incorrect use of kernel-doc 
format: Documentation Makefile include scripts source Although we can always 
read back the head pointer register,
   drivers/gpu/drm/i915/i915_drv.h:1207: warning: Function parameter or member 
'pinned_ctx' not described in 'i915_perf_stream'
   drivers/gpu/drm/i915/i915_drv.h:1207: warning: Function parameter or member 
'specific_ctx_id' not described in 'i915_perf_stream'
   drivers/gpu/drm/i915/i915_drv.h:1207: warning: Function parameter or member 
'specific_ctx_id_mask' not described in 'i915_perf_stream'
   drivers/gpu/drm/i915/i915_drv.h:1207: warning: Function parameter or member 
'poll_check_timer' not described in 'i915_perf_stream'
   drivers/gpu/drm/i915/i915_drv.h:1207: warning: Function parameter or member 
'poll_wq' not described in 'i915_perf_stream'
   drivers/gpu/drm/i915/i915_drv.h:1207: warning: Function parameter or member 
'pollin' not described in 'i915_perf_stream'
   drivers/gpu/drm/i915/i915_drv.h:1207: warning: Function parameter or member 
'periodic' not described in 'i915_perf_stream'
   drivers/gpu/drm/i915/i915_drv.h:1207: warning: Function parameter or member 
'period_exponent' not described in 'i915_perf_stream'
   drivers/gpu/drm/i915/i915_drv.h:1207: warning: Function parameter or member 
'oa_buffer' not described in 'i915_perf_stream'
   drivers/gpu/drm/i915/i915_drv.h:1129: warning: Incorrect use of kernel-doc 
format: Documentation Makefile include scripts source The OA context specific 
information.
   drivers/gpu/drm/i915/i915_drv.h:1143: warning: Incorrect use of kernel-doc 
format: Documentation Makefile include scripts source State of the OA buffer.
   drivers/gpu/drm/i915/i915_drv.h:1154: warning: Incorrect use of kernel-doc 
format: Documentation Makefile include scripts source Locks reads and writes to 
all head/tail state
   drivers/gpu/drm/i915/i915_drv.h:1176: warning: Incorrect use of kernel-doc 
format: Documentation Makefile include scripts source One 'aging' tail pointer 
and one 'aged' tail pointer ready to
   drivers/gpu/drm/i915/i915_drv.h:1188: warning: Incorrect use of kernel-doc 
format: Documentation Makefile include scripts source Index for the aged tail 
ready to read() data up to.
   drivers/gpu/drm/i915/i915_drv.h:1193: warning: Incorrect use of kernel-doc 
format: Documentation Makefile include scripts source A monotonic timestamp for 
when the current aging tail pointer
   drivers/gpu/drm/i915/i915_drv.h:1199: warning: Incorrect use of kernel-doc 
format: Documentation Makefile include scripts source Although we can always 
read back the head pointer register,
   drivers/gpu/drm/i915/i915_drv.h:1129: warning: Incorrect use of kernel-doc 
format: Documentation Makefile include scripts source The OA context specific 
information.
   drivers/gpu/drm/i915/i915_drv.h:1143: warning: Incorrect use of kernel-doc 
format: Documentation Makefile include scripts source State of the OA buffer.
   drivers/gpu/drm/i915/i915_drv.h:1154: warning: Incorrect use of kernel-doc 
format: Documentation Makefile include scripts source Locks reads and writes to 
all head/tail state
   drivers/gpu/drm/i915/i915_drv.h:1176: warning: Incorrect use of kernel-doc 
format: Documentation Makefile include scripts source One 'aging' tail pointer 
and one 'aged' tail pointer ready to
   drivers/gpu/drm/i915/i915_drv.h:1188: warning: Incorrect use of kernel-doc 
format: Documentation Makefile include scripts source Index for the aged tail 
ready to read() data up to.
   drivers/gpu/drm/i915/i915_drv.h:1193: warning: Incorrect use of kernel-doc 
format: Documentation Makefile include scripts source A monotonic timestamp for 
when the current aging tail pointer
   drivers/gpu/drm/i915/i915_drv.h:1199: warning: Incorrect use of kernel-doc 
format: Documentation Makefile include scripts source Although we can always 
read back the head pointer register,
   drivers/gpu/drm/mcde/mcde_drv.c:1: warning: 'ST-Ericsson MCDE DRM Driver' 
not found
   include/net/cfg80211.h:1185: warning: Function parameter or member 'txpwr' 
not described in 'station_parameters'
   include/net/mac80211.h:4056: warning: Function parameter or member 
'sta_set_txpwr' not described in 'ieee80211_ops'
   include/net/mac80211.h:2018: warning: Function parameter or member 'txpwr' 
not described in 'ieee80211_sta'
   Documentation/admin-guide/perf/imx-ddr.rst:21: WARNING: Unexpected 
indentation.
   Documentation/admin-guide/perf/imx-ddr.rst:34: WARNING: Unexpected 
indentation.
   Documentation/admin-guide/perf/imx-ddr.rst:40: WARNING: Unexpected 
indentation.
   Documentation/admin-guide/perf/imx-ddr.rst:45: WARNING: Unexpected 
indentation.
   Documentation/admin-guide/perf/imx-ddr.rst:52: WARNING: Unexpected 
indentation.
   Documentation/hwmon/inspur-ipsps1.rst:2: WARNING: Title underline too short.

# 
https://github.com/0day-ci/linux/commit/e0e7df8d5b71bf59ad93fe75e662c929b580d805
git remote add linux-review https://github.com/0day-ci/linux
git remote update linux-review
git checkout e0e7df8d5b71bf59ad93fe75e662c929b580d805
vim +3551 mm/filemap.c

e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3534  
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3535  /**
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3536   * 
generic_write_behind() - writeback dirty pages behind current position.
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3537   *
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3538   * This function tracks 
writing position. If file has enough sequentially
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3539   * written data it 
starts background writeback and then waits for previous
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3540   * writeback initiated 
some iterations ago.
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3541   *
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3542   * Write-behind 
maintains per-file head cursor in file->f_write_behind and
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3543   * two windows around: 
background writeback before and pending data after.
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3544   *
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3545   * |<-wait-this->|       
    |<-send-this->|<---pending-write-behind--->|
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3546   * 
|<--async-write-behind--->|<--------previous-data------>|<-new-data->|
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3547   *              current 
head-^    new head-^              file position-^
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3548   */
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3549  void 
generic_write_behind(struct kiocb *iocb, ssize_t count)
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3550  {
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20 @3551   struct file *file = 
iocb->ki_filp;
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3552   struct address_space 
*mapping = file->f_mapping;
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3553   struct inode *inode = 
mapping->host;
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3554   struct backing_dev_info 
*bdi = inode_to_bdi(inode);
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3555   unsigned long window = 
READ_ONCE(bdi->write_behind_pages);
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3556   pgoff_t head = 
file->f_write_behind;
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3557   pgoff_t begin = 
(iocb->ki_pos - count) >> PAGE_SHIFT;
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3558   pgoff_t end = 
iocb->ki_pos >> PAGE_SHIFT;
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3559  
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3560   /* Skip if write is 
random, direct, sync or disabled for disk */
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3561   if ((file->f_mode & 
FMODE_RANDOM) || !window ||
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3562       (iocb->ki_flags & 
(IOCB_DIRECT | IOCB_DSYNC)))
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3563           return;
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3564  
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3565   /* Skip non-sequential 
writes in strictly sequential mode. */
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3566   if 
(vm_dirty_write_behind < 2 &&
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3567       iocb->ki_pos != 
i_size_read(inode) &&
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3568       !(iocb->ki_flags & 
IOCB_APPEND))
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3569           return;
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3570  
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3571   /* Contigious write and 
still within window. */
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3572   if (end - head < window)
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3573           return;
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3574  
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3575   
spin_lock(&file->f_lock);
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3576  
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3577   /* Re-read under lock. 
*/
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3578   head = 
file->f_write_behind;
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3579  
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3580   /* Non-contiguous, move 
head position. */
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3581   if (head > end || begin 
- head > window) {
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3582           /*
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3583            * Append might 
happen though multiple files or via new file
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3584            * every time. 
Align head cursor to cover previous appends.
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3585            */
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3586           if 
(iocb->ki_flags & IOCB_APPEND)
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3587                   begin = 
roundup(begin - min(begin, window - 1),
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3588                           
        bdi->io_pages);
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3589  
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3590           
file->f_write_behind = head = begin;
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3591   }
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3592  
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3593   /* Still not big 
enough. */
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3594   if (end - head < 
window) {
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3595           
spin_unlock(&file->f_lock);
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3596           return;
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3597   }
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3598  
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3599   /* Write excess and try 
at least max_sectors_kb if possible */
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3600   end = head + max(end - 
head - window, min(end - head, bdi->io_pages));
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3601  
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3602   /* Set head for next 
iteration, everything behind will be written. */
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3603   file->f_write_behind = 
end;
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3604  
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3605   
spin_unlock(&file->f_lock);
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3606  
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3607   /* Start background 
writeback. */
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3608   
__filemap_fdatawrite_range(mapping,
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3609                           
   (loff_t)head << PAGE_SHIFT,
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3610                           
   ((loff_t)end << PAGE_SHIFT) - 1,
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3611                           
   WB_SYNC_NONE);
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3612  
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3613   if (head < window)
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3614           return;
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3615  
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3616   /* Wait for pages 
falling behind writeback window. */
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3617   head -= window;
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3618   end -= window;
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3619   
__filemap_fdatawait_range(mapping,
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3620                           
  (loff_t)head << PAGE_SHIFT,
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3621                           
  ((loff_t)end << PAGE_SHIFT) - 1);
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3622  }
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3623  
EXPORT_SYMBOL(generic_write_behind);
e0e7df8d5b71bf Konstantin Khlebnikov 2019-09-20  3624  

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

Attachment: .config.gz
Description: .config.gz

Reply via email to