* refs/heads/tmp-a008686:
Linux 4.14.198
net: disable netpoll on fresh napis
tipc: fix shutdown() of connectionless socket
sctp: not disable bh in the whole sctp_get_port_local()
net: usb: dm9601: Add USB ID of Keenetic Plus DSL
netlabel: fix problems with mapping removal
bnxt: don't enable NAPI until rings are ready
vfio/pci: Fix SR-IOV VF handling with MMIO blocking
vfio-pci: Invalidate mmaps and block MMIO access on disabled memory
vfio-pci: Fault mmaps to enable vma tracking
vfio/type1: Support faulting PFNMAP vmas
block: ensure bdi->io_pages is always initialized
ALSA; firewire-tascam: exclude Tascam FE-8 from detection
Linux 4.14.197
net: usb: Fix uninit-was-stored issue in asix_read_phy_addr()
cfg80211: regulatory: reject invalid hints
mm/hugetlb: fix a race between hugetlb sysctl handlers
checkpatch: fix the usage of capture group ( ... )
KVM: arm64: Set HCR_EL2.PTW to prevent AT taking synchronous exception
KVM: arm64: Survive synchronous exceptions caused by AT instructions
KVM: arm64: Defer guest entry when an asynchronous exception is pending
KVM: arm64: Add kvm_extable for vaxorcism code
mm: slub: fix conversion of freelist_corrupted()
dm thin metadata: Avoid returning cmd->bm wild pointer on error
dm cache metadata: Avoid returning cmd->bm wild pointer on error
libata: implement ATA_HORKAGE_MAX_TRIM_128M and apply to Sandisks
block: Move SECTOR_SIZE and SECTOR_SHIFT definitions into <linux/blkdev.h>
block: allow for_each_bvec to support zero len bvec
affs: fix basic permission bits to actually work
ALSA: firewire-digi00x: exclude Avid Adrenaline from detection
ALSA: hda/hdmi: always check pin power status in i915 pin fixup
ALSA: pcm: oss: Remove superfluous WARN_ON() for mulaw sanity check
ALSA: ca0106: fix error code handling
usb: qmi_wwan: add D-Link DWM-222 A2 device ID
net: usb: qmi_wwan: add Telit 0x1050 composition
btrfs: fix potential deadlock in the search ioctl
uaccess: Add non-pagefault user-space write function
uaccess: Add non-pagefault user-space read functions
btrfs: set the lockdep class for log tree extent buffers
btrfs: Remove extraneous extent_buffer_get from tree_mod_log_rewind
btrfs: Remove redundant extent_buffer_get in get_old_root
btrfs: drop path before adding new uuid tree entry
include/linux/log2.h: add missing () around n in roundup_pow_of_two()
thermal: ti-soc-thermal: Fix bogus thermal shutdowns for omap4430
iommu/vt-d: Serialize IOMMU GCMD register modifications
tg3: Fix soft lockup when tg3_reset_task() fails.
fix regression in "epoll: Keep a reference on files added to the check list"
net: ethernet: mlx4: Fix memory allocation in mlx4_buddy_init()
perf tools: Correct SNOOPX field offset
nvmet-fc: Fix a missed _irqsave version of spin_lock in 'nvmet_fc_fod_op_done()'
bnxt_en: Fix PCI AER error recovery flow
bnxt_en: Check for zero dir entries in NVRAM.
gtp: add GTPA_LINK info to msg sent to userspace
dmaengine: pl330: Fix burst length if burst size is smaller than bus width
net: arc_emac: Fix memleak in arc_mdio_probe
ravb: Fixed to be able to unload modules
net: systemport: Fix memleak in bcm_sysport_probe
net: hns: Fix memleak in hns_nic_dev_probe
netfilter: nf_tables: fix destination register zeroing
netfilter: nf_tables: incorrect enum nft_list_attributes definition
netfilter: nf_tables: add NFTA_SET_USERDATA if not null
MIPS: BMIPS: Also call bmips_cpu_setup() for secondary cores
MIPS: mm: BMIPS5000 has inclusive physical caches
dmaengine: at_hdmac: check return value of of_find_device_by_node() in at_dma_xlate()
batman-adv: bla: use netif_rx_ni when not in interrupt context
batman-adv: Fix own OGM check in aggregated OGMs
batman-adv: Avoid uninitialized chaddr when handling DHCP
dmaengine: of-dma: Fix of_dma_router_xlate's of_dma_xlate handling
xen/xenbus: Fix granting of vmalloc'd memory
s390: don't trace preemption in percpu macros
cpuidle: Fixup IRQ state
ceph: don't allow setlease on cephfs
nvmet: Disable keep-alive timer when kato is cleared to 0h
hwmon: (applesmc) check status earlier.
drm/msm: add shutdown support for display platform_driver
perf record/stat: Explicitly call out event modifiers in the documentation
HID: core: Sanitize event code and type when mapping input
HID: core: Correctly handle ReportSize being zero
Linux 4.14.196
ALSA: usb-audio: Update documentation comment for MS2109 quirk
HID: hiddev: Fix slab-out-of-bounds write in hiddev_ioctl_usage()
tpm: Unify the mismatching TPM space buffer sizes
btrfs: check the right error variable in btrfs_del_dir_entries_in_log
usb: storage: Add unusual_uas entry for Sony PSZ drives
USB: cdc-acm: rework notification_buffer resizing
USB: gadget: u_f: Unbreak offset calculation in VLAs
USB: gadget: f_ncm: add bounds checks to ncm_unwrap_ntb()
USB: gadget: u_f: add overflow checks to VLA macros
overflow.h: Add allocation size calculation helpers
usb: host: ohci-exynos: Fix error handling in exynos_ohci_probe()
USB: Ignore UAS for JMicron JMS567 ATA/ATAPI Bridge
USB: quirks: Add no-lpm quirk for another Raydium touchscreen
usb: uas: Add quirk for PNY Pro Elite
USB: yurex: Fix bad gfp argument
drm/amdgpu: Fix buffer overflow in INFO ioctl
device property: Fix the secondary firmware node handling in set_primary_fwnode()
PM: sleep: core: Fix the handling of pending runtime resume requests
xhci: Do warm-reset when both CAS and XDEV_RESUME are set
XEN uses irqdesc::irq_data_common::handler_data to store a per interrupt XEN data pointer which contains XEN specific information.
writeback: Fix sync livelock due to b_dirty_time processing
writeback: Avoid skipping inode writeback
writeback: Protect inode->i_io_list with inode->i_lock
serial: 8250: change lock order in serial8250_do_startup()
serial: 8250_exar: Fix number of ports for Commtech PCIe cards
serial: pl011: Don't leak amba_ports entry on driver register error
serial: pl011: Fix oops on -EPROBE_DEFER
serial: samsung: Removes the IRQ not found warning
vt_ioctl: change VT_RESIZEX ioctl to check for error return from vc_resize()
vt: defer kfree() of vc_screenbuf in vc_do_resize()
USB: lvtest: return proper error code in probe
fbcon: prevent user font height or width change from causing potential out-of-bounds access
btrfs: fix space cache memory leak after transaction abort
HID: i2c-hid: Always sleep 60ms after I2C_HID_PWR_ON commands
powerpc/perf: Fix soft lockups due to missed interrupt accounting
net: gianfar: Add of_node_put() before goto statement
scsi: ufs: Clean up completed request without interrupt notification
scsi: ufs: Improve interrupt handling for shared interrupts
scsi: ufs: Fix possible infinite loop in ufshcd_hold
s390/cio: add cond_resched() in the slow_eval_known_fn() loop
spi: stm32: fix stm32_spi_prepare_mbr in case of odd clk_rate
fs: prevent BUG_ON in submit_bh_wbc()
jbd2: abort journal if free a async write error metadata buffer
ext4: don't BUG on inconsistent journal feature
jbd2: make sure jh have b_transaction set in refile/unfile_buffer
usb: gadget: f_tcm: Fix some resource leaks in some error paths
i2c: rcar: in slave mode, clear NACK earlier
null_blk: fix passing of REQ_FUA flag in null_handle_rq
nvme-fc: Fix wrong return value in __nvme_fc_init_request()
media: gpio-ir-tx: improve precision of transmitted signal due to scheduling
Revert "ath10k: fix DMA related firmware crashes on multiple devices"
efi: provide empty efi_enter_virtual_mode implementation
USB: sisusbvga: Fix a potential UB casued by left shifting a negative value
powerpc/spufs: add CONFIG_COREDUMP dependency
KVM: arm64: Fix symbol dependency in __hyp_call_panic_nvhe
media: davinci: vpif_capture: fix potential double free
EDAC/ie31200: Fallback if host bridge device is already initialized
scsi: fcoe: Memory leak fix in fcoe_sysfs_fcf_del()
ceph: fix potential mdsc use-after-free crash
scsi: iscsi: Do not put host in iscsi_set_flashnode_param()
locking/lockdep: Fix overflow in presentation of average lock-time
drm/nouveau: Fix reference count leak in nouveau_connector_detect
drm/nouveau/drm/noveau: fix reference count leak in nouveau_fbcon_open
f2fs: fix use-after-free issue
cec-api: prevent leaking memory through hole in structure
mips/vdso: Fix resource leaks in genvdso.c
rtlwifi: rtl8192cu: Prevent leaking urb
PCI: Fix pci_create_slot() reference count leak
omapfb: fix multiple reference count leaks due to pm_runtime_get_sync
selftests/powerpc: Purge extra count_pmc() calls of ebb selftests
scsi: lpfc: Fix shost refcount mismatch when deleting vport
drm/amdgpu/display: fix ref count leak when pm_runtime_get_sync fails
drm/amdgpu: fix ref count leak in amdgpu_display_crtc_set_config
drm/amd/display: fix ref count leak in amdgpu_drm_ioctl
drm/amdgpu: fix ref count leak in amdgpu_driver_open_kms
drm/radeon: fix multiple reference count leak
drm/amdkfd: Fix reference count leaks.
iommu/iova: Don't BUG on invalid PFNs
scsi: target: tcmu: Fix crash on ARM during cmd completion
blktrace: ensure our debugfs dir exists
media: pci: ttpci: av7110: fix possible buffer overflow caused by bad DMA value in debiirq()
powerpc/xive: Ignore kmemleak false positives
arm64: dts: qcom: msm8916: Pull down PDM GPIOs during sleep
mfd: intel-lpss: Add Intel Emmitsburg PCH PCI IDs
ASoC: tegra: Fix reference count leaks.
ALSA: pci: delete repeated words in comments
gre6: Fix reception with IP6_TNL_F_RCV_DSCP_COPY
ipvlan: fix device features
tipc: fix uninit skb->data in tipc_nl_compat_dumpit()
net: Fix potential wrong skb->protocol in skb_vlan_untag()
powerpc/64s: Don't init FSCR_DSCR in __init_FSCR()
ANDROID: cuttlefish_defconfig: initialize locals with zeroes
BACKPORT: security: allow using Clang's zero initialization for stack variables
Revert "binder: Prevent context manager from incrementing ref 0"
Linux 4.14.195
KVM: arm/arm64: Don't reschedule in unmap_stage2_range()
clk: Evict unregistered clks from parent caches
xen: don't reschedule in preemption off sections
mm/hugetlb: fix calculation of adjust_range_if_pmd_sharing_possible
do_epoll_ctl(): clean the failure exits up a bit
epoll: Keep a reference on files added to the check list
powerpc/pseries: Do not initiate shutdown when system is running on UPS
net: dsa: b53: check for timeout
hv_netvsc: Fix the queue_mapping in netvsc_vf_xmit()
bonding: fix active-backup failover for current ARP slave
vfio/type1: Add proper error unwind for vfio_iommu_replay()
ASoC: intel: Fix memleak in sst_media_open
ASoC: msm8916-wcd-analog: fix register Interrupt offset
bonding: fix a potential double-unregister
bonding: show saner speed for broadcast mode
net: fec: correct the error path for regulator disable in probe
i40e: Fix crash during removing i40e driver
i40e: Set RX_ONLY mode for unicast promiscuous on VLAN
ext4: fix potential negative array index in do_split()
alpha: fix annotation of io{read,write}{16,32}be()
xfs: Fix UBSAN null-ptr-deref in xfs_sysfs_init
virtio_ring: Avoid loop when vq is broken in virtqueue_poll
scsi: libfc: Free skb in fc_disc_gpn_id_resp() for valid cases
cpufreq: intel_pstate: Fix cpuinfo_max_freq when MSR_TURBO_RATIO_LIMIT is 0
jffs2: fix UAF problem
xfs: fix inode quota reservation checks
m68knommu: fix overwriting of bits in ColdFire V3 cache control
Input: psmouse - add a newline when printing 'proto' by sysfs
media: vpss: clean up resources in init
rtc: goldfish: Enable interrupt in set_alarm() when necessary
media: budget-core: Improve exception handling in budget_register()
scsi: ufs: Add DELAY_BEFORE_LPM quirk for Micron devices
spi: Prevent adding devices below an unregistering controller
jbd2: add the missing unlock_buffer() in the error path of jbd2_write_superblock()
ext4: fix checking of directory entry validity for inline directories
mm, page_alloc: fix core hung in free_pcppages_bulk()
mm: include CMA pages in lowmem_reserve at boot
kernel/relay.c: fix memleak on destroy relay channel
romfs: fix uninitialized memory leak in romfs_dev_read()
btrfs: sysfs: use NOFS for device creation
btrfs: inode: fix NULL pointer dereference if inode doesn't need compression
btrfs: Move free_pages_out label in inline extent handling branch in compress_file_range
btrfs: don't show full path of bind mounts in subvol=
btrfs: export helpers for subvolume name/id resolution
powerpc: Allow 4224 bytes of stack expansion for the signal frame
powerpc/mm: Only read faulting instruction when necessary in do_page_fault()
khugepaged: adjust VM_BUG_ON_MM() in __khugepaged_enter()
khugepaged: khugepaged_test_exit() check mmget_still_valid()
perf probe: Fix memory leakage when the probe point is not found
drm/vgem: Replace opencoded version of drm_gem_dumb_map_offset()
ANDROID: virtio_gpu.h: move map/unmap to 3d group
Linux 4.14.194
dm cache: remove all obsolete writethrough-specific code
dm cache: submit writethrough writes in parallel to origin and cache
dm cache: pass cache structure to mode functions
genirq/affinity: Make affinity setting if activated opt-in
genirq/affinity: Handle affinity setting on inactive interrupts correctly
khugepaged: retract_page_tables() remember to test exit
sh: landisk: Add missing initialization of sh_io_port_base
tools build feature: Quote CC and CXX for their arguments
perf bench mem: Always memset source before memcpy
ALSA: echoaudio: Fix potential Oops in snd_echo_resume()
mfd: dln2: Run event handler loop under spinlock
test_kmod: avoid potential double free in trigger_config_run_type()
fs/ufs: avoid potential u32 multiplication overflow
nfs: Fix getxattr kernel panic and memory overflow
net: qcom/emac: add missed clk_disable_unprepare in error path of emac_clks_phase1_init
drm/vmwgfx: Fix two list_for_each loop exit tests
drm/vmwgfx: Use correct vmw_legacy_display_unit pointer
Input: sentelic - fix error return when fsp_reg_write fails
i2c: rcar: avoid race when unregistering slave
tools build feature: Use CC and CXX from parent
pwm: bcm-iproc: handle clk_get_rate() return
clk: clk-atlas6: fix return value check in atlas6_clk_init()
i2c: rcar: slave: only send STOP event when we have been addressed
iommu/vt-d: Enforce PASID devTLB field mask
iommu/omap: Check for failure of a call to omap_iommu_dump_ctx
dm rq: don't call blk_mq_queue_stopped() in dm_stop_queue()
gpu: ipu-v3: image-convert: Combine rotate/no-rotate irq handlers
USB: serial: ftdi_sio: clean up receive processing
USB: serial: ftdi_sio: make process-packet buffer unsigned
RDMA/ipoib: Return void from ipoib_ib_dev_stop()
mfd: arizona: Ensure 32k clock is put on driver unbind and error
drm/imx: imx-ldb: Disable both channels for split mode in enc->disable()
perf intel-pt: Fix FUP packet state
pseries: Fix 64 bit logical memory block panic
watchdog: f71808e_wdt: clear watchdog timeout occurred flag
watchdog: f71808e_wdt: remove use of wrong watchdog_info option
watchdog: f71808e_wdt: indicate WDIOF_CARDRESET support in watchdog_info.options
tracing: Use trace_sched_process_free() instead of exit() for pid tracing
tracing/hwlat: Honor the tracing_cpumask
kprobes: Fix NULL pointer dereference at kprobe_ftrace_handler
ftrace: Setup correct FTRACE_FL_REGS flags for module
ocfs2: change slot number type s16 to u16
ext2: fix missing percpu_counter_inc
MIPS: CPU#0 is not hotpluggable
mac80211: fix misplaced while instead of if
bcache: allocate meta data pages as compound pages
md/raid5: Fix Force reconstruct-write io stuck in degraded raid5
net/compat: Add missing sock updates for SCM_RIGHTS
net: stmmac: dwmac1000: provide multicast filter fallback
net: ethernet: stmmac: Disable hardware multicast filter
powerpc: Fix circular dependency between percpu.h and mmu.h
xtensa: fix xtensa_pmu_setup prototype
iio: dac: ad5592r: fix unbalanced mutex unlocks in ad5592r_read_raw()
dt-bindings: iio: io-channel-mux: Fix compatible string in example code
btrfs: fix memory leaks after failure to lookup checksums during inode logging
btrfs: only search for left_info if there is no right_info in try_merge_free_space
btrfs: don't allocate anonymous block device for user invisible roots
PCI: hotplug: ACPI: Fix context refcounting in acpiphp_grab_context()
smb3: warn on confusing error scenario with sec=krb5
net: initialize fastreuse on inet_inherit_port
xen/balloon: make the balloon wait interruptible
xen/balloon: fix accounting in alloc_xenballooned_pages error path
irqdomain/treewide: Free firmware node after domain removal
ARM: 8992/1: Fix unwind_frame for clang-built kernels
parisc: mask out enable and reserved bits from sba imask
parisc: Implement __smp_store_release and __smp_load_acquire barriers
mtd: rawnand: qcom: avoid write to unavailable register
spi: spidev: Align buffers for DMA
9p: Fix memory leak in v9fs_mount
ALSA: usb-audio: work around streaming quirk for MacroSilicon MS2109
fs/minix: reject too-large maximum file size
fs/minix: don't allow getting deleted inodes
fs/minix: check return value of sb_getblk()
bitfield.h: don't compile-time validate _val in FIELD_FIT
crypto: cpt - don't sleep of CRYPTO_TFM_REQ_MAY_SLEEP was not specified
crypto: ccp - Fix use of merged scatterlists
crypto: qat - fix double free in qat_uclo_create_batch_init_list
ALSA: usb-audio: add quirk for Pioneer DDJ-RB
ALSA: usb-audio: fix overeager device match for MacroSilicon MS2109
ALSA: usb-audio: Creative USB X-Fi Pro SB1095 volume knob support
USB: serial: cp210x: enable usb generic throttle/unthrottle
USB: serial: cp210x: re-enable auto-RTS on open
net: Set fput_needed iff FDPUT_FPUT is set
net: refactor bind_bucket fastreuse into helper
net/nfc/rawsock.c: add CAP_NET_RAW check.
drivers/net/wan/lapbether: Added needed_headroom and a skb->len check
af_packet: TPACKET_V3: fix fill status rwlock imbalance
crypto: aesni - add compatibility with IAS
x86/fsgsbase/64: Fix NULL deref in 86_fsgsbase_read_task
pinctrl-single: fix pcs_parse_pinconf() return value
dlm: Fix kobject memleak
fsl/fman: fix eth hash table allocation
fsl/fman: check dereferencing null pointer
fsl/fman: fix unreachable code
fsl/fman: fix dereference null return value
fsl/fman: use 32-bit unsigned integer
net: spider_net: Fix the size used in a 'dma_free_coherent()' call
liquidio: Fix wrong return value in cn23xx_get_pf_num()
net: ethernet: aquantia: Fix wrong return value
tools, build: Propagate build failures from tools/build/Makefile.build
wl1251: fix always return 0 error
s390/qeth: don't process empty bridge port events
selftests/powerpc: Fix online CPU selection
PCI: Release IVRS table in AMD ACS quirk
selftests/powerpc: Fix CPU affinity for child process
Bluetooth: hci_serdev: Only unregister device if it was registered
power: supply: check if calc_soc succeeded in pm860x_init_battery
Smack: prevent underflow in smk_set_cipso()
Smack: fix another vsscanf out of bounds
net: dsa: mv88e6xxx: MV88E6097 does not support jumbo configuration
scsi: mesh: Fix panic after host or bus reset
usb: dwc2: Fix error path in gadget registration
MIPS: OCTEON: add missing put_device() call in dwc3_octeon_device_init()
coresight: tmc: Fix TMC mode read in tmc_read_unprepare_etb()
thermal: ti-soc-thermal: Fix reversed condition in ti_thermal_expose_sensor()
USB: serial: iuu_phoenix: fix led-activity helpers
drm/imx: tve: fix regulator_disable error path
PCI/ASPM: Add missing newline in sysfs 'policy'
staging: rtl8192u: fix a dubious looking mask before a shift
powerpc/vdso: Fix vdso cpu truncation
mwifiex: Prevent memory corruption handling keys
scsi: scsi_debug: Add check for sdebug_max_queue during module init
drm/bridge: sil_sii8620: initialize return of sii8620_readb
drm: panel: simple: Fix bpc for LG LB070WV8 panel
leds: core: Flush scheduled work for system suspend
PCI: Fix pci_cfg_wait queue locking problem
xfs: fix reflink quota reservation accounting error
media: exynos4-is: Add missed check for pinctrl_lookup_state()
media: firewire: Using uninitialized values in node_probe()
ipvs: allow connection reuse for unconfirmed conntrack
scsi: eesox: Fix different dev_id between request_irq() and free_irq()
scsi: powertec: Fix different dev_id between request_irq() and free_irq()
drm/radeon: fix array out-of-bounds read and write issues
cxl: Fix kobject memleak
drm/mipi: use dcs write for mipi_dsi_dcs_set_tear_scanline
scsi: cumana_2: Fix different dev_id between request_irq() and free_irq()
ASoC: Intel: bxt_rt298: add missing .owner field
media: omap3isp: Add missed v4l2_ctrl_handler_free() for preview_init_entities()
leds: lm355x: avoid enum conversion warning
drm/arm: fix unintentional integer overflow on left shift
iio: improve IIO_CONCENTRATION channel type description
video: pxafb: Fix the function used to balance a 'dma_alloc_coherent()' call
console: newport_con: fix an issue about leak related system resources
video: fbdev: sm712fb: fix an issue about iounmap for a wrong address
agp/intel: Fix a memory leak on module initialisation failure
ACPICA: Do not increment operation_region reference counts for field units
bcache: fix super block seq numbers comparision in register_cache_set()
dyndbg: fix a BUG_ON in ddebug_describe_flags
usb: bdc: Halt controller on suspend
bdc: Fix bug causing crash after multiple disconnects
usb: gadget: net2280: fix memory leak on probe error handling paths
gpu: host1x: debug: Fix multiple channels emitting messages simultaneously
iwlegacy: Check the return value of pcie_capability_read_*()
brcmfmac: set state of hanger slot to FREE when flushing PSQ
brcmfmac: To fix Bss Info flag definition Bug
mm/mmap.c: Add cond_resched() for exit_mmap() CPU stalls
irqchip/irq-mtk-sysirq: Replace spinlock with raw_spinlock
drm/debugfs: fix plain echo to connector "force" attribute
drm/nouveau: fix multiple instances of reference count leaks
arm64: dts: hisilicon: hikey: fixes to comply with adi, adv7533 DT binding
md-cluster: fix wild pointer of unlock_all_bitmaps()
video: fbdev: neofb: fix memory leak in neo_scan_monitor()
drm/radeon: Fix reference count leaks caused by pm_runtime_get_sync
fs/btrfs: Add cond_resched() for try_release_extent_mapping() stalls
Bluetooth: add a mutex lock to avoid UAF in do_enale_set
drm/tilcdc: fix leak & null ref in panel_connector_get_modes
ARM: socfpga: PM: add missing put_device() call in socfpga_setup_ocram_self_refresh()
spi: lantiq: fix: Rx overflow error in full duplex mode
ARM: at91: pm: add missing put_device() call in at91_pm_sram_init()
platform/x86: intel-vbtn: Fix return value check in check_acpi_dev()
platform/x86: intel-hid: Fix return value check in check_acpi_dev()
m68k: mac: Fix IOP status/control register writes
m68k: mac: Don't send IOP message until channel is idle
arm64: dts: exynos: Fix silent hang after boot on Espresso
arm64: dts: qcom: msm8916: Replace invalid bias-pull-none property
EDAC: Fix reference count leaks
arm64: dts: rockchip: fix rk3399-puma gmac reset gpio
arm64: dts: rockchip: fix rk3399-puma vcc5v0-host gpio
sched: correct SD_flags returned by tl->sd_flags()
x86/mce/inject: Fix a wrong assignment of i_mce.status
cgroup: add missing skcd->no_refcnt check in cgroup_sk_clone()
HID: input: Fix devices that return multiple bytes in battery report
tracepoint: Mark __tracepoint_string's __used
Smack: fix use-after-free in smk_write_relabel_self()
rxrpc: Fix race between recvmsg and sendmsg on immediate call failure
usb: hso: check for return value in hso_serial_common_create()
selftests/net: relax cpu affinity requirement in msg_zerocopy test
Revert "vxlan: fix tos value before xmit"
openvswitch: Prevent kernel-infoleak in ovs_ct_put_key()
net: gre: recompute gre csum for sctp over gre tunnels
hv_netvsc: do not use VF device if link is down
net: lan78xx: replace bogus endpoint lookup
vxlan: Ensure FDB dump is performed under RCU
net: ethernet: mtk_eth_soc: fix MTU warnings
ipv6: fix memory leaks on IPV6_ADDRFORM path
ipv4: Silence suspicious RCU usage warning
xattr: break delegations in {set,remove}xattr
Drivers: hv: vmbus: Ignore CHANNELMSG_TL_CONNECT_RESULT(23)
tools lib traceevent: Fix memory leak in process_dynamic_array_len
atm: fix atm_dev refcnt leaks in atmtcp_remove_persistent
igb: reinit_locked() should be called with rtnl_lock
cfg80211: check vendor command doit pointer before use
i2c: slave: add sanity check when unregistering
i2c: slave: improve sanity check when registering
drm/nouveau/fbcon: zero-initialise the mode_cmd2 structure
drm/nouveau/fbcon: fix module unload when fbcon init has failed for some reason
net/9p: validate fds in p9_fd_open
leds: 88pm860x: fix use-after-free on unbind
leds: lm3533: fix use-after-free on unbind
leds: da903x: fix use-after-free on unbind
leds: wm831x-status: fix use-after-free on unbind
mtd: properly check all write ioctls for permissions
vgacon: Fix for missing check in scrollback handling
binder: Prevent context manager from incrementing ref 0
omapfb: dss: Fix max fclk divider for omap36xx
Bluetooth: Prevent out-of-bounds read in hci_inquiry_result_with_rssi_evt()
Bluetooth: Prevent out-of-bounds read in hci_inquiry_result_evt()
Bluetooth: Fix slab-out-of-bounds read in hci_extended_inquiry_result_evt()
staging: android: ashmem: Fix lockdep warning for write operation
ALSA: seq: oss: Serialize ioctls
usb: xhci: Fix ASMedia ASM1142 DMA addressing
usb: xhci: define IDs for various ASMedia host controllers
USB: iowarrior: fix up report size handling for some devices
net/mlx5e: Don't support phys switch id if not in switchdev mode
USB: serial: qcserial: add EM7305 QDL product ID
ANDROID: tty: fix tty name overflow
ANDROID: fix a bug in quota2
ANDROID: Incremental fs: fix magic compatibility again
Linux 4.14.193
ARM: 8702/1: head-common.S: Clear lr before jumping to start_kernel()
ext4: fix direct I/O read error
random32: move the pseudo-random 32-bit definitions to prandom.h
random32: remove net_rand_state from the latent entropy gcc plugin
random: fix circular include dependency on arm64 after addition of percpu.h
ARM: percpu.h: fix build error
random32: update the net random state on interrupt and activity
Revert "scsi: libsas: direct call probe and destruct"
Linux 4.14.192
x86/i8259: Use printk_deferred() to prevent deadlock
KVM: LAPIC: Prevent setting the tscdeadline timer if the lapic is hw disabled
xen-netfront: fix potential deadlock in xennet_remove()
cxgb4: add missing release on skb in uld_send()
x86/unwind/orc: Fix ORC for newly forked tasks
Revert "i2c: cadence: Fix the hold bit setting"
net: ethernet: ravb: exit if re-initialization fails in tx timeout
parisc: add support for cmpxchg on u8 pointers
nfc: s3fwrn5: add missing release on skb in s3fwrn5_recv_frame
qed: Disable "MFW indication via attention" SPAM every 5 minutes
usb: hso: Fix debug compile warning on sparc32
arm64: csum: Fix handling of bad packets
arm64/alternatives: move length validation inside the subsection
mac80211: mesh: Free pending skb when destroying a mpath
mac80211: mesh: Free ie data when leaving mesh
bpf: Fix map leak in HASH_OF_MAPS map
ibmvnic: Fix IRQ mapping disposal in error path
mlxsw: core: Free EMAD transactions using kfree_rcu()
mlxsw: core: Increase scope of RCU read-side critical section
mlx4: disable device on shutdown
net: lan78xx: fix transfer-buffer memory leak
net: lan78xx: add missing endpoint sanity check
sh: Fix validation of system call number
selftests/net: rxtimestamp: fix clang issues for target arch PowerPC
net/x25: Fix null-ptr-deref in x25_disconnect
net/x25: Fix x25_neigh refcnt leak when x25 disconnect
xfs: fix missed wakeup on l_flush_wait
rds: Prevent kernel-infoleak in rds_notify_queue_get()
x86, vmlinux.lds: Page-align end of ..page_aligned sections
x86/build/lto: Fix truncated .bss with -fdata-sections
9p/trans_fd: Fix concurrency del of req_list in p9_fd_cancelled/p9_read_work
9p/trans_fd: abort p9_read_work if req status changed
f2fs: check if file namelen exceeds max value
f2fs: check memory boundary by insane namelen
drm: hold gem reference until object is no longer accessed
drm/amdgpu: Prevent kernel-infoleak in amdgpu_info_ioctl()
ARM: 8986/1: hw_breakpoint: Don't invoke overflow handler on uaccess watchpoints
wireless: Use offsetof instead of custom macro.
PCI/ASPM: Disable ASPM on ASMedia ASM1083/1085 PCIe-to-PCI bridge
x86/kvm: Be careful not to clear KVM_VCPU_FLUSH_TLB bit
ath9k: release allocated buffer if timed out
ath9k_htc: release allocated buffer if timed out
iio: imu: adis16400: fix memory leak
media: rc: prevent memory leak in cx23888_ir_probe
crypto: ccp - Release all allocated memory if sha type is invalid
net: phy: mdio-bcm-unimac: fix potential NULL dereference in unimac_mdio_probe()
scsi: libsas: direct call probe and destruct
Linux 4.14.191
xfs: set format back to extents if xfs_bmap_extents_to_btree
regmap: debugfs: check count when read regmap file
mm/page_owner.c: remove drain_all_pages from init_early_allocated_pages
tcp: allow at most one TLP probe per flight
rtnetlink: Fix memory(net_device) leak when ->newlink fails
ip6_gre: fix null-ptr-deref in ip6gre_init_net()
AX.25: Prevent integer overflows in connect and sendmsg
rxrpc: Fix sendmsg() returning EPIPE due to recvmsg() returning ENODATA
net: udp: Fix wrong clean up for IS_UDPLITE macro
net-sysfs: add a newline when printing 'tx_timeout' by sysfs
drivers/net/wan/x25_asy: Fix to make it work
dev: Defer free of skbs in flush_backlog
AX.25: Prevent out-of-bounds read in ax25_sendmsg()
AX.25: Fix out-of-bounds read in ax25_connect()
Conflicts:
drivers/clk/clk.c
drivers/gpu/drm/msm/msm_drv.c
drivers/hwtracing/coresight/coresight-tmc-etf.c
Fixed build errors:
drivers/md/dm-bow.c
Change-Id: Ia70efae18753ba5dbb3b67e00201e2c12eac5e70
Signed-off-by: Srinivasarao P <spathi@codeaurora.org>
661 lines
18 KiB
C
661 lines
18 KiB
C
/*
|
|
* Copyright (C) 2001 Sistina Software (UK) Limited.
|
|
* Copyright (C) 2004-2008 Red Hat, Inc. All rights reserved.
|
|
*
|
|
* This file is released under the LGPL.
|
|
*/
|
|
|
|
#ifndef _LINUX_DEVICE_MAPPER_H
|
|
#define _LINUX_DEVICE_MAPPER_H
|
|
|
|
#include <linux/bio.h>
|
|
#include <linux/blkdev.h>
|
|
#include <linux/math64.h>
|
|
#include <linux/ratelimit.h>
|
|
|
|
struct dm_dev;
|
|
struct dm_target;
|
|
struct dm_table;
|
|
struct mapped_device;
|
|
struct bio_vec;
|
|
|
|
/*
|
|
* Type of table, mapped_device's mempool and request_queue
|
|
*/
|
|
enum dm_queue_mode {
|
|
DM_TYPE_NONE = 0,
|
|
DM_TYPE_BIO_BASED = 1,
|
|
DM_TYPE_REQUEST_BASED = 2,
|
|
DM_TYPE_MQ_REQUEST_BASED = 3,
|
|
DM_TYPE_DAX_BIO_BASED = 4,
|
|
};
|
|
|
|
typedef enum { STATUSTYPE_INFO, STATUSTYPE_TABLE } status_type_t;
|
|
|
|
union map_info {
|
|
void *ptr;
|
|
};
|
|
|
|
/*
|
|
* In the constructor the target parameter will already have the
|
|
* table, type, begin and len fields filled in.
|
|
*/
|
|
typedef int (*dm_ctr_fn) (struct dm_target *target,
|
|
unsigned int argc, char **argv);
|
|
|
|
/*
|
|
* The destructor doesn't need to free the dm_target, just
|
|
* anything hidden ti->private.
|
|
*/
|
|
typedef void (*dm_dtr_fn) (struct dm_target *ti);
|
|
|
|
/*
|
|
* The map function must return:
|
|
* < 0: error
|
|
* = 0: The target will handle the io by resubmitting it later
|
|
* = 1: simple remap complete
|
|
* = 2: The target wants to push back the io
|
|
*/
|
|
typedef int (*dm_map_fn) (struct dm_target *ti, struct bio *bio);
|
|
typedef int (*dm_clone_and_map_request_fn) (struct dm_target *ti,
|
|
struct request *rq,
|
|
union map_info *map_context,
|
|
struct request **clone);
|
|
typedef void (*dm_release_clone_request_fn) (struct request *clone);
|
|
|
|
/*
|
|
* Returns:
|
|
* < 0 : error (currently ignored)
|
|
* 0 : ended successfully
|
|
* 1 : for some reason the io has still not completed (eg,
|
|
* multipath target might want to requeue a failed io).
|
|
* 2 : The target wants to push back the io
|
|
*/
|
|
typedef int (*dm_endio_fn) (struct dm_target *ti,
|
|
struct bio *bio, blk_status_t *error);
|
|
typedef int (*dm_request_endio_fn) (struct dm_target *ti,
|
|
struct request *clone, blk_status_t error,
|
|
union map_info *map_context);
|
|
|
|
typedef void (*dm_presuspend_fn) (struct dm_target *ti);
|
|
typedef void (*dm_presuspend_undo_fn) (struct dm_target *ti);
|
|
typedef void (*dm_postsuspend_fn) (struct dm_target *ti);
|
|
typedef int (*dm_preresume_fn) (struct dm_target *ti);
|
|
typedef void (*dm_resume_fn) (struct dm_target *ti);
|
|
|
|
typedef void (*dm_status_fn) (struct dm_target *ti, status_type_t status_type,
|
|
unsigned status_flags, char *result, unsigned maxlen);
|
|
|
|
typedef int (*dm_message_fn) (struct dm_target *ti, unsigned argc, char **argv);
|
|
|
|
typedef int (*dm_prepare_ioctl_fn) (struct dm_target *ti,
|
|
struct block_device **bdev, fmode_t *mode);
|
|
|
|
/*
|
|
* These iteration functions are typically used to check (and combine)
|
|
* properties of underlying devices.
|
|
* E.g. Does at least one underlying device support flush?
|
|
* Does any underlying device not support WRITE_SAME?
|
|
*
|
|
* The callout function is called once for each contiguous section of
|
|
* an underlying device. State can be maintained in *data.
|
|
* Return non-zero to stop iterating through any further devices.
|
|
*/
|
|
typedef int (*iterate_devices_callout_fn) (struct dm_target *ti,
|
|
struct dm_dev *dev,
|
|
sector_t start, sector_t len,
|
|
void *data);
|
|
|
|
/*
|
|
* This function must iterate through each section of device used by the
|
|
* target until it encounters a non-zero return code, which it then returns.
|
|
* Returns zero if no callout returned non-zero.
|
|
*/
|
|
typedef int (*dm_iterate_devices_fn) (struct dm_target *ti,
|
|
iterate_devices_callout_fn fn,
|
|
void *data);
|
|
|
|
typedef void (*dm_io_hints_fn) (struct dm_target *ti,
|
|
struct queue_limits *limits);
|
|
|
|
/*
|
|
* Returns:
|
|
* 0: The target can handle the next I/O immediately.
|
|
* 1: The target can't handle the next I/O immediately.
|
|
*/
|
|
typedef int (*dm_busy_fn) (struct dm_target *ti);
|
|
|
|
/*
|
|
* Returns:
|
|
* < 0 : error
|
|
* >= 0 : the number of bytes accessible at the address
|
|
*/
|
|
typedef long (*dm_dax_direct_access_fn) (struct dm_target *ti, pgoff_t pgoff,
|
|
long nr_pages, void **kaddr, pfn_t *pfn);
|
|
typedef size_t (*dm_dax_copy_from_iter_fn)(struct dm_target *ti, pgoff_t pgoff,
|
|
void *addr, size_t bytes, struct iov_iter *i);
|
|
#define PAGE_SECTORS (PAGE_SIZE / 512)
|
|
|
|
void dm_error(const char *message);
|
|
|
|
struct dm_dev {
|
|
struct block_device *bdev;
|
|
struct dax_device *dax_dev;
|
|
fmode_t mode;
|
|
char name[16];
|
|
};
|
|
|
|
dev_t dm_get_dev_t(const char *path);
|
|
|
|
/*
|
|
* Constructors should call these functions to ensure destination devices
|
|
* are opened/closed correctly.
|
|
*/
|
|
int dm_get_device(struct dm_target *ti, const char *path, fmode_t mode,
|
|
struct dm_dev **result);
|
|
void dm_put_device(struct dm_target *ti, struct dm_dev *d);
|
|
|
|
/*
|
|
* Information about a target type
|
|
*/
|
|
|
|
struct target_type {
|
|
uint64_t features;
|
|
const char *name;
|
|
struct module *module;
|
|
unsigned version[3];
|
|
dm_ctr_fn ctr;
|
|
dm_dtr_fn dtr;
|
|
dm_map_fn map;
|
|
dm_clone_and_map_request_fn clone_and_map_rq;
|
|
dm_release_clone_request_fn release_clone_rq;
|
|
dm_endio_fn end_io;
|
|
dm_request_endio_fn rq_end_io;
|
|
dm_presuspend_fn presuspend;
|
|
dm_presuspend_undo_fn presuspend_undo;
|
|
dm_postsuspend_fn postsuspend;
|
|
dm_preresume_fn preresume;
|
|
dm_resume_fn resume;
|
|
dm_status_fn status;
|
|
dm_message_fn message;
|
|
dm_prepare_ioctl_fn prepare_ioctl;
|
|
dm_busy_fn busy;
|
|
dm_iterate_devices_fn iterate_devices;
|
|
dm_io_hints_fn io_hints;
|
|
dm_dax_direct_access_fn direct_access;
|
|
dm_dax_copy_from_iter_fn dax_copy_from_iter;
|
|
|
|
/* For internal device-mapper use. */
|
|
struct list_head list;
|
|
};
|
|
|
|
/*
|
|
* Target features
|
|
*/
|
|
|
|
/*
|
|
* Any table that contains an instance of this target must have only one.
|
|
*/
|
|
#define DM_TARGET_SINGLETON 0x00000001
|
|
#define dm_target_needs_singleton(type) ((type)->features & DM_TARGET_SINGLETON)
|
|
|
|
/*
|
|
* Indicates that a target does not support read-only devices.
|
|
*/
|
|
#define DM_TARGET_ALWAYS_WRITEABLE 0x00000002
|
|
#define dm_target_always_writeable(type) \
|
|
((type)->features & DM_TARGET_ALWAYS_WRITEABLE)
|
|
|
|
/*
|
|
* Any device that contains a table with an instance of this target may never
|
|
* have tables containing any different target type.
|
|
*/
|
|
#define DM_TARGET_IMMUTABLE 0x00000004
|
|
#define dm_target_is_immutable(type) ((type)->features & DM_TARGET_IMMUTABLE)
|
|
|
|
/*
|
|
* Indicates that a target may replace any target; even immutable targets.
|
|
* .map, .map_rq, .clone_and_map_rq and .release_clone_rq are all defined.
|
|
*/
|
|
#define DM_TARGET_WILDCARD 0x00000008
|
|
#define dm_target_is_wildcard(type) ((type)->features & DM_TARGET_WILDCARD)
|
|
|
|
/*
|
|
* Some targets need to be sent the same WRITE bio severals times so
|
|
* that they can send copies of it to different devices. This function
|
|
* examines any supplied bio and returns the number of copies of it the
|
|
* target requires.
|
|
*/
|
|
typedef unsigned (*dm_num_write_bios_fn) (struct dm_target *ti, struct bio *bio);
|
|
|
|
/*
|
|
* A target implements own bio data integrity.
|
|
*/
|
|
#define DM_TARGET_INTEGRITY 0x00000010
|
|
#define dm_target_has_integrity(type) ((type)->features & DM_TARGET_INTEGRITY)
|
|
|
|
/*
|
|
* A target passes integrity data to the lower device.
|
|
*/
|
|
#define DM_TARGET_PASSES_INTEGRITY 0x00000020
|
|
#define dm_target_passes_integrity(type) ((type)->features & DM_TARGET_PASSES_INTEGRITY)
|
|
|
|
/*
|
|
* Indicates that a target supports host-managed zoned block devices.
|
|
*/
|
|
#define DM_TARGET_ZONED_HM 0x00000040
|
|
#define dm_target_supports_zoned_hm(type) ((type)->features & DM_TARGET_ZONED_HM)
|
|
|
|
struct dm_target {
|
|
struct dm_table *table;
|
|
struct target_type *type;
|
|
|
|
/* target limits */
|
|
sector_t begin;
|
|
sector_t len;
|
|
|
|
/* If non-zero, maximum size of I/O submitted to a target. */
|
|
uint32_t max_io_len;
|
|
|
|
/*
|
|
* A number of zero-length barrier bios that will be submitted
|
|
* to the target for the purpose of flushing cache.
|
|
*
|
|
* The bio number can be accessed with dm_bio_get_target_bio_nr.
|
|
* It is a responsibility of the target driver to remap these bios
|
|
* to the real underlying devices.
|
|
*/
|
|
unsigned num_flush_bios;
|
|
|
|
/*
|
|
* The number of discard bios that will be submitted to the target.
|
|
* The bio number can be accessed with dm_bio_get_target_bio_nr.
|
|
*/
|
|
unsigned num_discard_bios;
|
|
|
|
/*
|
|
* The number of WRITE SAME bios that will be submitted to the target.
|
|
* The bio number can be accessed with dm_bio_get_target_bio_nr.
|
|
*/
|
|
unsigned num_write_same_bios;
|
|
|
|
/*
|
|
* The number of WRITE ZEROES bios that will be submitted to the target.
|
|
* The bio number can be accessed with dm_bio_get_target_bio_nr.
|
|
*/
|
|
unsigned num_write_zeroes_bios;
|
|
|
|
/*
|
|
* The minimum number of extra bytes allocated in each io for the
|
|
* target to use.
|
|
*/
|
|
unsigned per_io_data_size;
|
|
|
|
/*
|
|
* If defined, this function is called to find out how many
|
|
* duplicate bios should be sent to the target when writing
|
|
* data.
|
|
*/
|
|
dm_num_write_bios_fn num_write_bios;
|
|
|
|
/* target specific data */
|
|
void *private;
|
|
|
|
/* Used to provide an error string from the ctr */
|
|
char *error;
|
|
|
|
/*
|
|
* Set if this target needs to receive flushes regardless of
|
|
* whether or not its underlying devices have support.
|
|
*/
|
|
bool flush_supported:1;
|
|
|
|
/*
|
|
* Set if this target needs to receive discards regardless of
|
|
* whether or not its underlying devices have support.
|
|
*/
|
|
bool discards_supported:1;
|
|
|
|
/*
|
|
* Set if the target required discard bios to be split
|
|
* on max_io_len boundary.
|
|
*/
|
|
bool split_discard_bios:1;
|
|
|
|
/*
|
|
* Set if inline crypto capabilities from this target's underlying
|
|
* device(s) can be exposed via the device-mapper device.
|
|
*/
|
|
bool may_passthrough_inline_crypto:1;
|
|
};
|
|
|
|
/* Each target can link one of these into the table */
|
|
struct dm_target_callbacks {
|
|
struct list_head list;
|
|
int (*congested_fn) (struct dm_target_callbacks *, int);
|
|
};
|
|
|
|
/*
|
|
* For bio-based dm.
|
|
* One of these is allocated for each bio.
|
|
* This structure shouldn't be touched directly by target drivers.
|
|
* It is here so that we can inline dm_per_bio_data and
|
|
* dm_bio_from_per_bio_data
|
|
*/
|
|
struct dm_target_io {
|
|
struct dm_io *io;
|
|
struct dm_target *ti;
|
|
unsigned target_bio_nr;
|
|
unsigned *len_ptr;
|
|
struct bio clone;
|
|
};
|
|
|
|
static inline void *dm_per_bio_data(struct bio *bio, size_t data_size)
|
|
{
|
|
return (char *)bio - offsetof(struct dm_target_io, clone) - data_size;
|
|
}
|
|
|
|
static inline struct bio *dm_bio_from_per_bio_data(void *data, size_t data_size)
|
|
{
|
|
return (struct bio *)((char *)data + data_size + offsetof(struct dm_target_io, clone));
|
|
}
|
|
|
|
static inline unsigned dm_bio_get_target_bio_nr(const struct bio *bio)
|
|
{
|
|
return container_of(bio, struct dm_target_io, clone)->target_bio_nr;
|
|
}
|
|
|
|
int dm_register_target(struct target_type *t);
|
|
void dm_unregister_target(struct target_type *t);
|
|
|
|
/*
|
|
* Target argument parsing.
|
|
*/
|
|
struct dm_arg_set {
|
|
unsigned argc;
|
|
char **argv;
|
|
};
|
|
|
|
/*
|
|
* The minimum and maximum value of a numeric argument, together with
|
|
* the error message to use if the number is found to be outside that range.
|
|
*/
|
|
struct dm_arg {
|
|
unsigned min;
|
|
unsigned max;
|
|
char *error;
|
|
};
|
|
|
|
/*
|
|
* Validate the next argument, either returning it as *value or, if invalid,
|
|
* returning -EINVAL and setting *error.
|
|
*/
|
|
int dm_read_arg(const struct dm_arg *arg, struct dm_arg_set *arg_set,
|
|
unsigned *value, char **error);
|
|
|
|
/*
|
|
* Process the next argument as the start of a group containing between
|
|
* arg->min and arg->max further arguments. Either return the size as
|
|
* *num_args or, if invalid, return -EINVAL and set *error.
|
|
*/
|
|
int dm_read_arg_group(const struct dm_arg *arg, struct dm_arg_set *arg_set,
|
|
unsigned *num_args, char **error);
|
|
|
|
/*
|
|
* Return the current argument and shift to the next.
|
|
*/
|
|
const char *dm_shift_arg(struct dm_arg_set *as);
|
|
|
|
/*
|
|
* Move through num_args arguments.
|
|
*/
|
|
void dm_consume_args(struct dm_arg_set *as, unsigned num_args);
|
|
|
|
/*-----------------------------------------------------------------
|
|
* Functions for creating and manipulating mapped devices.
|
|
* Drop the reference with dm_put when you finish with the object.
|
|
*---------------------------------------------------------------*/
|
|
|
|
/*
|
|
* DM_ANY_MINOR chooses the next available minor number.
|
|
*/
|
|
#define DM_ANY_MINOR (-1)
|
|
int dm_create(int minor, struct mapped_device **md);
|
|
|
|
/*
|
|
* Reference counting for md.
|
|
*/
|
|
struct mapped_device *dm_get_md(dev_t dev);
|
|
void dm_get(struct mapped_device *md);
|
|
int dm_hold(struct mapped_device *md);
|
|
void dm_put(struct mapped_device *md);
|
|
|
|
/*
|
|
* An arbitrary pointer may be stored alongside a mapped device.
|
|
*/
|
|
void dm_set_mdptr(struct mapped_device *md, void *ptr);
|
|
void *dm_get_mdptr(struct mapped_device *md);
|
|
|
|
/*
|
|
* Export the device via the ioctl interface (uses mdptr).
|
|
*/
|
|
int dm_ioctl_export(struct mapped_device *md, const char *name,
|
|
const char *uuid);
|
|
|
|
/*
|
|
* A device can still be used while suspended, but I/O is deferred.
|
|
*/
|
|
int dm_suspend(struct mapped_device *md, unsigned suspend_flags);
|
|
int dm_resume(struct mapped_device *md);
|
|
|
|
/*
|
|
* Event functions.
|
|
*/
|
|
uint32_t dm_get_event_nr(struct mapped_device *md);
|
|
int dm_wait_event(struct mapped_device *md, int event_nr);
|
|
uint32_t dm_next_uevent_seq(struct mapped_device *md);
|
|
void dm_uevent_add(struct mapped_device *md, struct list_head *elist);
|
|
|
|
/*
|
|
* Info functions.
|
|
*/
|
|
const char *dm_device_name(struct mapped_device *md);
|
|
int dm_copy_name_and_uuid(struct mapped_device *md, char *name, char *uuid);
|
|
struct gendisk *dm_disk(struct mapped_device *md);
|
|
int dm_suspended(struct dm_target *ti);
|
|
int dm_noflush_suspending(struct dm_target *ti);
|
|
void dm_accept_partial_bio(struct bio *bio, unsigned n_sectors);
|
|
void dm_remap_zone_report(struct dm_target *ti, struct bio *bio,
|
|
sector_t start);
|
|
union map_info *dm_get_rq_mapinfo(struct request *rq);
|
|
|
|
struct queue_limits *dm_get_queue_limits(struct mapped_device *md);
|
|
|
|
void dm_lock_md_type(struct mapped_device *md);
|
|
void dm_unlock_md_type(struct mapped_device *md);
|
|
void dm_set_md_type(struct mapped_device *md, unsigned type);
|
|
unsigned dm_get_md_type(struct mapped_device *md);
|
|
int dm_setup_md_queue(struct mapped_device *md, struct dm_table *t);
|
|
unsigned dm_table_get_type(struct dm_table *t);
|
|
|
|
/*
|
|
* Geometry functions.
|
|
*/
|
|
int dm_get_geometry(struct mapped_device *md, struct hd_geometry *geo);
|
|
int dm_set_geometry(struct mapped_device *md, struct hd_geometry *geo);
|
|
|
|
/*-----------------------------------------------------------------
|
|
* Functions for manipulating device-mapper tables.
|
|
*---------------------------------------------------------------*/
|
|
|
|
/*
|
|
* First create an empty table.
|
|
*/
|
|
int dm_table_create(struct dm_table **result, fmode_t mode,
|
|
unsigned num_targets, struct mapped_device *md);
|
|
|
|
/*
|
|
* Then call this once for each target.
|
|
*/
|
|
int dm_table_add_target(struct dm_table *t, const char *type,
|
|
sector_t start, sector_t len, char *params);
|
|
|
|
/*
|
|
* Target_ctr should call this if it needs to add any callbacks.
|
|
*/
|
|
void dm_table_add_target_callbacks(struct dm_table *t, struct dm_target_callbacks *cb);
|
|
|
|
/*
|
|
* Target can use this to set the table's type.
|
|
* Can only ever be called from a target's ctr.
|
|
* Useful for "hybrid" target (supports both bio-based
|
|
* and request-based).
|
|
*/
|
|
void dm_table_set_type(struct dm_table *t, enum dm_queue_mode type);
|
|
|
|
/*
|
|
* Finally call this to make the table ready for use.
|
|
*/
|
|
int dm_table_complete(struct dm_table *t);
|
|
|
|
/*
|
|
* Target may require that it is never sent I/O larger than len.
|
|
*/
|
|
int __must_check dm_set_target_max_io_len(struct dm_target *ti, sector_t len);
|
|
|
|
/*
|
|
* Table reference counting.
|
|
*/
|
|
struct dm_table *dm_get_live_table(struct mapped_device *md, int *srcu_idx);
|
|
void dm_put_live_table(struct mapped_device *md, int srcu_idx);
|
|
void dm_sync_table(struct mapped_device *md);
|
|
|
|
/*
|
|
* Queries
|
|
*/
|
|
sector_t dm_table_get_size(struct dm_table *t);
|
|
unsigned int dm_table_get_num_targets(struct dm_table *t);
|
|
fmode_t dm_table_get_mode(struct dm_table *t);
|
|
struct mapped_device *dm_table_get_md(struct dm_table *t);
|
|
|
|
/*
|
|
* Trigger an event.
|
|
*/
|
|
void dm_table_event(struct dm_table *t);
|
|
|
|
/*
|
|
* Run the queue for request-based targets.
|
|
*/
|
|
void dm_table_run_md_queue_async(struct dm_table *t);
|
|
|
|
/*
|
|
* The device must be suspended before calling this method.
|
|
* Returns the previous table, which the caller must destroy.
|
|
*/
|
|
struct dm_table *dm_swap_table(struct mapped_device *md,
|
|
struct dm_table *t);
|
|
|
|
/*
|
|
* A wrapper around vmalloc.
|
|
*/
|
|
void *dm_vcalloc(unsigned long nmemb, unsigned long elem_size);
|
|
|
|
/*-----------------------------------------------------------------
|
|
* Macros.
|
|
*---------------------------------------------------------------*/
|
|
#define DM_NAME "device-mapper"
|
|
|
|
#define DM_RATELIMIT(pr_func, fmt, ...) \
|
|
do { \
|
|
static DEFINE_RATELIMIT_STATE(rs, DEFAULT_RATELIMIT_INTERVAL, \
|
|
DEFAULT_RATELIMIT_BURST); \
|
|
\
|
|
if (__ratelimit(&rs)) \
|
|
pr_func(DM_FMT(fmt), ##__VA_ARGS__); \
|
|
} while (0)
|
|
|
|
#define DM_FMT(fmt) DM_NAME ": " DM_MSG_PREFIX ": " fmt "\n"
|
|
|
|
#define DMCRIT(fmt, ...) pr_crit(DM_FMT(fmt), ##__VA_ARGS__)
|
|
|
|
#define DMERR(fmt, ...) pr_err(DM_FMT(fmt), ##__VA_ARGS__)
|
|
#define DMERR_LIMIT(fmt, ...) DM_RATELIMIT(pr_err, fmt, ##__VA_ARGS__)
|
|
#define DMWARN(fmt, ...) pr_warn(DM_FMT(fmt), ##__VA_ARGS__)
|
|
#define DMWARN_LIMIT(fmt, ...) DM_RATELIMIT(pr_warn, fmt, ##__VA_ARGS__)
|
|
#define DMINFO(fmt, ...) pr_info(DM_FMT(fmt), ##__VA_ARGS__)
|
|
#define DMINFO_LIMIT(fmt, ...) DM_RATELIMIT(pr_info, fmt, ##__VA_ARGS__)
|
|
|
|
#ifdef CONFIG_DM_DEBUG
|
|
#define DMDEBUG(fmt, ...) printk(KERN_DEBUG DM_FMT(fmt), ##__VA_ARGS__)
|
|
#define DMDEBUG_LIMIT(fmt, ...) DM_RATELIMIT(pr_debug, fmt, ##__VA_ARGS__)
|
|
#else
|
|
#define DMDEBUG(fmt, ...) no_printk(fmt, ##__VA_ARGS__)
|
|
#define DMDEBUG_LIMIT(fmt, ...) no_printk(fmt, ##__VA_ARGS__)
|
|
#endif
|
|
|
|
#define DMEMIT(x...) sz += ((sz >= maxlen) ? \
|
|
0 : scnprintf(result + sz, maxlen - sz, x))
|
|
|
|
/*
|
|
* Definitions of return values from target end_io function.
|
|
*/
|
|
#define DM_ENDIO_DONE 0
|
|
#define DM_ENDIO_INCOMPLETE 1
|
|
#define DM_ENDIO_REQUEUE 2
|
|
|
|
/*
|
|
* Definitions of return values from target map function.
|
|
*/
|
|
#define DM_MAPIO_SUBMITTED 0
|
|
#define DM_MAPIO_REMAPPED 1
|
|
#define DM_MAPIO_REQUEUE DM_ENDIO_REQUEUE
|
|
#define DM_MAPIO_DELAY_REQUEUE 3
|
|
#define DM_MAPIO_KILL 4
|
|
|
|
#define dm_sector_div64(x, y)( \
|
|
{ \
|
|
u64 _res; \
|
|
(x) = div64_u64_rem(x, y, &_res); \
|
|
_res; \
|
|
} \
|
|
)
|
|
|
|
/*
|
|
* Ceiling(n / sz)
|
|
*/
|
|
#define dm_div_up(n, sz) (((n) + (sz) - 1) / (sz))
|
|
|
|
#define dm_sector_div_up(n, sz) ( \
|
|
{ \
|
|
sector_t _r = ((n) + (sz) - 1); \
|
|
sector_div(_r, (sz)); \
|
|
_r; \
|
|
} \
|
|
)
|
|
|
|
/*
|
|
* ceiling(n / size) * size
|
|
*/
|
|
#define dm_round_up(n, sz) (dm_div_up((n), (sz)) * (sz))
|
|
|
|
#define dm_array_too_big(fixed, obj, num) \
|
|
((num) > (UINT_MAX - (fixed)) / (obj))
|
|
|
|
/*
|
|
* Sector offset taken relative to the start of the target instead of
|
|
* relative to the start of the device.
|
|
*/
|
|
#define dm_target_offset(ti, sector) ((sector) - (ti)->begin)
|
|
|
|
static inline sector_t to_sector(unsigned long long n)
|
|
{
|
|
return (n >> SECTOR_SHIFT);
|
|
}
|
|
|
|
static inline unsigned long to_bytes(sector_t n)
|
|
{
|
|
return (n << SECTOR_SHIFT);
|
|
}
|
|
|
|
#endif /* _LINUX_DEVICE_MAPPER_H */
|