This is the merge of the upstream LTS release of 5.15.94 into the android13-5.15 branch. It contains the following commits: *5448b2fda8Merge 5.15.94 into android13-5.15-lts |\ | *e2c1a934fdLinux 5.15.94 | *17170acdc7Documentation/hw-vuln: Add documentation for Cross-Thread Return Predictions | *5122e0e443KVM: x86: Mitigate the cross-thread return address predictions bug | *8f12dcab90x86/speculation: Identify processors vulnerable to SMT RSB predictions | *e63c434de8drm/i915: Fix VBT DSI DVO port handling | *fc88c68381drm/i915: Initialize the obj flags for shmem objects | *2e557c8ca2drm/amdgpu/fence: Fix oops due to non-matching drm_sched init/fini | *3af734f3eaFix page corruption caused by racy check in __free_pages | *c94ce5ea68arm64: dts: meson-axg: Make mmc host controller interrupts level-sensitive | *b796c02df3arm64: dts: meson-g12-common: Make mmc host controller interrupts level-sensitive | *5d9b771f53arm64: dts: meson-gx: Make mmc host controller interrupts level-sensitive | *ac39dce119rtmutex: Ensure that the top waiter is always woken up | *86f7e42393powerpc/64s/interrupt: Fix interrupt exit race with security mitigation switch | *2907cf3f2eriscv: Fixup race condition on PG_dcache_clean in flush_icache_pte | *beb1cefa3cceph: flush cap releases when the session is flushed | *86733ab239clk: ingenic: jz4760: Update M/N/OD calculation algorithm | *239e927eb2usb: typec: altmodes/displayport: Fix probe pin assign check | *48aecce116usb: core: add quirk for Alcor Link AK9563 smartcard reader | *a8178bb1c7btrfs: free device in btrfs_close_devices for a single device filesystem | *8d13f2c3e2mptcp: be careful on subflow status propagation on errors | *25141fb411net: USB: Fix wrong-direction WARNING in plusb.c | *d1fba1e096cifs: Fix use-after-free in rdata->read_into_pages() | *1b83e7e174pinctrl: intel: Restore the pins that used to be in Direct IRQ mode | *f5f025b703spi: dw: Fix wrong FIFO level setting for long xfers | *71668706fbpinctrl: single: fix potential NULL dereference | *a2a1065739pinctrl: aspeed: Fix confusing types in return value | *99450163bcpinctrl: mediatek: Fix the drive register definition of some Pins | *9f0d2c2684ASoC: topology: Return -ENOMEM on memory allocation failure | *1a52ef89e3riscv: stacktrace: Fix missing the first frame | *5fb8154334ALSA: pci: lx6464es: fix a debug loop | *105ea562f6selftests: forwarding: lib: quote the sysctl values | *528e3f3a4brds: rds_rm_zerocopy_callback() use list_first_entry() | *48d6d8f2f6igc: Add ndo_tx_timeout support | *62ff7dd961net/mlx5: Serialize module cleanup with reload and remove | *95d2394f84net/mlx5: fw_tracer, Zero consumer index when reloading the tracer | *ab7f3f6a9dnet/mlx5: fw_tracer, Clear load bit when freeing string DBs buffers | *193528646enet/mlx5e: IPoIB, Show unknown speed instead of error | *7c6e8eb617net/mlx5: Bridge, fix ageing of peer FDB entries | *49ece61a07net/mlx5e: Update rx ring hw mtu upon each rx-fcs flag change | *31172267banet/mlx5e: Introduce the mlx5e_flush_rq function | *e4e4e93d31net/mlx5e: Move repeating clear_bit in mlx5e_rx_reporter_err_rq_cqe_recover | *3f18b9ed8cnet: mscc: ocelot: fix VCAP filters not matching on MAC with "protocol 802.1Q" | *6acb5d853bnet: dsa: mt7530: don't change PVC_EG_TAG when CPU port becomes VLAN-aware | *ca834a0178ice: Do not use WQ_MEM_RECLAIM flag for workqueue | *70d48c7992uapi: add missing ip/ipv6 header dependencies for linux/stddef.h | *3cec44036fionic: clean interrupt before enabling queue to avoid credit race | *fad12afe87net: phy: meson-gxl: use MMD access dummy stubs for GXL, internal PHY | *d23385a200bonding: fix error checking in bond_debug_reregister() | *11006d9d08net: phylink: move phy_device_free() to correctly release phy device | *fb022d7b1cxfrm: fix bug with DSCP copy to v6 from v4 tunnel | *6fe1ad42afRDMA/usnic: use iommu_map_atomic() under spin_lock() | *8f5fe1cd8eRDMA/irdma: Fix potential NULL-ptr-dereference | *1b4ef90cbcIB/IPoIB: Fix legacy IPoIB due to wrong number of queues | *5dc688fae6xfrm/compat: prevent potential spectre v1 gadget in xfrm_xlate32_attr() | *9bae58d58bIB/hfi1: Restore allocated resources on failed copyout | *558b1fa01cxfrm: compat: change expression for switch in xfrm_xlate64 | *238b38e89fcan: j1939: do not wait 250 ms if the same addr was already claimed | *d859184b60of/address: Return an error when no valid dma-ranges are found | *70f37b3118tracing: Fix poll() and select() do not work on per_cpu trace_pipe and trace_pipe_raw | *df01749503ALSA: hda/realtek: Enable mute/micmute LEDs on HP Elitebook, 645 G9 | *ca9d542203ALSA: hda/realtek: Fix the speaker output on Samsung Galaxy Book2 Pro 360 | *706b6d86a6ALSA: emux: Avoid potential array out-of-bound in snd_emux_xg_control() | *731fc29de6ALSA: hda/realtek: Add Positivo N14KP6-TG | *b938059807btrfs: zlib: zero-initialize zlib workspace | *e65faa7e39btrfs: limit device extents to the device size | *2e4dd07fdamigrate: hugetlb: check for hugetlb shared PMD in node migration | *072e7412e8mm/migration: return errno when isolate_huge_page failed * |f977f92131Revert "nvmem: core: remove nvmem_config wp_gpio" * |787413edadMerge 5.15.93 into android13-5.15-lts |\| | *85d7786c66Linux 5.15.93 | *6e2fac197dbpf: Skip invalid kfunc call in backtrack_insn | *46c9088cabgfs2: Always check inode size of inline inodes | *8eb2e58a92gfs2: Cosmetic gfs2_dinode_{in,out} cleanup | *e4991910f1wifi: brcmfmac: Check the count value of channel spec to prevent out-of-bounds reads | *97ccfffcc0f2fs: fix to do sanity check on i_extra_isize in is_alive() | *64fa364ad3fbdev: smscufx: fix error handling code in ufx_usb_probe | *a77141a063ovl: Use "buf" flexible array for memcpy() destination | *1692fedd0ffs/ntfs3: Validate attribute data and valid sizes | *a5b9cb7276powerpc/imc-pmu: Revert nest_init_lock to being a mutex | *3691f43a09iio:adc:twl6030: Enable measurement of VAC | *8c84f50390bpf: Do not reject when the stack read size is different from the tracked scalar size | *14b6198abbbpf: Fix incorrect state pruning for <8B spill/fill | *575a9f6fefphy: qcom-qmp-combo: fix runtime suspend | *e58df87394phy: qcom-qmp-combo: fix broken power on | *368ea32e0aphy: qcom-qmp-usb: fix memleak on probe deferral | *2f27d3811aphy: qcom-qmp-combo: fix memleak on probe deferral | *0cb10ddab7phy: qcom-qmp-combo: disable runtime PM on unbind | *0ef5ffe116serial: 8250_dma: Fix DMA Rx rearm race | *e30328f599serial: 8250_dma: Fix DMA Rx completion race | *a5a171f61anvmem: core: fix cell removal on error | *6d9fa3ff65nvmem: core: remove nvmem_config wp_gpio | *adf80e072cnvmem: core: initialise nvmem->id early | *e3ebc3e23bdrm/i915: Fix potential bit_17 double-free | *997bed0f3cSquashfs: fix handling and sanity checking of xattr_ids count | *7a0cfaf9d4highmem: round down the address passed to kunmap_flush_on_unmap() | *5dbe1ebd56mm/swapfile: add cond_resched() in get_swap_pages() | *daf8241804fpga: stratix10-soc: Fix return value check in s10_ops_write_init() | *afd32b6831x86/debug: Fix stack recursion caused by wrongly ordered DR7 accesses | *066ecbf1a5kernel/irq/irqdomain.c: fix memory leak with using debugfs_lookup() | *481bf49f58usb: gadget: f_uac2: Fix incorrect increment of bNumEndpoints | *fdf40e5824mm: hugetlb: proc: check for hugetlb shared PMD in /proc/PID/smaps | *6c300351c5riscv: disable generation of unwind tables | *a5c275add9parisc: Wire up PTRACE_GETREGS/PTRACE_SETREGS for compat case | *a964decd13parisc: Fix return code of pdc_iodc_print() | *488eaf0625nvmem: qcom-spmi-sdam: fix module autoloading | *8569beb66fiio: imu: fxos8700: fix MAGN sensor scale and unit | *8aa5cdcfafiio: imu: fxos8700: remove definition FXOS8700_CTRL_ODR_MIN | *4112ba1ad5iio: imu: fxos8700: fix failed initialization ODR mode assignment | *abf7b2ba51iio: imu: fxos8700: fix incorrect ODR mode readback | *412757741ciio: imu: fxos8700: fix swapped ACCEL and MAGN channels readback | *34909532b1iio: imu: fxos8700: fix map label of channel type to MAGN sensor | *8346eb4987iio: imu: fxos8700: fix IMU data bits returned to user space | *7567cdf3ceiio: imu: fxos8700: fix incomplete ACCEL and MAGN channels readback | *6969852220iio: imu: fxos8700: fix ACCEL measurement range selection | *cdacfb2205iio:adc:twl6030: Enable measurements of VUSB, VBAT and others | *9988063dceiio: adc: berlin2-adc: Add missing of_node_put() in error path | *c691a5c0fdiio: hid: fix the retval in gyro_3d_capture_sample | *ef80a34699iio: hid: fix the retval in accel_3d_capture_sample | *c4eae85c73efi: Accept version 2 of memory attributes table | *710db82063ALSA: hda/realtek: Add Acer Predator PH315-54 | *3fbddf86d9watchdog: diag288_wdt: fix __diag288() inline assembly | *700dd5bc72watchdog: diag288_wdt: do not use stack buffers for hardware data | *21bc51e29enet: qrtr: free memory on error path in radix_tree_insert() | *dccbd062d7fbcon: Check font dimension limits | *5d7500d991Input: i8042 - add Clevo PCX0DX to i8042 quirk table | *fc9e27f3bavc_screen: move load of struct vc_data pointer in vcs_read() to avoid UAF | *9ba1188a71usb: gadget: f_fs: Fix unbalanced spinlock in __ffs_ep0_queue_wait | *fe86480e90usb: dwc3: qcom: enable vbus override when in OTG dr-mode | *a412fe7bafiio: adc: stm32-dfsdm: fill module aliases | *9944659398drm/amd/display: Fix timing not changning when freesync video is enabled | *a3967128bcnet/x25: Fix to not accept on connected socket | *396ea318e7platform/x86: gigabyte-wmi: add support for B450M DS3H WIFI-CF | *1577524633platform/x86: dell-wmi: Add a keymap for KEY_MUTE in type 0x0010 table | *540cea9f9bi2c: rk3x: fix a bunch of kernel-doc warnings | *0aaabdb900scsi: iscsi_tcp: Fix UAF during login when accessing the shost ipaddress | *17b738590bscsi: iscsi_tcp: Fix UAF during logout when accessing the shost ipaddress | *8cd0499f9cperf/x86/intel: Add Emerald Rapids | *7093515370scsi: target: core: Fix warning on RT kernels | *b7960f5436i2c: mxs: suppress probe-deferral error message | *b9b87fc34bi2c: designware-pci: Add new PCI IDs for AMD NAVI GPU | *d8fc0b5fb3efi: fix potential NULL deref in efi_mem_reserve_persistent | *f423c2efd5net: openvswitch: fix flow memory leak in ovs_flow_cmd_new | *7985028647virtio-net: Keep stop() to follow mirror sequence of open() | *5d884f9e80selftests: net: udpgso_bench_tx: Cater for pending datagrams zerocopy benchmarking | *63aa63af3aselftests: net: udpgso_bench: Fix racing bug between the rx/tx programs | *d41a3f9cc2selftests: net: udpgso_bench_rx/tx: Stop when wrong CLI args are provided | *5af98283e5selftests: net: udpgso_bench_rx: Fix 'used uninitialized' compiler warning | *89e0701e03ata: libata: Fix sata_down_spd_limit() when no link speed is reported | *9ab896775fcan: j1939: fix errant WARN_ON_ONCE in j1939_session_deactivate | *02d77d98e0igc: return an error if the mac type is unknown in igc_ptp_systim_to_hwtstamp() | *04a7355820riscv: kprobe: Fixup kernel panic when probing an illegal position | *206c367b6aip/ip6_gre: Fix non-point-to-point tunnel not generating IPv6 link local address | *90178bc0f2ip/ip6_gre: Fix changing addr gen mode not generating IPv6 link local address | *dfe2f0ea38net: phy: meson-gxl: Add generic dummy stubs for MMD register access | *b7398efe24squashfs: harden sanity check in squashfs_read_xattr_id_table | *89a69216f1netfilter: br_netfilter: disable sabotage_in hook after first suppression | *cdb444e73fdrm/i915/adlp: Fix typo for reference clock | *960f20d858drm/i915/guc: Fix locking when searching for a hung request | *c27e0eac56netrom: Fix use-after-free caused by accept on already connected socket | *511c922c5bblock, bfq: fix uaf for bfqq in bic_set_bfqq() | *a62c129dcbblock, bfq: replace 0/1 with false/true in bic apis | *37a744a068block/bfq-iosched.c: use "false" rather than "BLK_RW_ASYNC" | *2cd1e9c013net: phy: dp83822: Fix null pointer access on DP83825/DP83826 devices | *18c18c2110sfc: correctly advertise tunneled IPv6 segmentation | *878b06f60adpaa2-eth: execute xdp_do_flush() before napi_complete_done() | *3b5774cd6bdpaa_eth: execute xdp_do_flush() before napi_complete_done() | *5a7040a649virtio-net: execute xdp_do_flush() before napi_complete_done() | *94add5b272qede: execute xdp_do_flush() before napi_complete_done() | *a273f8e3abice: Prevent set_channel from changing queues while RDMA active | *b432e183c2fix "direction" argument of iov_iter_kvec() | *d8b8306e96fix iov_iter_bvec() "direction" argument | *389c7c0ef9READ is "data destination", not source... | *7a3649bf5bWRITE is "data source", not destination... | *83cc6a7bb7vhost/net: Clear the pending messages when the backend is removed | *7c7d344bc3scsi: Revert "scsi: core: map PQ=1, PDT=other values to SCSI_SCAN_TARGET_PRESENT" | *4b199dc094drm/vc4: hdmi: make CEC adapter name unique | *dc1f8ab25aarm64: dts: imx8mm: Fix pad control for UART1_DTE_RX | *c681d7a4edbpf, sockmap: Check for any of tcp_bpf_prots when cloning a listener | *34ad5d8885bpf: Fix to preserve reg parent/live fields when copying range info | *7b86f9ab56bpf: Support <8-byte scalar spill and refill | *1b9256c962ALSA: hda/via: Avoid potential array out-of-bound in add_secret_dac_path() | *b7abeb6916bpf: Fix a possible task gone issue with bpf_send_signal[_thread]() helpers | *cfcc2390dbASoC: Intel: bytcr_wm5102: Drop reference count of ACPI device after use | *b4b204565aASoC: Intel: bytcr_rt5640: Drop reference count of ACPI device after use | *1f1e7635c5ASoC: Intel: bytcr_rt5651: Drop reference count of ACPI device after use | *41d323c352ASoC: Intel: bytcht_es8316: Drop reference count of ACPI device after use | *6a9990e1d9ASoC: Intel: bytcht_es8316: move comment to the right place | *ffcdf35455ASoC: Intel: boards: fix spelling in comments | *bd0b17ab1bbus: sunxi-rsb: Fix error handling in sunxi_rsb_init() | *5f4543c938firewire: fix memory leak for payload of request subaction to IEC 61883-1 FCP region * |5020746bffMerge 5.15.92 into android13-5.15-lts |\| | *e515b9902fLinux 5.15.92 | *c7caf669b8net: mctp: purge receive queues on sk destruction | *046de74f9anet: fix NULL pointer in skb_segment_list | *7ab3376703selftests: Provide local define of __cpuid_count() | *e92e311cedselftests/vm: remove ARRAY_SIZE define from individual tests | *c9e52db900tools: fix ARRAY_SIZE defines in tools and selftests hdrs | *c1aa0dd52dBluetooth: fix null ptr deref on hci_sync_conn_complete_evt | *02e61196c5ACPI: processor idle: Practically limit "Dummy wait" workaround to old Intel systems | *79dd676b44extcon: usbc-tusb320: fix kernel-doc warning | *c2bd60ef20ext4: fix bad checksum after online resize | *4cd1e18bc0cifs: fix return of uninitialized rc in dfs_cache_update_tgthint() | *43acd767bddmaengine: imx-sdma: Fix a possible memory leak in sdma_transfer_init | *a54c5ad007HID: playstation: sanity check DualSense calibration data. | *6d7686cc11blk-cgroup: fix missing pd_online_fn() while activating policy | *2144859229erofs/zmap.c: Fix incorrect offset calculation | *0dfef50313bpf: Skip task with pid=1 in send_signal_common() | *e8bb772f74firmware: arm_scmi: Clear stale xfer->hdr.status | *80cb9f1a76arm64: dts: imx8mq-thor96: fix no-mmc property for SDHCI | *162fad24d2arm64: dts: freescale: Fix pca954x i2c-mux node names | *82ad105e1aARM: dts: vf610: Fix pca9548 i2c-mux node names | *5aee5f33e0ARM: dts: imx: Fix pca9547 i2c-mux node name * |7e0097918fRevert "scsi: ufs: core: Fix devfreq deadlocks" * |6ce0fcdcc2Revert "thermal/core: Rename 'trips' to 'num_trips'" * |49a5232dfbRevert "thermal: Validate new state in cur_state_store()" * |be0ca2fc43Revert "thermal/core: fix error code in __thermal_cooling_device_register()" * |9617a003ccRevert "thermal: core: call put_device() only after device_register() fails" * |ccb2c48531Revert "cpufreq: governor: Use kobject release() method to free dbs_data" * |0108f014a5Revert "gpio: use raw spinlock for gpio chip shadowed data" * |1d2449f6beRevert "gpio: mxc: Protect GPIO irqchip RMW with bgpio spinlock" * |5f51aedcbaRevert "gpio: mxc: Unlock on error path in mxc_flip_edge()" * |7622c50ba6Merge 5.15.91 into android13-5.15-lts |\| | *9cf4111cdfLinux 5.15.91 | *14cc13e433perf/x86/amd: fix potential integer overflow on shift of a int | *033636b322netfilter: conntrack: unify established states for SCTP paths | *0b08201158x86/i8259: Mark legacy PIC interrupts with IRQ_LEVEL | *b577400367block: fix and cleanup bio_check_ro | *1d152437e4kbuild: Allow kernel installation packaging to override pkg-config | *a196468858cpufreq: governor: Use kobject release() method to free dbs_data | *7c513ced0dcpufreq: Move to_gov_attr_set() to cpufreq.h | *cf7a08622dRevert "Input: synaptics - switch touchpad on HP Laptop 15-da3001TU to RMI mode" | *53c5d61198tools: gpio: fix -c option of gpio-event-mon | *a7d1a303fftreewide: fix up files incorrectly marked executable | *046fe53907net: mdio-mux-meson-g12a: force internal PHY off on mux switch | *86bdccde78net/tg3: resolve deadlock in tg3_reset_task() during EEH | *4364bf79d8thermal: intel: int340x: Add locking to int340x_thermal_get_trip_type() | *e69c3a0d9dnet: mctp: mark socks as dead on unhash, prevent re-add | *954cc215cdnet: ravb: Fix possible hang if RIS2_QFF1 happen | *0f7218bf0anet: ravb: Fix lack of register setting after system resumed for Gen3 | *3db4ca2938ravb: Rename "no_ptp_cfg_active" and "ptp_cfg_active" variables | *621f296f11gpio: mxc: Unlock on error path in mxc_flip_edge() | *071a839286nvme: fix passthrough csi check | *614471b7f7riscv/kprobe: Fix instruction simulation of JALR | *3391bd4235sctp: fail if no bound addresses can be used for a given scope | *b0784860e1net/sched: sch_taprio: do not schedule in taprio_reset() | *d2d3ab1b1dnetrom: Fix use-after-free of a listening socket. | *9df5ab02c6netfilter: conntrack: fix vtag checks for ABORT/SHUTDOWN_COMPLETE | *ca3cf94776ipv4: prevent potential spectre v1 gadget in fib_metrics_match() | *d50e7348b4ipv4: prevent potential spectre v1 gadget in ip_metrics_convert() | *ead06e3449netlink: annotate data races around sk_state | *c4eb423c6bnetlink: annotate data races around dst_portid and dst_group | *fac9b69a93netlink: annotate data races around nlk->portid | *8a13595600netfilter: nft_set_rbtree: skip elements in transaction from garbage collection | *2bf1435fa1netfilter: nft_set_rbtree: Switch to node list walk for overlap detection | *e481654426drm/i915/selftest: fix intel_selftest_modify_policy argument types | *66689a72banet: fix UaF in netns ops registration error path | *41b74e95f2netlink: prevent potential spectre v1 gadgets | *2f29d780bdi2c: designware: use casting of u64 in clock multiplication to avoid overflow | *b03f7ed9afscsi: ufs: core: Fix devfreq deadlocks | *858d7e9218net: mana: Fix IRQ name - add PCI and queue number | *bff5243bd3EDAC/qcom: Do not pass llcc_driv_data as edac_device_ctl_info's pvt_info | *5eedf4568dEDAC/device: Respect any driver-supplied workqueue polling value | *4b7dfd0a68ARM: 9280/1: mm: fix warning on phys_addr_t to void pointer assignment | *7807871f28ipv6: fix reachability confirmation with proxy_ndp | *f9a22f6fa1thermal: intel: int340x: Protect trip temperature from concurrent updates | *036093c08dKVM: arm64: GICv4.1: Fix race with doorbell on VPE activation/deactivation | *c56683c062KVM: x86/vmx: Do not skip segment attributes if unusable bit is set | *e91308e637ovl: fail on invalid uid/gid mapping at copy up | *33a9657d67ksmbd: limit pdu length size according to connection status | *8d83a758eeksmbd: downgrade ndr version error message to debug | *87a7f38a90ksmbd: do not sign response to session request for guest login | *4210c3555dksmbd: add max connections parameter | *cc6742b160ksmbd: add smbd max io size parameter | *3c8a5648a5i2c: mv64xxx: Add atomic_xfer method to driver | *e619ab4fb3i2c: mv64xxx: Remove shutdown method from driver | *4b83bc6f87cifs: Fix oops due to uncleared server->smbd_conn in reconnect | *89042d3d85ftrace/scripts: Update the instructions for ftrace-bisect.sh | *592ba7116ftrace_events_hist: add check for return value of 'create_hist_field' | *b0af180514tracing: Make sure trace_printk() can output as soon as it can be used | *91135d7233module: Don't wait for GOING modules | *85ee9919adKVM: SVM: fix tsc scaling cache logic | *f0227eca97scsi: hpsa: Fix allocation size for scsi_host_alloc() | *e5af9a458adrm/amdgpu: complete gfxoff allow signal during suspend without delay | *62b9e9f921Bluetooth: hci_sync: cancel cmd_timer if hci_open failed | *21998acd31exit: Use READ_ONCE() for all oops/warn limit reads | *e82b1598ebdocs: Fix path paste-o for /sys/kernel/warn_count | *1c51698ad6panic: Expose "warn_count" to sysfs | *0691ddae56panic: Introduce warn_limit | *7b98914a6cpanic: Consolidate open-coded panic_on_warn checks | *fc636b1362exit: Allow oops_limit to be disabled | *339f8a8e52exit: Expose "oops_count" to sysfs | *f80fb0001fexit: Put an upper limit on how often we can oops | *2857ce7f47panic: Separate sysctl logic from CONFIG_SMP | *e156d4dcb0ia64: make IA64_MCA_RECOVERY bool instead of tristate | *9024f77224csky: Fix function name in csky_alignment() and die() | *2ea497d153h8300: Fix build errors from do_exit() to make_task_dead() transition | *a452ca0228hexagon: Fix function name in die() | *3b39f47474objtool: Add a missing comma to avoid string concatenation | *39a26d8721exit: Add and use make_task_dead. | *b5c1acaa43kasan: no need to unset panic_on_warn in end_report() | *b5c967dc68ubsan: no need to unset panic_on_warn in ubsan_epilogue() | *e4cd210032panic: unset panic_on_warn inside panic() | *191f1f1f6akernel/panic: move panic sysctls to its own file | *654f6e8512sysctl: add a new register_sysctl_init() interface | *3aa991cde9fs: reiserfs: remove useless new_opts in reiserfs_remount | *d830531f8fx86: ACPI: cstate: Optimize C3 entry on AMD CPUs | *1f54762231drm/i915: Remove unused variable | *6e10127093Revert "selftests/bpf: check null propagation only neither reg is PTR_TO_BTF_ID" | *619ee31b96drm/i915: Allow switching away via vga-switcheroo if uninitialized | *ea435ba9ebfirmware: coreboot: Check size of table entry and use flex-array | *a4e70bcf2elockref: stop doing cpu_relax in the cmpxchg loop | *b0ee61f5eeplatform/x86: asus-nb-wmi: Add alternate mapping for KEY_SCREENLOCK | *e8d2f7f566platform/x86: touchscreen_dmi: Add info for the CSL Panther Tab HD | *2e0a8bacber8152: add vendor/device ID pair for Microsoft Devkit | *d4b717e34dscsi: hisi_sas: Set a port invalid only if there are no devices attached when refreshing port id | *e15750aa28KVM: s390: interrupt: use READ_ONCE() before cmpxchg() | *9300c65207spi: spidev: remove debug messages that access spidev->spi without locking | *48ff5d3812ASoC: fsl-asoc-card: Fix naming of AC'97 CODEC widgets | *5001ffb31dASoC: fsl_ssi: Rename AC'97 streams to avoid collisions with AC'97 CODEC | *b76120e206cpufreq: armada-37xx: stop using 0 as NULL pointer | *eda26fa856perf/x86/intel/uncore: Add Emerald Rapids | *544f9d4e9dperf/x86/msr: Add Emerald Rapids | *b1eb964d78s390: expicitly align _edata and _end symbols on page boundary | *fb45ec279bs390/debug: add _ASM_S390_ prefix to header guard | *cd488abed9drm: Add orientation quirk for Lenovo ideapad D330-10IGL | *ff7ab370b8net: usb: cdc_ether: add support for Thales Cinterion PLS62-W modem | *d6935084e4ASoC: fsl_micfil: Correct the number of steps on SX controls | *ac07316b2dcpufreq: Add SM6375 to cpufreq-dt-platdev blocklist | *f0e6dcae14kcsan: test: don't put the expect array on the stack | *c51c0b3754cpufreq: Add Tegra234 to cpufreq-dt-platdev blocklist | *28e4e8ca9escsi: iscsi: Fix multiple iSCSI session unbind events sent to userspace | *14b1df2004tcp: fix rate_app_limited to default to 1 | *120b8e527enet: stmmac: enable all safety features by default | *a7d736cc3cthermal: core: call put_device() only after device_register() fails | *ed08f958e4thermal/core: fix error code in __thermal_cooling_device_register() | *108a6f91e2thermal: Validate new state in cur_state_store() | *bd0ea77edfthermal/core: Rename 'trips' to 'num_trips' | *521c6ebd4fthermal/core: Remove duplicate information when an error occurs | *6504afa263net: dsa: microchip: ksz9477: port map correction in ALU table entry register | *18346db185selftests/net: toeplitz: fix race on tpacket_v3 block close | *caa28c7c83driver core: Fix test_async_probe_init saves device in wrong array | *89c62cee5dw1: fix WARNING after calling w1_process() | *3d0eafe413w1: fix deadloop in __w1_remove_master_device() | *7701a4bd45device property: fix of node refcount leak in fwnode_graph_get_next_endpoint() | *ed0d8f731eptdma: pt_core_execute_cmd() should use spinlock | *29e9c67bf3octeontx2-pf: Fix the use of GFP_KERNEL in atomic context on rt | *03bff5819atcp: avoid the lookup process failing to get sk in ehash table | *5bd69d2ea8nvme-pci: fix timeout request state check | *39178dfe86drm/amd/display: fix issues with driver unload | *9a5a537e14phy: phy-can-transceiver: Skip warning if no "max-bitrate" | *4095065b59dmaengine: xilinx_dma: call of_node_put() when breaking out of for_each_child_of_node() | *5bd3c1c1bccifs: fix potential deadlock in cache_refresh_path() | *1a2a47b85cHID: betop: check shape of output reports | *b2a7309743l2tp: prevent lockdep issue in l2tp_tunnel_register() | *edf0e509cevirtio-net: correctly enable callback during start_xmit | *d3401c7624net: macb: fix PTP TX timestamp failure due to packet padding | *71c6019655dmaengine: Fix double increment of client_count in dma_chan_get() | *1e7919f0b1drm/panfrost: fix GENERIC_ATOMIC64 dependency | *a1b3e50e21net: mlx5: eliminate anonymous module_init & module_exit | *09e3fb6f53net/mlx5: E-switch, Fix setting of reserved fields on MODIFY_SCHEDULING_ELEMENT | *01a6e10810net: ipa: disable ipa interrupt during suspend | *98aec50ff7Bluetooth: Fix possible deadlock in rfcomm_sk_state_change | *0e59f60b74usb: gadget: f_fs: Ensure ep0req is dequeued before free_request | *ae8e136bcausb: gadget: f_fs: Prevent race during ffs_ep0_queue_wait | *f25cd2b731HID: revert CHERRY_MOUSE_000C quirk | *39483511fdpinctrl: rockchip: fix mux route data for rk3568 | *1dae88a0b4net: stmmac: fix invalid call to mdiobus_get_phy() | *6716838bf8HID: check empty report_list in bigben_probe() | *2b49568254HID: check empty report_list in hid_validate_values() | *ad67de330dnet: mdio: validate parameter addr in mdiobus_get_phy() | *4869129379net: usb: sr9700: Handle negative len | *2827c4eb42octeontx2-pf: Avoid use of GFP_KERNEL in atomic context | *77e8ed776cl2tp: close all race conditions in l2tp_tunnel_register() | *af22d2c0b4l2tp: convert l2tp_tunnel_list to idr | *22c7d45ca3l2tp: Don't sleep and disable BH under writer-side sk_callback_lock | *87d9205d9al2tp: Serialize access to sk_user_data with sk_callback_lock | *c53acbf2fanet/sched: sch_taprio: fix possible use-after-free | *40516d042bnet: stmmac: Fix queue statistics reading | *620aa67f80pinctrl: rockchip: fix reading pull type on rk3568 | *ddca674af1pinctrl/rockchip: add error handling for pull/drive register getters | *259ab8fb8cpinctrl/rockchip: Use temporary variable for struct device | *8cbf932c5cwifi: rndis_wlan: Prevent buffer overflow in rndis_query_oid | *f792d26e5cgpio: mxc: Always set GPIOs used as interrupt source to INPUT mode | *8335f877efgpio: mxc: Protect GPIO irqchip RMW with bgpio spinlock | *fb4fb3d267gpio: use raw spinlock for gpio chip shadowed data | *52e3eebfe6sch_htb: Avoid grafting on htb_destroy_class_offload when destroying htb | *8232e5a84dnet: enetc: avoid deadlock in enetc_tx_onestep_tstamp() | *95347e41canet: wan: Add checks for NULL for utdm in undo_uhdlc_init and unmap_si_regs | *7f129927fenet: nfc: Fix use-after-free in local_cleanup() | *397aaac884phy: rockchip-inno-usb2: Fix missing clk_disable_unprepare() in rockchip_usb2phy_power_on() | *01bdcc73dbbpf: Fix pointer-leak due to insufficient speculative store bypass mitigation | *261e2f12b6amd-xgbe: Delay AN timeout during KR training | *a8cf4af544amd-xgbe: TX Flow Ctrl Registers are h/w ver dependent | *8e897cb674ARM: dts: at91: sam9x60: fix the ddr clock for sam9x60 | *0a27dcd534NFSD: fix use-after-free in nfsd4_ssc_setup_dul() | *24af570c99phy: ti: fix Kconfig warning and operator precedence | *631fc36685arm64: dts: qcom: msm8992-libra: Fix the memory map | *dda20ffec8arm64: dts: qcom: msm8992-libra: Add CPU regulators | *37ba5e9293arm64: dts: qcom: msm8992: Don't use sfpb mutex | *bab87524f6PM: AVS: qcom-cpr: Fix an error handling path in cpr_probe() | *b7a479c764affs: initialize fsdata in affs_truncate() | *623d111689IB/hfi1: Remove user expected buffer invalidate race | *47d5fc0dcdIB/hfi1: Immediately remove invalid memory from hardware | *85caef2cfdIB/hfi1: Fix expected receive setup error exit issues | *cb193984d4IB/hfi1: Reserve user expected TIDs | *891ddfae39IB/hfi1: Reject a zero-length user expected buffer | *362c948972RDMA/core: Fix ib block iterator counter overflow | *e26c571c3btomoyo: fix broken dependency on *.conf.default | *7dfe83ecc3firmware: arm_scmi: Harden shared memory access in fetch_notification | *a653dbb70cfirmware: arm_scmi: Harden shared memory access in fetch_response | *caffa7fed1EDAC/highbank: Fix memory leak in highbank_mc_probe() | *95de286200reset: uniphier-glue: Fix possible null-ptr-deref | *4773a8cf9areset: uniphier-glue: Use reset_control_bulk API | *7b33accc8fsoc: imx8m: Fix incorrect check for of_clk_get_by_name() | *f07427f8d9arm64: dts: imx8mm-venice-gw7901: fix USB2 controller OC polarity | *c4cb73febeHID: intel_ish-hid: Add check for ishtp_dma_tx_map | *25f97c9883ARM: imx: add missing of_node_put() | *3e9d79ded9arm64: dts: imx8mm-beacon: Fix ecspi2 pinmux | *5381350761ARM: dts: imx6qdl-gw560x: Remove incorrect 'uart-has-rtscts' | *0e4bba1656ARM: dts: imx7d-pico: Use 'clock-frequency' | *108cf4c6d5ARM: dts: imx6ul-pico-dwarf: Use 'clock-frequency' | *207c9e64edarm64: dts: imx8mp-phycore-som: Remove invalid PMIC property | *7ce380fe75dmaengine: ti: k3-udma: Do conditional decrement of UDMA_CHAN_RT_PEER_BCNT_REG | *edba9b7a70memory: mvebu-devbus: Fix missing clk_disable_unprepare in mvebu_devbus_probe() | *e66f6949damemory: atmel-sdramc: Fix missing clk_disable_unprepare in atmel_ramc_probe() | *eda11ab556memory: tegra: Remove clients SID override programming * |cab35cbd71Revert "xhci: Add update_hub_device override for PCI xHCI hosts" * |29e8f224d8Revert "xhci: Detect lpm incapable xHC USB3 roothub ports from ACPI tables" * |5739b27e8fRevert "xhci: Add a flag to disable USB3 lpm on a xhci root port level." * |5b60fdf2e0Merge 5.15.90 into android13-5.15-lts |\| | *aabd5ba7e9Linux 5.15.90 | *4b6f8263e9io_uring/rw: remove leftover debug statement | *b10acfcd61io_uring/rw: ensure kiocb_end_write() is always called | *124fb13cc7io_uring: fix double poll leak on repolling | *e944f1e37bio_uring: Clean up a false-positive warning from GCC 9.3.0 | *940e8922c1mm/khugepaged: fix collapse_pte_mapped_thp() to allow anon_vma | *e83cc8a780soc: qcom: apr: Make qcom,protection-domain optional again | *982c8b1e95Revert "wifi: mac80211: fix memory leak in ieee80211_if_add()" | *40a4797e08block: mq-deadline: Rename deadline_is_seq_writes() | *3abf10b4c4net/mlx5: fix missing mutex_unlock in mlx5_fw_fatal_reporter_err_work() | *1aab00aa41net/ulp: use consistent error code when blocking ULP | *2e4c95a404io_uring/net: fix fast_iov assignment in io_setup_async_msg() | *311b298a33io_uring: io_kiocb_update_pos() should not touch file for non -1 offset | *487a086595tracing: Use alignof__(struct {type b;}) instead of offsetof() | *430443f856x86/fpu: Use _Alignof to avoid undefined behavior in TYPE_ALIGN | *f114717dfaRevert "drm/amdgpu: make display pinning more flexible (v2)" | *7a993c1be5efi: rt-wrapper: Add missing include | *de2af657caarm64: efi: Execute runtime services from a dedicated stack | *9cca110cf8fs/ntfs3: Fix attr_punch_hole() null pointer derenference | *d4d112e5c4drm/amdgpu: drop experimental flag on aldebaran | *c82fa690dadrm/amd/display: Fix COLOR_SPACE_YCBCR2020_TYPE matrix | *88c3375224drm/amd/display: Calculate output_color_space after pixel encoding adjustment | *87e605b161drm/amd/display: Fix set scaling doesn's work | *8687b8cdc3drm/i915/display: Check source height is > 0 | *5d96179166drm/i915: re-disable RC6p on Sandy Bridge | *e9a7ec188bmei: me: add meteor lake point M DID | *eb0421d90fgsmi: fix null-deref in gsmi_get_variable | *b8d99cda52serial: atmel: fix incorrect baudrate setup | *b85498385aserial: amba-pl011: fix high priority character transmission in rs486 mode | *0f150134dddmaengine: idxd: Let probe fail when workqueue cannot be enabled | *1e8c127c2edmaengine: tegra210-adma: fix global intr clear | *473e2281f7dmaengine: lgm: Move DT parsing after initialization | *73337724cbserial: pch_uart: Pass correct sg to dma_unmap_sg() | *4307a41cbcdt-bindings: phy: g12a-usb3-pcie-phy: fix compatible string documentation | *c9d55f564adt-bindings: phy: g12a-usb2-phy: fix compatible string documentation | *78aa45bb7ausb-storage: apply IGNORE_UAS only for HIKSEMI MD202 on RTL9210 | *a69c8dfb85usb: gadget: f_ncm: fix potential NULL ptr deref in ncm_bitrate() | *1ab67e87b1usb: gadget: g_webcam: Send color matching descriptor per frame | *b08167d8f0usb: typec: altmodes/displayport: Fix pin assignment calculation | *7fb1322e7ausb: typec: altmodes/displayport: Add pin assignment helper | *59f9ee3796usb: typec: tcpm: Fix altmode re-registration causes sysfs create fail | *a1c8a5c2f8usb: host: ehci-fsl: Fix module alias | *f073d10cd5usb: cdns3: remove fetched trb from cache before dequeuing | *73f4bde973USB: serial: cp210x: add SCALANCE LPE-9000 device id | *a2e075f401USB: gadgetfs: Fix race between mounting and unmounting | *2da67bff29tty: fix possible null-ptr-defer in spk_ttyio_release | *cb53a3366etty: serial: qcom-geni-serial: fix slab-out-of-bounds on RX FIFO buffer | *f322dd2e4astaging: mt7621-dts: change some node hex addresses to lower case | *6508788b2cbpf: restore the ebpf program ID for BPF_AUDIT_UNLOAD and PERF_BPF_EVENT_PROG_UNLOAD | *7b122c33bdriscv: dts: sifive: fu740: fix size of pcie 32bit memory | *701f9c3da6thunderbolt: Use correct function to calculate maximum USB3 link rate | *5b1b03a3d3cifs: do not include page data when checking signature | *64287cd456btrfs: fix race between quota rescan and disable leading to NULL pointer deref | *f2e0e1615dbtrfs: do not abort transaction on failure to write log tree when syncing log | *f653abe619mmc: sdhci-esdhc-imx: correct the tuning start tap and step setting | *9881436f01mmc: sunxi-mmc: Fix clock refcount imbalance during unbind | *33bd0db750ACPI: PRM: Check whether EFI runtime is available | *87e1ee6058comedi: adv_pci1760: Fix PWM instruction handling | *b5d24a8e4ausb: core: hub: disable autosuspend for TI TUSB8041 | *61a0890cb9misc: fastrpc: Fix use-after-free race condition for maps | *1b7b7bb400misc: fastrpc: Don't remove map on creater_process and device_release | *e7e41fcf90USB: misc: iowarrior: fix up header size for USB_DEVICE_ID_CODEMERCS_IOW100 | *f3de34d90dstaging: vchiq_arm: fix enum vchiq_status return types | *16d09c4bc9USB: serial: option: add Quectel EM05CN modem | *34d769f0c6USB: serial: option: add Quectel EM05CN (SG) modem | *768d56ed24USB: serial: option: add Quectel EC200U modem | *829916f069USB: serial: option: add Quectel EM05-G (RS) modem | *eb8808f769USB: serial: option: add Quectel EM05-G (CS) modem | *6e0430db19USB: serial: option: add Quectel EM05-G (GR) modem | *f01aefe374prlimit: do_prlimit needs to have a speculation check | *418e2c756dxhci: Detect lpm incapable xHC USB3 roothub ports from ACPI tables | *10cb7d53beusb: acpi: add helper to check port lpm capability using acpi _DSM | *1818e2a97dxhci: Add a flag to disable USB3 lpm on a xhci root port level. | *8911ff7963xhci: Add update_hub_device override for PCI xHCI hosts | *c462ac871fxhci: Fix null pointer dereference when host dies | *f39c813af0usb: xhci: Check endpoint is valid before dereferencing it | *0f175cebc4xhci-pci: set the dma max_seg_size | *89a410dbd0io_uring/rw: defer fsnotify calls to task context | *05d69b372bio_uring: do not recalculate ppos unnecessarily | *ff8a070253io_uring: update kiocb->ki_pos at execution time | *b7958caf41io_uring: remove duplicated calls to io_kiocb_ppos | *86e2d6901aio_uring: ensure that cached task references are always put on exit | *30b9068934io_uring: fix async accept on O_NONBLOCK sockets | *a79b13f249io_uring: allow re-poll if we made progress | *3c1a3d0269io_uring: support MSG_WAITALL for IORING_OP_SEND(MSG) | *390b881631io_uring: add flag for disabling provided buffer recycling | *9b7b0f2116io_uring: ensure recv and recvmsg handle MSG_WAITALL correctly | *cdc68e714dio_uring: improve send/recv error handling | *ccf06b5a98io_uring: pass in EPOLL_URING_WAKE for eventfd signaling and wakeups | *77baf39227eventfd: provide a eventfd_signal_mask() helper | *a2d8ff00a7eventpoll: add EPOLL_URING_WAKE poll wakeup flag | *a9aa4aa7a5io_uring: don't gate task_work run on TIF_NOTIFY_SIGNAL | *bd9a23a4bbhugetlb: unshare some PMDs when splitting VMAs | *393d9e3ed1drm/amd: Delay removal of the firmware framebuffer | *865e244e06drm/amdgpu: disable runtime pm on several sienna cichlid cards(v2) | *560373fb1eALSA: hda/realtek: fix mute/micmute LEDs don't work for a HP platform | *26264260a8ALSA: hda/realtek: fix mute/micmute LEDs for a HP ProBook | *1026756321efi: fix userspace infinite retry read efivars after EFI runtime services page fault | *45627a1a64nilfs2: fix general protection fault in nilfs_btree_insert() | *350d66d9e7zonefs: Detect append writes at invalid locations | *5054d001ffAdd exception protection processing for vd in axi_chan_handle_err function | *a12fd43bd1wifi: mac80211: sdata can be NULL during AMPDU start | *f96a6c009ewifi: brcmfmac: fix regression for Broadcom PCIe wifi devices | *908d1742b6Bluetooth: hci_qca: Fix driver shutdown on closed serdev | *7530fbc05ffbdev: omapfb: avoid stack overflow warning | *e1df7f0b27perf/x86/rapl: Treat Tigerlake like Icelake | *2c129e8689f2fs: let's avoid panic if extent_tree is not created | *58bac74402x86/asm: Fix an assembler warning with current binutils | *fdb4a70bb7btrfs: always report error in run_one_delayed_ref() | *f641067ea2RDMA/srp: Move large values to a new enum for gcc13 | *793f8ac218r8169: move rtl_wol_enable_rx() and rtl_prepare_power_down() | *dc072762f9net/ethtool/ioctl: return -EOPNOTSUPP if we have no phy stats | *308d24d875vduse: Validate vq_num in vduse_validate_config() | *8e1eb926a0virtio_pci: modify ENOENT to EINVAL | *64a6f3689dtools/virtio: initialize spinlocks in vring_test.c | *95fc28a8e9selftests/bpf: check null propagation only neither reg is PTR_TO_BTF_ID | *d4a9d2944fpNFS/filelayout: Fix coalescing test for single DS | *6a3319af6bbtrfs: fix trace event name typo for FLUSH_DELAYED_REFS * |52cea9ba91Merge "Merge 5.15.89 into android13-5.15-lts" into android13-5.15-lts |\ \ | * |de550d72f1Merge 5.15.89 into android13-5.15-lts | |\| | | *3bcc86eb3eLinux 5.15.89 | | *37c18ef49epinctrl: amd: Add dynamic debugging for active GPIOs | | *a5841b81adRevert "usb: ulpi: defer ulpi_register on ulpi_read_id timeout" | | *7ec9a45fc4block: handle bio_split_to_limits() NULL return | | *ba86db02d4io_uring/io-wq: only free worker if it was allocated for creation | | *bb135bcc94io_uring/io-wq: free worker if task_work creation is canceled | | *63c2fa09b8scsi: mpt3sas: Remove scsi_dma_map() error messages | | *e2ea555642efi: fix NULL-deref in init error path | | *94b6cf84dbarm64: cmpxchg_double*: hazard against entire exchange variable | | *3891fa4982arm64: atomics: remove LL/SC trampolines | | *61e86339afarm64: atomics: format whitespace consistently | | *ed4629d1e9io_uring: lock overflowing for IOPOLL | | *fbf5015141KVM: x86: Do not return host topology information from KVM_GET_SUPPORTED_CPUID | | *ee16841134Documentation: KVM: add API issues section | | *b8f3b3cffbmm: Always release pages to the buddy allocator in memblock_free_late(). | | *d2dc110deaplatform/surface: aggregator: Add missing call to ssam_request_sync_free() | | *cfd5978411igc: Fix PPS delta between two synchronized end-points | | *0bf52601ceperf build: Properly guard libbpf includes | | *205f35eee7net/mlx5e: Don't support encap rules with gbp option | | *0526fc9330net/mlx5: Fix ptp max frequency adjustment range | | *9e2c38827cnet/sched: act_mpls: Fix warning during failed attribute validation | | *e3bb44beaftools/nolibc: fix the O_* fcntl/open macro definitions for riscv | | *1e6ec75bb3tools/nolibc: restore mips branch ordering in the _start block | | *bd0431a66ctools/nolibc: Remove .global _start from the entry point code | | *a77c54f5b5tools/nolibc/arch: mark the _start symbol as weak | | *da51e086d1tools/nolibc/arch: split arch-specific code into individual files | | *8591e788betools/nolibc/types: split syscall-specific definitions into their own files | | *4fceecdeaatools/nolibc/std: move the standard type definitions to std.h | | *1792136f22tools/nolibc: use pselect6 on RISCV | | *487386a49etools/nolibc: x86-64: Use `mov $60,%eax` instead of `mov $60,%rax` | | *27af4f2260tools/nolibc: x86: Remove `r8`, `r9` and `r10` from the clobber list | | *a60b24192baf_unix: selftest: Fix the size of the parameter to connect() | | *39ae73e581nfc: pn533: Wait for out_urb's completion in pn533_usb_send_frame() | | *f6003784b1hvc/xen: lock console list traversal | | *79c58b7424octeontx2-af: Fix LMAC config in cgx_lmac_rx_tx_enable | | *303d062881tipc: fix unexpected link reset due to discovery messages | | *e79d0f97ccALSA: usb-audio: Relax hw constraints for implicit fb sync | | *c9557906bdALSA: usb-audio: Make sure to stop endpoints before closing EPs | | *83e758105bASoC: wm8904: fix wrong outputs volume after power reactivation | | *7c26d21872scsi: ufs: core: WLUN suspend SSU/enter hibern8 fail recovery | | *513fdf0b8escsi: ufs: Stop using the clock scaling lock in the error handler | | *13259b60b7scsi: mpi3mr: Refer CONFIG_SCSI_MPI3MR in Makefile | | *470f6a9175regulator: da9211: Use irq handler when ready | | *24107ad469x86/resctrl: Fix task CLOSID/RMID update race | | *cd3da505fbEDAC/device: Fix period calculation in edac_device_reset_delay_period() | | *ab0d02c53ax86/boot: Avoid using Intel mnemonics in AT&T syntax asm | | *a90d339f1fpowerpc/imc-pmu: Fix use of mutex in IRQs disabled section | | *511cf17b24netfilter: ipset: Fix overflow before widen in the bitmap_ip_create() function. | | *b22faa21b6sched/core: Fix use-after-free bug in dup_user_cpus_ptr() | | *d766ccadbeiommu/mediatek-v1: Fix an error handling path in mtk_iommu_v1_probe() | | *c929a230c8iommu/iova: Fix alloc iova overflows issue | | *4b51aa263ausb: ulpi: defer ulpi_register on ulpi_read_id timeout | | *9a8bf443f6bus: mhi: host: Fix race between channel preparation and M0 event | | *456e3794e0ipv6: raw: Deduct extension header length in rawv6_push_pending_frames | | *4c93422a54ixgbe: fix pci device refcount leak | | *e97da5d97aplatform/x86: sony-laptop: Don't turn off 0x153 keyboard backlight during probe | | *f3b1e04dafdt-bindings: msm/dsi: Don't require vcca-supply on 14nm PHY | | *52a5f596c6dt-bindings: msm/dsi: Don't require vdds-supply on 10nm PHY | | *984ad875dbdrm/msm/dp: do not complete dp_aux_cmd_fifo_tx() if irq is not for aux transfer | | *92ae83665eplatform/x86: ideapad-laptop: Add Legion 5 15ARH05 DMI id to set_fn_lock_led_list[] | | *e38b5f81dfdt-bindings: msm: dsi-phy-28nm: Add missing qcom, dsi-phy-regulator-ldo-mode | | *bb32ab40cbdt-bindings: msm: dsi-controller-main: Fix description of core clock | | *3fb8d10beedt-bindings: msm: dsi-controller-main: Fix power-domain constraint | | *dc5b651caddrm/msm/adreno: Make adreno quirks not overwrite each other | | *757d665ee1dt-bindings: msm: dsi-controller-main: Fix operating-points-v2 constraint | | *c90cf47d30platform/x86: dell-privacy: Fix SW_CAMERA_LENS_COVER reporting | | *25b5f693bcplatform/surface: aggregator: Ignore command messages not intended for us | | *ee7b8ce2ccplatform/x86: dell-privacy: Only register SW_CAMERA_LENS_COVER if present | | *e0072068adcifs: Fix uninitialized memory read for smb311 posix symlink create | | *f3495b5e9enet/mlx5e: Set action fwd flag when parsing tc action goto | | *1a8431cc20drm/i915/gt: Reset twice | | *011ecdbcd5drm/virtio: Fix GEM handle creation UAF | | *798dfeeae3s390/percpu: add READ_ONCE() to arch_this_cpu_to_op_simple() | | *a400593eb3s390/cpum_sf: add READ_ONCE() semantics to compare and swap loops | | *d4fa65960aASoC: qcom: lpass-cpu: Fix fallback SD line index handling | | *8400b91c11s390/kexec: fix ipl report address for kdump | | *c07e0babd1perf auxtrace: Fix address filter duplicate symbol selection | | *e81d82da61net: stmmac: add aux timestamps fifo clearance wait | | *44167b74a8docs: Fix the docs build with Sphinx 6.0 | | *24176bf2a1efi: tpm: Avoid READ_ONCE() for accessing the event log | | *01b966b14cselftests: kvm: Fix a compile error in selftests/kvm/rseq_test.c | | *c773ebe11cKVM: arm64: nvhe: Fix build with profile optimization | | *c1d6a72fc8KVM: arm64: Fix S1PTW handling on RO memslots | | *e04e6cd883ALSA: hda/realtek: Enable mute/micmute LEDs on HP Spectre x360 13-aw0xxx | | *b983c9a971ALSA: hda/realtek - Turn on power early | | *9ab3696881ALSA: control-led: use strscpy in set_led_id() | | *a8acfe2c6fnetfilter: nft_payload: incorrect arithmetics when fetching VLAN header bits * | |2c4f6d72f1Merge "Merge 5.15.88 into android13-5.15-lts" into android13-5.15-lts |\| | | * |773ec50a8aMerge 5.15.88 into android13-5.15-lts | |\| | | *90bb4f8f39Linux 5.15.88 | | *cbd3e6d5e5ALSA: hda - Enable headset mic on another Dell laptop with ALC3254 | | *b98dee4746ALSA: hda/hdmi: Add a HP device 0x8715 to force connect list | | *26350c21bcALSA: pcm: Move rwsem lock inside snd_ctl_elem_read to prevent UAF | | *dadd0dcaa6net/ulp: prevent ULP without clone op from entering the LISTEN status | | *04941c1d5bnet: sched: disallow noqueue for qdisc classes | | *068b512193serial: fixup backport of "serial: Deassert Transmit Enable on probe in driver-specific way" | | *46aa155758selftests/vm/pkeys: Add a regression test for setting PKRU through ptrace | | *3c1940c549x86/fpu: Emulate XRSTOR's behavior if the xfeatures PKRU bit is not set | | *3f1c81426ax86/fpu: Allow PKRU to be (once again) written by ptrace. | | *b29773d6b0x86/fpu: Add a pkru argument to copy_uabi_to_xstate() | | *9813c5fc22x86/fpu: Add a pkru argument to copy_uabi_from_kernel_to_xstate(). | | *fea26e83a1x86/fpu: Take task_struct* in copy_sigframe_from_user_to_xstate() | | *d4d152017eparisc: Align parisc MADV_XXX constants with all other architectures | * |1867565896Revert "ASoC/SoundWire: dai: expand 'stream' concept beyond SoundWire" | * |43064ed394Revert "ASoC: Intel/SOF: use set_stream() instead of set_tdm_slots() for HDAudio" | * |959d50edd2Revert "PM/devfreq: governor: Add a private governor_data for governor" * | |c34c76a947Revert "ASoC/SoundWire: dai: expand 'stream' concept beyond SoundWire" * | |33ef84070bRevert "ASoC: Intel/SOF: use set_stream() instead of set_tdm_slots() for HDAudio" * | |e60641bdcaRevert "PM/devfreq: governor: Add a private governor_data for governor" * | |793ec0a9ccMerge "Merge 5.15.87 into android13-5.15-lts" into android13-5.15-lts |\| | | * |fc4de343bdMerge 5.15.87 into android13-5.15-lts | |\| | | *d57287729eLinux 5.15.87 | | *24186c6822drm/mgag200: Fix PLL setup for G200_SE_A rev >=4 | | *e326ee018aio_uring: Fix unsigned 'res' comparison with zero in io_fixup_rw_res() | | *b2b6eefab4efi: random: combine bootloader provided RNG seed with RNG protocol output | | *99c0759495mbcache: Avoid nesting of cache->c_list_lock under bit locks | | *d50d6c193anet: hns3: fix return value check bug of rx copybreak | | *d4e6a13eb9btrfs: make thaw time super block check to also verify checksum | | *70a1dccd0eselftests: set the BUILD variable to absolute path | | *58fef3ebc8ext4: don't allow journal inode to have encrypt flag | | *bd5dc96feamptcp: use proper req destructor for IPv6 | | *78bd6ab52cmptcp: dedicated request sock for subflow in v6 | | *6e9c1aef3eRevert "ACPI: PM: Add support for upcoming AMD uPEP HID AMDI007" | | *e32f867b37ksmbd: check nt_len to be at least CIFS_ENCPWD_SIZE in ksmbd_decode_ntlmssp_auth_blob | | *4136f1ac1eksmbd: fix infinite loop in ksmbd_conn_handler_loop() | | *f10defb0behfs/hfsplus: avoid WARN_ON() for sanity check, use proper error handling | | *48d9e2e6dehfs/hfsplus: use WARN_ON for sanity check | | *f5a9bbf962drm/i915/gvt: fix vgpu debugfs clean in remove | | *ae9a615117drm/i915/gvt: fix gvt debugfs destroy | | *eb3e943a32riscv, kprobes: Stricter c.jr/c.jalr decoding | | *620a229f57riscv: uaccess: fix type of 0 variable on error in get_user() | | *8e05a993f8thermal: int340x: Add missing attribute for data rate base | | *c3222fd282io_uring: fix CQ waiting timeout handling | | *b7b9bc9305block: don't allow splitting of a REQ_NOWAIT bio | | *e1358c8787fbdev: matroxfb: G200eW: Increase max memory from 1 MB to 16 MB | | *682a7d064fnfsd: fix handling of readdir in v4root vs. mount upcall timeout | | *cb42aa7b5fx86/bugs: Flush IBP in ib_prctl_set() | | *554a880a1fx86/kexec: Fix double-free of elf header buffer | | *264241a610btrfs: check superblock to ensure the fs was not modified at thaw time | | *69f4bda5f4nvme: also return I/O command effects from nvme_command_effects | | *a6a4b057cdnvmet: use NVME_CMD_EFFECTS_CSUPP instead of open coding it | | *f9309dcaa9io_uring: check for valid register opcode earlier | | *4df413d469nvme: fix multipath crash caused by flush request when blktrace is enabled | | *03ce792128ASoC: Intel: bytcr_rt5640: Add quirk for the Advantech MICA-071 tablet | | *0dca7375e2udf: Fix extension of the last extent in the file | | *dc1bc90397caif: fix memory leak in cfctrl_linkup_request() | | *bce3680b48drm/i915: unpin on error in intel_vgpu_shadow_mm_pin() | | *da6a3653b8perf stat: Fix handling of --for-each-cgroup with --bpf-counters to match non BPF mode | | *11cd4ec635usb: rndis_host: Secure rndis_query check against int overflow | | *6ea5273c71octeontx2-pf: Fix lmtst ID used in aura free | | *4e5f2c74cbdrivers/net/bonding/bond_3ad: return when there's no aggregator | | *8414983c2efs/ntfs3: don't hold ni_lock when calling truncate_setsize() | | *a23e8376e6drm/imx: ipuv3-plane: Fix overlay plane width | | *a8f7fd322fperf tools: Fix resources leak in perf_data__open_dir() | | *a1e1521b46netfilter: ipset: Rework long task execution when adding/deleting entries | | *6f19a38483netfilter: ipset: fix hash:net,port,net hang with /0 subnet | | *774d259749net: sparx5: Fix reading of the MAC address | | *04dc4003e5net: sched: cbq: dont intepret cls results when asked to drop | | *f02327a487net: sched: atm: dont intepret cls results when asked to drop | | *95da1882cegpio: sifive: Fix refcount leak in sifive_gpio_probe | | *da9c9883ecceph: switch to vfs_inode_has_locks() to fix file lock bug | | *54e72ce5f1filelock: new helper: vfs_inode_has_locks | | *f34b03ce3adrm/meson: Reduce the FIFO lines held when AFBC is not used | | *05a8410b0fRDMA/mlx5: Fix validation of max_rd_atomic caps for DC | | *8d89870d63RDMA/mlx5: Fix mlx5_ib_get_hw_stats when used for device | | *4d112f0016net: phy: xgmiitorgmii: Fix refcount leak in xgmiitorgmii_probe | | *e5fbeb3d16net: ena: Update NUMA TPH hint register upon NUMA node update | | *7840b93cfdnet: ena: Set default value for RX interrupt moderation | | *d09b7a9d2fnet: ena: Fix rx_copybreak value update | | *0e7ad9b006net: ena: Use bitmask to indicate packet redirection | | *5d4964984bnet: ena: Account for the number of processed bytes in XDP | | *f17d9aec07net: ena: Don't register memory info on XDP exchange | | *a4aa727ad0net: ena: Fix toeplitz initial hash value | | *0bec17f1cenet: amd-xgbe: add missed tasklet_kill | | *cb2f74685fnet/mlx5e: Fix hw mtu initializing at XDP SQ allocation | | *6c72abb78bnet/mlx5e: Always clear dest encap in neigh-update-del | | *b36783bc11net/mlx5e: TC, Refactor mlx5e_tc_add_flow_mod_hdr() to get flow attr | | *f8c10eeba3net/mlx5e: IPoIB, Don't allow CQE compression to be turned on by default | | *7227bbb7c1net/mlx5: Avoid recovery in probe flows | | *9369b9afa8net/mlx5: Add forgotten cleanup calls into mlx5_init_once() error path | | *d966f2ee4bnet/mlx5: E-Switch, properly handle ingress tagged packets on VST | | *6a37a01abavdpa_sim: fix vringh initialization in vdpasim_queue_ready() | | *e3462410c3vhost: fix range used in translate_desc() | | *13871f60ecvringh: fix range used in iotlb_translate() | | *e05d4c8c28vhost/vsock: Fix error handling in vhost_vsock_init() | | *586e6fd7d5vdpa_sim: fix possible memory leak in vdpasim_net_init() and vdpasim_blk_init() | | *b63bc2db24nfc: Fix potential resource leaks | | *945e58bdafnet: dsa: mv88e6xxx: depend on PTP conditionally | | *95df720e64qlcnic: prevent ->dcb use-after-free on qlcnic_dcb_enable() failure | | *6c55953e23net: sched: fix memory leak in tcindex_set_parms | | *d14a4b24d5net: hns3: fix VF promisc mode not update when mac table full | | *7ed205b947net: hns3: fix miss L3E checking for rx packet | | *47868cb77fnet: hns3: extract macro to simplify ring stats update code | | *7457c5a776net: hns3: refactor hns3_nic_reuse_page() | | *4a6e9fb534net: hns3: add interrupts re-initialization while doing VF FLR | | *5e48ed805cnfsd: shut down the NFSv4 state objects before the filecache | | *7e2825f5fbveth: Fix race with AF_XDP exposing old or uninitialized descriptors | | *ac95cdafacnetfilter: nf_tables: honor set timeout and garbage collection updates | | *49677ea151vmxnet3: correctly report csum_level for encapsulated packet | | *9d30cb4421netfilter: nf_tables: perform type checking for existing sets | | *c3bfb7784anetfilter: nf_tables: add function to create set stateful expressions | | *996cd779c2netfilter: nf_tables: consolidate set description | | *4f1105ee72drm/panfrost: Fix GEM handle creation ref-counting | | *df493f676fbpf: pull before calling skb_postpull_rcsum() | | *d7e817e689btrfs: fix an error handling path in btrfs_defrag_leaves() | | *4d69cdba2cSUNRPC: ensure the matching upcall is in-flight upon downcall | | *af0265dfefdrm/i915/migrate: fix length calculation | | *8b25a526a5drm/i915/migrate: fix offset calculation | | *a3d1e6f9b6drm/i915/migrate: don't check the scratch page | | *5bc0b2fda4ext4: fix deadlock due to mbcache entry corruption | | *a6e4094fafmbcache: automatically delete entries from cache on freeing | | *1872549129ext4: correct inconsistent error msg in nojournal mode | | *761f88f82eext4: goto right label 'failed_mount3a' | | *eb16602140ravb: Fix "failed to switch device to config mode" message during unbind | | *4216995dbdperf probe: Fix to get the DW_AT_decl_file and DW_AT_call_file as unsinged data | | *d8bbbf2b52perf probe: Use dwarf_attr_integrate as generic DWARF attr accessor | | *b131b5f136media: s5p-mfc: Fix in register read and write for H264 | | *ff27800c0amedia: s5p-mfc: Clear workbit to handle error condition | | *4653ba32admedia: s5p-mfc: Fix to handle reference queue during finishing | | *1bd7283dc0x86/MCE/AMD: Clear DFR errors found in THR handler | | *5ddcd349d9x86/mce: Get rid of msr_ops | | *b8e7ed42bcbtrfs: fix extent map use-after-free when handling missing device in read_one_chunk | | *9c3beebd21btrfs: move missing device handling in a dedicate function | | *7528b21cebbtrfs: replace strncpy() with strscpy() | | *4cef44525fphy: qcom-qmp-combo: fix out-of-bounds clock access | | *855edc4ec6ARM: renumber bits related to _TIF_WORK_MASK | | *18f28f1330ext4: fix off-by-one errors in fast-commit block filling | | *b205332b6bext4: fix unaligned memory access in ext4_fc_reserve_space() | | *9c197dcbacext4: add missing validation of fast-commit record lengths | | *6220ec4055ext4: don't set up encryption key during jbd2 transaction | | *6482d42bafext4: disable fast-commit of encrypted dir operations | | *6969367c15ext4: fix potential out of bound read in ext4_fc_replay_scan() | | *818175ae3bext4: factor out ext4_fc_get_tl() | | *ffd84d0bc5ext4: introduce EXT4_FC_TAG_BASE_LEN helper | | *37914e029bext4: use ext4_debug() instead of jbd_debug() | | *b0ed9a032eext4: remove unused enum EXT4_FC_COMMIT_FAILED | | *394514ddf9tracing: Fix issue of missing one synthetic field | | *5234dd5d20block: mq-deadline: Fix dd_finish_request() for zoned devices | | *78623b10fcdrm/amdgpu: make display pinning more flexible (v2) | | *6363da2c85drm/amdgpu: handle polaris10/11 overlap asics (v2) | | *2771c7a0eeext4: allocate extended attribute value in vmalloc area | | *e995ff918eext4: avoid unaccounted block allocation when expanding inode | | *877247222aext4: initialize quota before expanding inode in setproject ioctl | | *322cf639b0ext4: fix inode leak in ext4_xattr_inode_create() on an error path | | *6380a93b57ext4: fix kernel BUG in 'ext4_write_inline_data_end()' | | *dc3bbc9753ext4: avoid BUG_ON when creating xattrs | | *844c405552ext4: fix error code return to user-space in ext4_get_branch() | | *b870b28e29ext4: fix corruption when online resizing a 1K bigalloc fs | | *d440d6427aext4: fix delayed allocation bug in ext4_clu_mapped for bigalloc + inline | | *def7a39091ext4: init quota for 'old.inode' in 'ext4_rename' | | *3c31d8d3adext4: fix uninititialized value in 'ext4_evict_inode' | | *871800770dext4: fix leaking uninitialized memory in fast-commit journal | | *d480a49c15ext4: fix bug_on in __es_tree_search caused by bad boot loader inode | | *91009e361eext4: check and assert if marking an no_delete evicting inode dirty | | *820eacbc4eext4: fix reserved cluster accounting in __es_remove_extent() | | *0dcbf4dc3dext4: fix bug_on in __es_tree_search caused by bad quota inode | | *06a20a68bbext4: add helper to check quota inums | | *f7e6b5548fext4: add EXT4_IGET_BAD flag to prevent unexpected bad inode | | *205ac16628ext4: fix undefined behavior in bit shift for ext4_check_flag_values | | *cf0e0817b0ext4: fix use-after-free in ext4_orphan_cleanup | | *970bfd7a41fs: ext4: initialize fsdata in pagecache_write() | | *744bbde378ext4: remove trailing newline from ext4_msg() message | | *7192afa5e4ext4: add inode table check in __ext4_get_inode_loc to aovid possible infinite loop | | *0d041b7251ext4: silence the warning when evicting inode with dioread_nolock | | *af4ceb00ebdrm/ingenic: Fix missing platform_driver_unregister() call in ingenic_drm_init() | | *c919e1154bdrm/i915/dsi: fix VBT send packet port selection for dual link DSI | | *6948e570f5drm/vmwgfx: Validate the box size for the snooped cursor | | *5594fde1efdrm/connector: send hotplug uevent on connector cleanup | | *317ebe61a6device_cgroup: Roll back to original exceptions after copy failure | | *ac838c663bparisc: led: Fix potential null-ptr-deref in start_task() | | *2c1881f081remoteproc: core: Do pm_relax when in RPROC_OFFLINE state | | *9b615f957ciommu/amd: Fix ivrs_acpihid cmdline parsing code | | *35b792179bphy: qcom-qmp-combo: fix sc8180x reset | | *dfd05a1335driver core: Fix bus_type.match() error handling in __driver_attach() | | *44618a3397crypto: ccp - Add support for TEE for PCI ID 0x14CA | | *c55507a94bcrypto: n2 - add missing hash statesize | | *4830750696riscv: mm: notify remote harts about mmu cache updates | | *16b6d9525driscv: stacktrace: Fixup ftrace_graph_ret_addr retp argument | | *657b440a27PCI/sysfs: Fix double free in error path | | *67fd41bbb0PCI: Fix pci_device_is_present() for VFs by checking PF | | *bfce073089ipmi: fix use after free in _ipmi_destroy_user() | | *3b4984035cima: Fix a potential NULL pointer access in ima_restore_measurement_list | | *a843699f16mtd: spi-nor: Check for zero erase size in spi_nor_find_best_erase_type() | | *24f4649cd8ipmi: fix long wait in unload when IPMI disconnect | | *fa6bbb4894ipu3-imgu: Fix NULL pointer dereference in imgu_subdev_set_selection() | | *cdb208b090ASoC: jz4740-i2s: Handle independent FIFO flush bits | | *2d0d083d8awifi: wilc1000: sdio: fix module autoloading | | *2e4a088804efi: Add iMac Pro 2017 to uefi skip cert quirk | | *c49fb9b760md/bitmap: Fix bitmap chunk size overflow issues | | *94fe975d54block: mq-deadline: Do not break sequential write streams to zoned HDDs | | *8e91679f7brtc: ds1347: fix value written to century register | | *5eb8296d73cifs: fix missing display of three mount options | | *cfa9f66f91cifs: fix confusing debug message | | *8b45a3b19amedia: dvb-core: Fix UAF due to refcount races at releasing | | *acf984a371media: dvb-core: Fix double free in dvb_register_device() | | *5fac317beeARM: 9256/1: NWFPE: avoid compiler-generated __aeabi_uldivmod | | *ce50c61245staging: media: tegra-video: fix device_node use after free | | *6b16758215staging: media: tegra-video: fix chan->mipi value on error | | *4f5de49d8ctracing: Fix infinite loop in tracing_read_pipe on overflowed print_trace_line | | *17becbc4ddtracing/probes: Handle system names with hyphens | | *2442e655a6tracing/hist: Fix wrong return value in parse_action_params() | | *2a81ff5ce8tracing: Fix complicated dependency of CONFIG_TRACER_MAX_TRACE | | *fe8c35c6fftracing: Fix race where eprobes can be called before the event | | *eb20f6ed37x86/kprobes: Fix optprobe optimization check with CONFIG_RETHUNK | | *3e0fbc06dbx86/kprobes: Fix kprobes instruction boudary check with CONFIG_RETHUNK | | *6268a0704bftrace/x86: Add back ftrace_expected for ftrace bug reports | | *c95cf30dd4x86/microcode/intel: Do not retry microcode reloading on the APs | | *f8fe2f4178KVM: nVMX: Properly expose ENABLE_USR_WAIT_PAUSE control to L1 | | *ca3483d71bKVM: nVMX: Inject #GP, not #UD, if "generic" VMXON CR0/CR4 check fails | | *2c73b349fdKVM: VMX: Resume guest immediately when injecting #GP on ECREATE | | *4a19f48beeof/kexec: Fix reading 32-bit "linux,initrd-{start,end}" values | | *7eddcdb09fperf/core: Call LSM hook after copying perf_event_attr | | *15697f6533tracing/hist: Fix out-of-bound write on 'action_data.var_ref_idx' | | *fd52b86a72dm cache: set needs_check flag after aborting metadata | | *d2a0b298ebdm cache: Fix UAF in destroy() | | *856edd0e92dm clone: Fix UAF in clone_dtr() | | *9215b25f2edm integrity: Fix UAF in dm_integrity_dtr() | | *34cd15d83bdm thin: Fix UAF in run_timer_softirq() | | *ac362c40e3dm thin: resume even if in FAIL mode | | *4b710e8481dm thin: Use last transaction's pmd->root when commit failed | | *f8c26c33fedm thin: Fix ABBA deadlock between shrink_slab and dm_pool_abort_metadata | | *28d307f380dm cache: Fix ABBA deadlock between shrink_slab and dm_cache_metadata_abort | | *a9e89a567fmptcp: remove MPTCP 'ifdef' in TCP SYN cookies | | *13b9fd0deemptcp: mark ops structures as ro_after_init | | *b2120ed7fdfs: dlm: retry accept() until -EAGAIN or error returns | | *5b4478615ffs: dlm: fix sock release if listen fails | | *b7ede8a63dALSA: hda/realtek: Apply dual codec fixup for Dell Latitude laptops | | *dbd1f30191ALSA: patch_realtek: Fix Dell Inspiron Plus 16 | | *8fb4c98f20cpufreq: Init completion before kobject_init_and_add() | | *876c6ab967PM/devfreq: governor: Add a private governor_data for governor | | *0e945ea733selftests: Use optional USERCFLAGS and USERLDFLAGS | | *31697c5953arm64: dts: qcom: sdm850-lenovo-yoga-c630: correct I2C12 pins drive strength | | *1630498660ARM: ux500: do not directly dereference __iomem | | *99590f29b2btrfs: fix resolving backrefs for inline extent followed by prealloc | | *1f9cf4daf2mmc: sdhci-sprd: Disable CLK_AUTO when the clock is less than 400K | | *58d53ff30aarm64: dts: qcom: sdm845-db845c: correct SPI2 pins drive strength | | *a777b90a05perf/x86/intel/uncore: Clear attr_update properly | | *ca77ac238cperf/x86/intel/uncore: Disable I/O stacks to PMU mapping on ICX-D | | *df06e7777cjbd2: use the correct print format | | *8e75b1dd4bktest.pl minconfig: Unset configs instead of just removing them | | *55e5e8b445kest.pl: Fix grub2 menu handling for rebooting | | *823fed7c40soc: qcom: Select REMAP_MMIO for LLCC driver | | *8dabeeb1ffmedia: stv0288: use explicitly signed char | | *d167ebea90net/af_packet: make sure to pull mac header | | *9ff46c36dfnet/af_packet: add VLAN support for AF_PACKET SOCK_RAW GSO | | *cd0f597c8arcu-tasks: Simplify trc_read_check_handler() atomic operations | | *593ca69668ASoC/SoundWire: dai: expand 'stream' concept beyond SoundWire | | *a7874dac6bASoC: Intel/SOF: use set_stream() instead of set_tdm_slots() for HDAudio | | *ae4f70b2fekcsan: Instrument memcpy/memset/memmove with newer Clang | | *d01fa993ebSUNRPC: Don't leak netobj memory when gss_read_proxy_verf() fails | | *43135fb098tpm: tpm_tis: Add the missed acpi_put_table() to fix memory leak | | *986cd9a9b9tpm: tpm_crb: Add the missed acpi_put_table() to fix memory leak | | *638cd298dftpm: acpi: Call acpi_put_table() to fix memory leak | | *d58289fc77mmc: vub300: fix warning - do not call blocking ops when !TASK_RUNNING | | *7eb57bc92ff2fs: allow to read node block after shutdown | | *acc13987fdf2fs: should put a page when checking the summary info | | *35d8a89862mm, compaction: fix fast_isolate_around() to stay within boundaries | | *91bd504128md: fix a crash in mempool_free | | *29328fbce5mfd: mt6360: Add bounds checking in Regmap read/write call-backs | | *c24cc476acpnode: terminate at peers of source | | *0c9118e381ALSA: line6: fix stack overflow in line6_midi_transmit | | *ac4b4fdf32ALSA: line6: correct midi status byte when receiving data from podxt | | *83c44f0ebfovl: Use ovl mounter's fsuid and fsgid in ovl_link() | | *fcb94283e0binfmt: Fix error return code in load_elf_fdpic_binary() | | *ed9947277bhfsplus: fix bug causing custom uid and gid being unable to be assigned with mount | | *76d52b5412pstore/zone: Use GFP_ATOMIC to allocate zone buffer | | *74b0a2fcc3pstore: Properly assign mem_type property | | *d25aac3489HID: plantronics: Additional PIDs for double volume key presses quirk | | *9d4294545cHID: multitouch: fix Asus ExpertBook P2 P2451FA trackpoint | | *7280fdb80bpowerpc/rtas: avoid scheduling in rtas_os_term() | | *d8939315b7powerpc/rtas: avoid device tree lookups in rtas_os_term() | | *23a249b118objtool: Fix SEGFAULT | | *ed686e7a26fs/ntfs3: Fix slab-out-of-bounds in r_page | | *dd34665cb0fs/ntfs3: Delete duplicate condition in ntfs_read_mft() | | *a9847a11b6fs/ntfs3: Use __GFP_NOWARN allocation at ntfs_fill_super() | | *abd2ee2cf4fs/ntfs3: Use __GFP_NOWARN allocation at wnd_init() | | *d7ce7bb688fs/ntfs3: Validate index root when initialize NTFS security | | *f29676cc3asoundwire: dmi-quirks: add quirk variant for LAPBC710 NUC15 | | *9c8471a17ffs/ntfs3: Fix slab-out-of-bounds read in run_unpack | | *3a52f17867fs/ntfs3: Validate resident attribute name | | *3cd9e5b41bfs/ntfs3: Validate buffer length while parsing index | | *c878a915bcfs/ntfs3: Validate attribute name offset | | *f62506f5e4fs/ntfs3: Add null pointer check for inode operations | | *2dd9ccfb06fs/ntfs3: Fix memory leak on ntfs_fill_super() error path | | *ea6b359840fs/ntfs3: Add null pointer check to attr_load_runs_vcn | | *de5e095524fs/ntfs3: Validate data run offset | | *d4489ba8fbfs/ntfs3: Add overflow check for attribute size | | *af7a195deafs/ntfs3: Validate BOOT record_size | | *8e228ac90cnvmet: don't defer passthrough commands with trivial effects to the workqueue | | *f068a7315anvme: fix the NVME_CMD_EFFECTS_CSE_MASK definition | | *576502f25fata: ahci: Fix PCS quirk application for suspend | | *7949b0df3dblock, bfq: fix uaf for bfqq in bfq_exit_icq_bfqq | | *ff3d9ab51cACPI: resource: do IRQ override on Lenovo 14ALC7 | | *698a0813ceACPI: resource: do IRQ override on XMG Core 15 | | *a9ac7633bbACPI: resource: do IRQ override on LENOVO IdeaPad | | *5fe31f2950ACPI: resource: Skip IRQ override on Asus Vivobook K3402ZA/K3502ZA | | *4c5fee0d88nvme-pci: fix page size checks | | *9141144b37nvme-pci: fix mempool alloc size | | *f17cf8fa2cnvme-pci: fix doorbell buffer value endianness | | *ead99ec669Revert "selftests/bpf: Add test for unstable CT lookup API" | | *bf0543b937cifs: fix oops during encryption | | *56f6de394fusb: dwc3: qcom: Fix memory leak in dwc3_qcom_interconnect_init * | |2ce8e6e296ANDROID: add __dev_kfree_skb_irq to virtual_device abi list |/ / * |24bc28221fRevert "net: add atomic_long_t to net_device_stats fields" * |34d878c5b3Revert "ipv6/sit: use DEV_STATS_INC() to avoid data-races" * |956e2924f3Revert "arm64: Treat ESR_ELx as a 64-bit register" * |8a3baaa85eRevert "arm64: mm: kfence: only handle translation faults" * |8b3730f922Revert "gpiolib: protect the GPIO device against being dropped while in use by user-space" * |b0e87c106dRevert "soreuseport: Fix socket selection for SO_INCOMING_CPU." * |8a8a0cb6c6Revert "bpf, sockmap: Fix missing BPF_F_INGRESS flag when using apply_bytes" * |2d4c48bff9Revert "xhci: Prevent infinite loop in transaction errors recovery for streams" * |20ec745823Merge 5.15.86 into android13-5.15-lts |\| | *90ffbb727cLinux 5.15.86 | *3082f8705epwm: tegra: Fix 32 bit build | *caa40d1f85mfd: qcom_rpm: Use devm_of_platform_populate() to simplify code | *408dbaa065extcon: usbc-tusb320: Call the Type-C IRQ handler only if a port is registered | *2471a44769media: dvbdev: fix refcnt bug | *579fb0a332media: dvbdev: fix build warning due to comments | *1115e77c4fnet: stmmac: fix errno when create_singlethread_workqueue() fails | *d3871af13ascsi: qla2xxx: Fix crash when I/O abort times out | *50f993da94btrfs: do not BUG_ON() on ENOMEM when dropping extent items for a range | *1c65d50315ovl: fix use inode directly in rcu-walk mode | *88ec6d1105fbdev: fbcon: release buffer when fbcon_do_set_font() failed | *ca8bcb348agcov: add support for checksum field | *f36d8c8651floppy: Fix memory leak in do_floppy_init() | *4193a6745bregulator: core: fix deadlock on regulator enable | *ce5d0ef1cfiio: adc128s052: add proper .data members in adc128_of_match table | *aec1058f2aiio: adc: ad_sigma_delta: do not use internal iio_dev lock | *dc6afd6070iio: fix memory leak in iio_device_register_eventset() | *38c257ee6areiserfs: Add missing calls to reiserfs_security_free() | *8a4236456asecurity: Restrict CONFIG_ZERO_CALL_USED_REGS to gcc or clang > 15.0.6 | *1cabce56629p: set req refcount to zero to avoid uninitialized usage | *dd2157a98floop: Fix the max_loop commandline argument treatment when it is set to 0 | *fd03bd4c7bHID: mcp2221: don't connect hidraw | *6c886be1ffHID: wacom: Ensure bootloader PID is usable in hidraw mode | *4d640eb112xhci: Prevent infinite loop in transaction errors recovery for streams | *936c5f96c8usb: dwc3: core: defer probe on ulpi_read_id timeout | *e6bf6c4022usb: dwc3: Fix race between dwc3_set_mode and __dwc3_set_mode | *0e883f3bc8arm64: dts: qcom: sm8250: fix USB-DP PHY registers | *ffb14aac26usb: xhci-mtk: fix leakage of shared hcd when fail to set wakeup irq | *fcacd970e0usb: cdnsp: fix lack of ZLP for ep0 | *bcac79df08ALSA: hda/hdmi: Add HP Device 0x8711 to force connect list | *50c23a1107ALSA: hda/realtek: Add quirk for Lenovo TianYi510Pro-14IOB | *76574b3465ALSA: usb-audio: add the quirk for KT0206 device | *9e787dab98ima: Simplify ima_lsm_copy_rule | *2cd365029cpstore: Make sure CONFIG_PSTORE_PMSG selects CONFIG_RT_MUTEXES | *2068d41a3dafs: Fix lost servers_outstanding count | *0def8af038perf debug: Set debug_peo_args and redirect_to_stderr variable to correct values in perf_quiet_option() | *41cccae10epstore: Switch pmsg_lock to an rt_mutex to avoid priority inversion | *8877df8135LoadPin: Ignore the "contents" argument of the LSM hooks | *584202b0f1drm/i915/display: Don't disable DDI/Transcoder when setting phy test pattern | *b253e075b1ASoC: rt5670: Remove unbalanced pm_runtime_put() | *59f797a913ASoC: rockchip: spdif: Add missing clk_disable_unprepare() in rk_spdif_runtime_resume() | *132844d92fASoC: wm8994: Fix potential deadlock | *82f7c814edASoC: mediatek: mt8183: fix refcount leak in mt8183_mt6358_ts3a227_max98357_dev_probe() | *e5d6bf3e5aASoC: rockchip: pdm: Add missing clk_disable_unprepare() in rockchip_pdm_runtime_resume() | *85eb5c952bASoC: audio-graph-card: fix refcount leak of cpu_ep in __graph_for_each_link() | *9ff07316caASoC: mediatek: mt8173-rt5650-rt5514: fix refcount leak in mt8173_rt5650_rt5514_dev_probe() | *7643909cf0ASoC: Intel: Skylake: Fix driver hang during shutdown | *33ff0f9f9cALSA: hda: add snd_hdac_stop_streams() helper | *78649a624dALSA/ASoC: hda: move/rename snd_hdac_ext_stop_streams to hdac_stream.c | *98b0f50fechwmon: (jc42) Fix missing unlock on error in jc42_write() | *5e69233508KVM: selftests: Fix build regression by using accessor function | *6215904fe2tools/include: Add _RET_IP_ and math definitions to kernel.h | *c885326728orangefs: Fix kmemleak in orangefs_{kernel,client}_debug_init() | *39529b79b0orangefs: Fix kmemleak in orangefs_prepare_debugfs_help_string() | *a075c21ee0drm/sti: Fix return type of sti_{dvo,hda,hdmi}_connector_mode_valid() | *f3c14b99f3drm/fsl-dcu: Fix return type of fsl_dcu_drm_connector_mode_valid() | *9a8862820chugetlbfs: fix null-ptr-deref in hugetlbfs_parse_param() | *4f6b206998scsi: elx: libefc: Fix second parameter type in state callbacks | *23f0e9f863scsi: ufs: Reduce the START STOP UNIT timeout | *2cf66428a2scsi: lpfc: Fix hard lockup when reading the rx_monitor from debugfs | *2b3e3ecdb4crypto: hisilicon/hpre - fix resource leak in remove process | *adf6a00859clk: st: Fix memory leak in st_of_quadfs_setup() | *6c8aee0c8fmedia: si470x: Fix use-after-free in si470x_int_in_callback() | *58b6496a74mmc: renesas_sdhi: better reset from HS400 mode | *c33c904124mmc: f-sdh30: Add quirks for broken timeout clock capability | *69346de0ebwifi: mt76: do not run mt76u_status_worker if the device is not running | *feb847e659regulator: core: fix use_count leakage when handling boot-on | *474e70bd90libbpf: Avoid enum forward-declarations in public API in C++ mode | *6209542869drm/amd/display: Use the largest vready_offset in pipe group | *eff45bfbc2blk-mq: fix possible memleak when register 'hctx' failed | *d0af6220bbmedia: dvb-usb: fix memory leak in dvb_usb_adapter_init() | *88a6f8a72dmedia: dvbdev: adopts refcnt to avoid UAF | *438cd29fecmedia: dvb-frontends: fix leak of memory fw | *a96841f5aaethtool: avoiding integer overflow in ethtool_phys_id() | *b327c68acebpf: Prevent decl_tag from being referenced in func_proto arg | *4b8f3b9392ppp: associate skb with a device at tx | *5d5a481a7fmrp: introduce active flags to prevent UAF when applicant uninit | *222cc04356ipv6/sit: use DEV_STATS_INC() to avoid data-races | *8a3b023710net: add atomic_long_t to net_device_stats fields | *58dd11f624drm/amd/display: fix array index out of bound error in bios parser | *a3cc41e05emd/raid1: stop mdx_raid1 thread when raid1 array run failed | *b621d17fe8drivers/md/md-bitmap: check the return value of md_bitmap_get_counter() | *5afac74f15drm/mediatek: Fix return type of mtk_hdmi_bridge_mode_valid() | *072508e99ddrm/sti: Use drm_mode_copy() | *673a3e0199drm/rockchip: Use drm_mode_copy() | *b9b07900d2drm/msm: Use drm_mode_copy() | *5ad774fb82s390/lcs: Fix return type of lcs_start_xmit() | *dfbf0122eas390/netiucv: Fix return type of netiucv_tx() | *8131d1880cs390/ctcm: Fix return type of ctc{mp,}m_tx() | *f9084e9930drm/amdgpu: Fix type of second parameter in odn_edit_dpm_table() callback | *b74580d618drm/amdgpu: Fix type of second parameter in trans_msg() callback | *314f7092b2igb: Do not free q_vector unless new one was allocated | *0b12d2aa26wifi: brcmfmac: Fix potential shift-out-of-bounds in brcmf_fw_alloc_request() | *19bb9e98e1hamradio: baycom_epp: Fix return type of baycom_send_packet() | *a413ebb604net: ethernet: ti: Fix return type of netcp_ndo_start_xmit() | *5d3f4478d2bpf: make sure skb->len != 0 when redirecting to a tunneling device | *be2803dd29qed (gcc13): use u16 for fid to be big enough | *a8bc0ac438Revert "drm/amd/display: Limit max DSC target bpp for specific monitors" | *cc8deb82ccdrm/amd/display: prevent memory leak | *49dd0e8029ipmi: fix memleak when unload ipmi driver | *68871c005fASoC: codecs: rt298: Add quirk for KBL-R RVP platform | *3eca9697c2wifi: ar5523: Fix use-after-free on ar5523_cmd() timed out | *c319196a0ewifi: ath9k: verify the expected usb_endpoints are present | *10c4b63d09brcmfmac: return error when getting invalid max_flowrings from dongle | *ad31bc146fmedia: imx-jpeg: Disable useless interrupt to avoid kernel panic | *6e1a6880e1drm/etnaviv: add missing quirks for GC300 | *367296925chfs: fix OOB Read in __hfs_brec_find | *ebe16676e1acct: fix potential integer overflow in encode_comp_t() | *8b6ef451b5nilfs2: fix shift-out-of-bounds due to too large exponent of block size | *b47f5c579cnilfs2: fix shift-out-of-bounds/overflow in nilfs_sb2_bad_offset() | *5777432ebaACPICA: Fix error code path in acpi_ds_call_control_method() | *10b87da8fafs: jfs: fix shift-out-of-bounds in dbDiscardAG | *5059ea84a8jfs: Fix fortify moan in symlink | *e7a6a53c87udf: Avoid double brelse() in udf_rename() | *0536f76a2bfs: jfs: fix shift-out-of-bounds in dbAllocAG | *88cea1676abinfmt_misc: fix shift-out-of-bounds in check_special_flags | *cadb938a5ex86/hyperv: Remove unregister syscore call from Hyper-V cleanup | *659747f6f6video: hyperv_fb: Avoid taking busy spinlock on panic path | *9d05c20b0aarm64: make is_ttbrX_addr() noinstr-safe | *98a5b1265arcu: Fix __this_cpu_read() lockdep warning in rcu_force_quiescent_state() | *d238f94b2bHID: amd_sfh: Add missing check for dma_alloc_coherent | *9da204cd67net: stream: purge sk_error_queue in sk_stream_kill_queues() | *f47426250fmyri10ge: Fix an error handling path in myri10ge_probe() | *1ec0a7d5b0rxrpc: Fix missing unlock in rxrpc_do_sendmsg() | *5478eb7adcnet_sched: reject TCF_EM_SIMPLE case for complex ematch module | *4f05d8e2fbmailbox: zynq-ipi: fix error handling while device_register() fails | *550f403e46mailbox: arm_mhuv2: Fix return value check in mhuv2_probe() | *28604a960cmailbox: mpfs: read the system controller's status | *8fb773eed4skbuff: Account for tail adjustment during pull operations | *dc0f38957aarm64: dts: mt8183: Fix Mali GPU clock | *790b396f6bsoc: mediatek: pm-domains: Fix the power glitch issue | *0133615a06openvswitch: Fix flow lookup to use unmasked key | *04e454bd97selftests: devlink: fix the fd redirect in dummy_reporter_test | *d52646a46crtc: mxc_v2: Add missing clk_disable_unprepare() | *ac95c4e35figc: Set Qbv start_time and end_time to end_time if not being configured in GCL | *af59985138igc: Lift TAPRIO schedule restriction | *4d50d640edigc: recalculate Qbv end_time by considering cycle time | *1ef9416957igc: allow BaseTime 0 enrollment for Qbv | *c0df8e7ba6igc: Add checking for basetime less than zero | *5b46b53f45igc: Use strict cycles for Qbv scheduling | *fd7d029436igc: Enhance Qbv scheduling by using first flag bit | *9b5b50329er6040: Fix kmemleak in probe and remove | *1b428ba31bunix: Fix race in SOCK_SEQPACKET's unix_dgram_sendmsg() | *aae9c24ebdnfc: pn533: Clear nfc_target before being used | *bcf2c1dc53net: enetc: avoid buffer leaks on xdp_do_redirect() failure | *f463a1295cselftests/bpf: Add test for unstable CT lookup API | *094f3d9314block, bfq: fix possible uaf for 'bfqq->bic' | *cf48cb8debmISDN: hfcmulti: don't call dev_kfree_skb/kfree_skb() under spin_lock_irqsave() | *5607353751mISDN: hfcpci: don't call dev_kfree_skb/kfree_skb() under spin_lock_irqsave() | *ada4022f48mISDN: hfcsusb: don't call dev_kfree_skb/kfree_skb() under spin_lock_irqsave() | *0578f9929fnet: macsec: fix net device access prior to holding a lock | *a472f069cenfsd: under NFSv4.1, fix double svc_xprt_put on rpc_create failure | *f8f1d037d6rtc: pcf85063: fix pcf85063_clkout_control | *35a174552brtc: pic32: Move devm_rtc_allocate_device earlier in pic32_rtc_probe() | *eea105c4e4rtc: st-lpc: Add missing clk_disable_unprepare in st_rtc_probe() | *74248b5560netfilter: flowtable: really fix NAT IPv6 offload | *5c940632camfd: pm8008: Fix return value check in pm8008_probe() | *ec10848e26mfd: pm8008: Remove driver data structure pm8008_data | *38959417d3mfd: qcom_rpm: Fix an error handling path in qcom_rpm_probe() | *b95ae3543emfd: bd957x: Fix Kconfig dependency on REGMAP_IRQ | *615d3c8a46powerpc/pseries/eeh: use correct API for error log size | *68de42e008powerpc/eeh: Drop redundant spinlock initialization | *2b157b4b13remoteproc: qcom: q6v5: Fix missing clk_disable_unprepare() in q6v5_wcss_qcs404_power_on() | *4b191533f5remoteproc: qcom_q6v5_pas: Fix missing of_node_put() in adsp_alloc_memory_region() | *d7628ebca8remoteproc: qcom_q6v5_pas: detach power domains on remove | *fdf47f462aremoteproc: qcom_q6v5_pas: disable wakeup on probe fail or remove | *098ebb9089remoteproc: qcom: q6v5: Fix potential null-ptr-deref in q6v5_wcss_init_mmio() | *131c0a3eadremoteproc: sysmon: fix memory leak in qcom_add_sysmon_subdev() | *4507c6a672pwm: mediatek: always use bus clock for PWM on MT7622 | *4fbbb14f0epwm: mtk-disp: Fix the parameters calculated by the enabled flag of disp_pwm | *eec59807a2pwm: sifive: Call pwm_sifive_update_clock() while mutex is held | *37ea9a6c41iommu/sun50i: Remove IOMMU_DOMAIN_IDENTITY | *8de2c29db6selftests/powerpc: Fix resource leaks | *dd49c5031epowerpc/hv-gpci: Fix hv_gpci event list | *65d3469f3bpowerpc/83xx/mpc832x_rdb: call platform_device_put() in error case in of_fsl_spi_probe() | *cf03db2896powerpc/perf: callchain validate kernel stack pointer bounds | *5de1902244powerpc/xive: add missing iounmap() in error path in xive_spapr_populate_irq_data() | *b31e9647f1powerpc/xmon: Fix -Wswitch-unreachable warning in bpt_cmds | *6a310e8db5cxl: Fix refcount leak in cxl_calc_capp_routing | *0accd460dcpowerpc/52xx: Fix a resource leak in an error handling path | *be2b9b1a60macintosh/macio-adb: check the return value of ioremap() | *19ded60b40macintosh: fix possible memory leak in macio_add_one_device() | *e42b543d08iommu/fsl_pamu: Fix resource leak in fsl_pamu_probe() | *6e501b3fd7iommu/amd: Fix pci device refcount leak in ppr_notifier() | *9383921e8brtc: pcf85063: Fix reading alarm | *b66aa7b306rtc: snvs: Allow a time difference on clock register read | *7a6cc22eabrtc: cmos: Disable ACPI RTC event on removal | *689f757f0artc: cmos: Rename ACPI-related functions | *1c74bbecdartc: cmos: Eliminate forward declarations of some functions | *3a439a2cabrtc: cmos: Call rtc_wake_setup() from cmos_do_probe() | *9febdff75crtc: cmos: Call cmos_wake_setup() from cmos_do_probe() | *d9324fb3eertc: cmos: fix build on non-ACPI platforms | *fe46b9303ertc: cmos: Fix wake alarm breakage | *60c6e563a8rtc: cmos: Fix event handler registration ordering issue | *d3aa083469rtc: rtc-cmos: Do not check ACPI_FADT_LOW_POWER_S0 | *6e98a93c75dmaengine: idxd: Fix crc_val field for completion record | *ab53749c32fs/ntfs3: Fix slab-out-of-bounds read in ntfs_trim_fs | *1ba0968b33pwm: tegra: Improve required rate calculation | *c160505c9binclude/uapi/linux/swab: Fix potentially missing __always_inline | *59463193b0phy: usb: s2 WoL wakeup_count not incremented for USB->Eth devices | *ae00848e55iommu/rockchip: fix permission bits in page table entries v2 | *a7f6ad2c42iommu/sun50i: Fix flush size | *38ccb9b469iommu/sun50i: Fix R/W permission check | *ae4ab47a0biommu/sun50i: Consider all fault sources for reset | *84fee3ce82iommu/sun50i: Fix reset release | *6f9fe31a48fs/ntfs3: Harden against integer overflows | *30f20ceb87overflow: Implement size_t saturating arithmetic helpers | *4b51f27d44fs/ntfs3: Avoid UBSAN error on true_sectors_per_clst() | *28f345bec7RDMA/siw: Fix pointer cast warning | *01d925e2a5perf stat: Do not delay the workload with --delay | *a273f1dd5dperf stat: Refactor __run_perf_stat() common code | *d21534ab4fpower: supply: fix null pointer dereferencing in power_supply_get_battery_info | *d4898d8de6power: supply: ab8500: Fix error handling in ab8500_charger_init() | *30b191798fHSI: omap_ssi_core: Fix error handling in ssi_init() | *a72fe8eb55power: supply: z2_battery: Fix possible memleak in z2_batt_probe() | *5ba0e8fa15perf symbol: correction while adjusting symbol | *a34027b63dperf trace: Handle failure when trace point folder is missed | *60aeacce64perf trace: Use macro RAW_SYSCALL_ARGS_NUM to replace number | *e4700f62dcperf trace: Return error if a system call doesn't exist | *870ad0917dpower: supply: fix residue sysfs file in error handle route of __power_supply_register() | *1c2b9c8100HSI: omap_ssi_core: fix possible memory leak in ssi_probe() | *c5f729d3d6HSI: omap_ssi_core: fix unbalanced pm_runtime_disable() | *ea37831f83fbdev: uvesafb: Fixes an error handling path in uvesafb_probe() | *5bcae36b58fbdev: uvesafb: don't build on UML | *07c1a3c2dffbdev: geode: don't build on UML | *ace8312b5dfbdev: ep93xx-fb: Add missing clk_disable_unprepare in ep93xxfb_probe() | *04946113fbfbdev: vermilion: decrease reference count in error path | *fc0d5034fafbdev: via: Fix error in via_core_init() | *9827246333fbdev: pm2fb: fix missing pci_disable_device() | *3aa4205134fbdev: ssd1307fb: Drop optional dependency | *4958316a6dthermal/drivers/qcom/lmh: Fix irq handler return value | *ad72205ac6thermal/drivers/qcom/temp-alarm: Fix inaccurate warning for gen2 | *37fb4e13d2thermal/drivers/imx8mm_thermal: Validate temperature range | *95c18f4a3csamples: vfio-mdev: Fix missing pci_disable_device() in mdpy_fb_probe() | *31c1b5d300ksmbd: Fix resource leak in ksmbd_session_rpc_open() | *a44102d36atracing/hist: Fix issue of losting command info in error_log | *8308ccfcbdusb: storage: Add check for kcalloc | *96c12fd0eci2c: ismt: Fix an out-of-bounds bug in ismt_access() | *8212800943i2c: mux: reg: check return value after calling platform_get_resource() | *46d8f63bb8gpiolib: protect the GPIO device against being dropped while in use by user-space | *333a271dfdgpiolib: make struct comments into real kernel docs | *7c755a2d6dgpiolib: cdev: fix NULL-pointer dereferences | *b0a26e1999gpiolib: Get rid of redundant 'else' | *4bc217b25evme: Fix error not catched in fake_init() | *31bfe024a9staging: rtl8192e: Fix potential use-after-free in rtllib_rx_Monitor() | *b0aaec894astaging: rtl8192u: Fix use after free in ieee80211_rx() | *ed4580c3f8i2c: pxa-pci: fix missing pci_disable_device() on error in ce4100_i2c_probe | *28dc61cc49chardev: fix error handling in cdev_device_add() | *43bfc7c240mcb: mcb-parse: fix error handing in chameleon_parse_gdd() | *f3686e5e8ddrivers: mcb: fix resource leak in mcb_probe() | *9d4a0aca8ausb: gadget: f_hid: fix refcount leak on error path | *d3136b7970usb: gadget: f_hid: fix f_hidg lifetime vs cdev | *a41c2bba7fusb: roles: fix of node refcount leak in usb_role_switch_is_parent() | *18b9202188coresight: trbe: remove cpuhp instance node before remove cpuhp state | *e854a4ab38counter: stm32-lptimer-cnt: fix the check on arr and cmp registers update | *39a156715fiio: adis: add '__adis_enable_irq()' implementation | *3a2dde8e5diio:imu:adis: Move exports into IIO_ADISLIB namespace | *3c2e13025biio: adis: stylistic changes | *de3e358912iio: adis: handle devices that cannot unmask the drdy pin | *994243de7aiio: temperature: ltc2983: make bulk write buffer DMA-safe | *22511eefa6cxl: fix possible null-ptr-deref in cxl_pci_init_afu|adapter() | *e5021bbf11cxl: fix possible null-ptr-deref in cxl_guest_init_afu|adapter() | *b308fdedeffirmware: raspberrypi: fix possible memory leak in rpi_firmware_probe() | *d5c8f9003amisc: sgi-gru: fix use-after-free error in gru_set_context_option, gru_fault and gru_handle_user_call_os | *848c45964dmisc: tifm: fix possible memory leak in tifm_7xx1_switch_media() | *37a13b274eocxl: fix pci device refcount leak when calling get_function_0() | *3299983a6bmisc: ocxl: fix possible name leak in ocxl_file_register_afu() | *357379d504test_firmware: fix memory leak in test_firmware_init() | *07d547d742serial: sunsab: Fix error handling in sunsab_init() | *919e745fddserial: altera_uart: fix locking in polling mode | *e1c4f18214tty: serial: altera_uart_{r,t}x_chars() need only uart_port | *b133b45ba6tty: serial: clean up stop-tx part in altera_uart_tx_chars() | *6f7d82380fserial: pch: Fix PCI device refcount leak in pch_request_dma() | *0dfc7dfe5bserial: stm32: move dma_request_chan() before clk_prepare_enable() | *926b0967f7serial: pl011: Do not clear RX FIFO & RX interrupt in unthrottle. | *d71a611fcaserial: amba-pl011: avoid SBSA UART accessing DMACR register | *f46f9d2e16extcon: usbc-tusb320: Update state on probe even if no IRQ pending | *ac067e75c4extcon: usbc-tusb320: Add USB TYPE-C support | *9280761167extcon: usbc-tusb320: Factor out extcon into dedicated functions | *05aa8ff22dusb: typec: Factor out non-PD fwnode properties | *31e9c27510extcon: usbc-tusb320: Add support for TUSB320L | *b9c8820d91extcon: usbc-tusb320: Add support for mode setting and reset | *4524599a6ausb: typec: tipd: Fix spurious fwnode_handle_put in error path | *b0d86eacc8usb: typec: tipd: Cleanup resources if devm_tps6598_psy_register fails | *ba75be6f0dusb: typec: tcpci: fix of node refcount leak in tcpci_register_port() | *154d5713a2usb: typec: Check for ops->exit instead of ops->enter in altmode_exit | *1f5661388fstaging: vme_user: Fix possible UAF in tsi148_dma_list_add | *a3c4bc2616usb: fotg210-udc: Fix ages old endianness issues | *5e87d41221uio: uio_dmem_genirq: Fix deadlock between irq config and handling | *79a4bdb6b9uio: uio_dmem_genirq: Fix missing unlock in irq configuration | *3f22a273efvfio: platform: Do not pass return buffer to ACPI _RST method | *417ef049e3class: fix possible memory leak in __class_register() | *f76824ab2bserial: 8250_bcm7271: Fix error handling in brcmuart_init() | *6b4424efcfserial: tegra: Read DMA status before terminating | *a0ead7e8dadrivers: dio: fix possible memory leak in dio_init() | *e8985caf05RISC-V: Align the shadow stack | *ca48174a76IB/IPoIB: Fix queue count inconsistency for PKEY child interfaces | *82bd423ed9hwrng: geode - Fix PCI device refcount leak | *2b79a5e560hwrng: amd - Fix PCI device refcount leak | *42cbff35f4crypto: img-hash - Fix variable dereferenced before check 'hdev->req' | *b9634f99b6RDMA/hns: Fix error code of CMD | *b06bb747ceRDMA/hns: Fix page size cap from firmware | *4c05c7cf25RDMA/hns: Fix PBL page MTR find | *fa267c4192RDMA/hns: Fix AH attr queried by query_qp | *e27fb26e75orangefs: Fix sysfs not cleanup when dev init failed | *3e9c395ef2PCI: mt7621: Add sentinel to quirks table | *bcc65c2e2aPCI: mt7621: Rename mt7621_pci_ to mt7621_pcie_ | *0a7eab1cc4RDMA/srp: Fix error return code in srp_parse_options() | *6301100179RDMA/hfi1: Fix error return code in parse_platform_config() | *339ca035afriscv/mm: add arch hook arch_clear_hugepage_flags | *20d363dcd6crypto: omap-sham - Use pm_runtime_resume_and_get() in omap_sham_probe() | *815b65d714crypto: amlogic - Remove kcalloc without check | *af71199291RDMA/nldev: Fix failure to send large messages | *bb895786a4f2fs: avoid victim selection from previous victim section | *655e955debRDMA/nldev: Add checks for nla_nest_start() in fill_stat_counter_qps() | *1895e908b3scsi: snic: Fix possible UAF in snic_tgt_create() | *09a60f908dscsi: fcoe: Fix transport not deattached when fcoe_if_init() fails | *e59da17205scsi: ipr: Fix WARNING in ipr_init() | *c444f58fdascsi: scsi_debug: Fix possible name leak in sdebug_add_host_helper() | *4e4968dfb5scsi: fcoe: Fix possible name leak when device_register() fails | *0f5006d7d1scsi: scsi_debug: Fix a warning in resp_report_zones() | *2432719b1ascsi: scsi_debug: Fix a warning in resp_verify() | *038359eeccscsi: efct: Fix possible memleak in efct_device_init() | *23053a7926scsi: hpsa: Fix possible memory leak in hpsa_add_sas_device() | *2ab6d5927cscsi: hpsa: Fix error handling in hpsa_add_sas_host() | *6a92129c8fscsi: mpt3sas: Fix possible resource leaks in mpt3sas_transport_port_add() | *26c0f7e1acpadata: Fix list iterator in padata_do_serial() | *17afa98bccpadata: Always leave BHs disabled when running ->parallel() | *221afb2a1bcrypto: tcrypt - Fix multibuffer skcipher speed test mem leak | *bfe10a1d9fscsi: hpsa: Fix possible memory leak in hpsa_init_one() | *38ef0c0b09dt-bindings: visconti-pcie: Fix interrupts array max constraints | *83aad8111bdt-bindings: imx6q-pcie: Fix clock names for imx6sx and imx8mq | *f64f08b9e6RDMA/rxe: Fix NULL-ptr-deref in rxe_qp_do_cleanup() when socket create failed | *35f9cd060eRDMA/hns: fix memory leak in hns_roce_alloc_mr() | *6d5220a553crypto: ccree - Make cc_debugfs_global_fini() available for module init function | *2e9cf3e783RDMA/hfi: Decrease PCI device reference count in error path | *7f476d639cPCI: Check for alloc failure in pci_request_irq() | *49bc2be897RDMA/hns: Fix ext_sge num error when post send | *0e6160d79dRDMA/hns: Repacing 'dseg_len' by macros in fill_ext_sge_inl_data() | *e5ea48788ecrypto: hisilicon/qm - add missing pci_dev_put() in q_num_set() | *442caec12fcrypto: cryptd - Use request context instead of stack for sub-request | *ab677729fccrypto: ccree - Remove debugfs when platform_driver_register failed | *0328ca389ascsi: scsi_debug: Fix a warning in resp_write_scat() | *1ba8ecb664RDMA/siw: Set defined status for work completion with undefined status | *6e757005baRDMA/nldev: Return "-EAGAIN" if the cm_id isn't from expected port | *f981c697b2RDMA/core: Make sure "ib_port" is valid when access sysfs node | *13586753aeRDMA/restrack: Release MR restrack when delete | *6e78ca677fPCI: vmd: Disable MSI remapping after suspend | *47e31b86edIB/mad: Don't call to function that might sleep while in atomic context | *f8d8fbd3b6RDMA/siw: Fix immediate work request flush to completion queue | *2a26849d79scsi: qla2xxx: Fix set-but-not-used variable warnings | *799ed37559RDMA/irdma: Report the correct link speed | *d40d1b1c61f2fs: fix to destroy sbi->post_read_wq in error path of f2fs_fill_super() | *847f725006f2fs: fix normal discard process | *865bb7b5a7f2fs: fix to invalidate dcc->f2fs_issue_discard in error path | *5f509fa740apparmor: Fix memleak in alloc_ns() | *46f3cb83e4crypto: rockchip - rework by using crypto_engine | *3ed0548d39crypto: rockchip - remove non-aligned handling | *5562009f5fcrypto: rockchip - better handle cipher key | *26f3971356crypto: rockchip - add fallback for ahash | *34fe54af3ccrypto: rockchip - add fallback for cipher | *314217591ecrypto: rockchip - do not store mode globally | *853cd97d2bcrypto: rockchip - do not do custom power management | *d5100272e4f2fs: Fix the race condition of resize flag between resizefs | *db72c5dffcPCI: pci-epf-test: Register notifier if only core_init_notifier is enabled | *26ffeff67bRDMA/core: Fix order of nldev_exit call | *a00a7ac251PCI: dwc: Fix n_fts[] array overrun | *10ae636115apparmor: Use pointer to struct aa_label for lbs_cred | *8d50ccfbe2scsi: core: Fix a race between scsi_done() and scsi_timeout() | *9bdf3a59b3crypto: nitrox - avoid double free on error path in nitrox_sriov_init() | *7efc0d39eecrypto: sun8i-ss - use dma_addr instead u32 | *aaef0bdd7acrypto: hisilicon/qm - fix missing destroy qp_idr | *d567776ae2apparmor: Fix abi check to include v8 abi | *bc9d2cbbdcapparmor: fix lockdep warning when removing a namespace | *775a37ffa9apparmor: fix a memleak in multi_transaction_new() | *09f30f394enet: dsa: tag_8021q: avoid leaking ctx on dsa_tag_8021q_register() error path | *86664b8652i40e: Fix the inability to attach XDP program on downed interface | *0abd337acdstmmac: fix potential division by 0 | *93a4a04558Bluetooth: RFCOMM: don't call kfree_skb() under spin_lock_irqsave() | *8d6bbe5241Bluetooth: hci_core: don't call kfree_skb() under spin_lock_irqsave() | *804de4e24aBluetooth: hci_bcsp: don't call kfree_skb() under spin_lock_irqsave() | *1030c3aeeeBluetooth: hci_h5: don't call kfree_skb() under spin_lock_irqsave() | *9fcb5b367eBluetooth: hci_ll: don't call kfree_skb() under spin_lock_irqsave() | *14cc94a598Bluetooth: hci_qca: don't call kfree_skb() under spin_lock_irqsave() | *06467130d5Bluetooth: btusb: don't call kfree_skb() under spin_lock_irqsave() | *e52b7d460aBluetooth: btintel: Fix missing free skb in btintel_setup_combined() | *f7c9de3bcfBluetooth: MGMT: Fix error report for ADD_EXT_ADV_PARAMS | *2addf3cb63sctp: sysctl: make extra pointers netns aware | *21296a52cantb_netdev: Use dev_kfree_skb_any() in interrupt context | *0fff763f11net: lan9303: Fix read error execution path | *882bad40a0can: tcan4x5x: Fix use of register error status mask | *d50092f662can: m_can: Call the RAM init directly from m_can_chip_config | *55064642aacan: tcan4x5x: Remove invalid write in clear_interrupts | *641eef8766net: amd-xgbe: Check only the minimum speed for active/passive cables | *60b35e28dcnet: amd-xgbe: Fix logic around active and passive cables | *d436bf39f4af_unix: call proto_unregister() in the error path in af_unix_init() | *ee9d03bf89net: amd: lance: don't call dev_kfree_skb() under spin_lock_irqsave() | *6f1c4c01cchamradio: don't call dev_kfree_skb() under spin_lock_irqsave() | *eb2c6a6e8fnet: ethernet: dnet: don't call dev_kfree_skb() under spin_lock_irqsave() | *ef08e1082cnet: emaclite: don't call dev_kfree_skb() under spin_lock_irqsave() | *2786ef4066net: apple: bmac: don't call dev_kfree_skb() under spin_lock_irqsave() | *d81314e2ddnet: apple: mace: don't call dev_kfree_skb() under spin_lock_irqsave() | *9a6544343bnet/tunnel: wait until all sk_user_data reader finish before releasing the sock | *998b4e54f5net: farsync: Fix kmemleak when rmmods farsync | *71605c6906ethernet: s2io: don't call dev_kfree_skb() under spin_lock_irqsave() | *ce1b3a41e7of: overlay: fix null pointer dereferencing in find_dup_cset_node_entry() and find_dup_cset_prop() | *8399b98935drivers: net: qlcnic: Fix potential memory leak in qlcnic_sriov_init() | *96e5089702net: stmmac: fix possible memory leak in stmmac_dvr_probe() | *ecaf934e44net: stmmac: selftests: fix potential memleak in stmmac_test_arpoffload() | *e1359bc90anet: defxx: Fix missing err handling in dfx_init() | *c65603abc3net: vmw_vsock: vmci: Check memcpy_from_msg() | *9de42116fcclk: socfpga: Fix memory leak in socfpga_gate_init() | *e515881adebpf: Do not zero-extend kfunc return values | *ce61a877c7blktrace: Fix output non-blktrace event when blk_classic option enabled | *f2ae56fa0bwifi: brcmfmac: Fix error return code in brcmf_sdio_download_firmware() | *23060daf37wifi: rtl8xxxu: Fix the channel width reporting | *6d0e00334ewifi: rtl8xxxu: Add __packed to struct rtl8723bu_c2h | *e69d380650spi: spi-gpio: Don't set MOSI as an input if not 3WIRE mode | *4e501a31afclk: samsung: Fix memory leak in _samsung_clk_register_pll() | *441c05485cmedia: coda: Add check for kmalloc | *b99872178emedia: coda: Add check for dcoda_iram_alloc | *fbf081ebe2media: c8sectpfe: Add of_node_put() when breaking out of loop | *2a7330d820regulator: qcom-labibb: Fix missing of_node_put() in qcom_labibb_regulator_probe() | *ecf1b317a8mmc: core: Normalize the error handling branch in sd_read_ext_regs() | *7fecca429ememstick/ms_block: Add check for alloc_ordered_workqueue | *b77ced3fcememstick: ms_block: Add error handling support for add_disk() | *ae00eb6779mmc: renesas_sdhi: alway populate SCC pointer | *88fa6a4e39mmc: mmci: fix return value check of mmc_add_host() | *29c3690969mmc: wbsd: fix return value check of mmc_add_host() | *0959cc1685mmc: via-sdmmc: fix return value check of mmc_add_host() | *e0cfe7aa41mmc: meson-gx: fix return value check of mmc_add_host() | *62005dfcc3mmc: omap_hsmmc: fix return value check of mmc_add_host() | *1925472decmmc: atmel-mci: fix return value check of mmc_add_host() | *58c3a8d0f1mmc: wmt-sdmmc: fix return value check of mmc_add_host() | *afc898019emmc: vub300: fix return value check of mmc_add_host() | *6444079767mmc: toshsd: fix return value check of mmc_add_host() | *df683201c7mmc: rtsx_usb_sdmmc: fix return value check of mmc_add_host() | *30dc645461mmc: rtsx_pci: fix return value check of mmc_add_host() | *bc7e8744f5mmc: pxamci: fix return value check of mmc_add_host() | *2d496050demmc: mxcmmc: fix return value check of mmc_add_host() | *f0502fe86ammc: moxart: fix return value check of mmc_add_host() | *29c5b4da41mmc: alcor: fix return value check of mmc_add_host() | *52e0d8a8ddriscv, bpf: Emit fixed-length instructions for BPF_PSEUDO_FUNC | *0de70ed675NFSv4.x: Fail client initialisation if state manager thread can't run | *7055c878a0SUNRPC: Fix missing release socket in rpc_sockname() | *79d4cd40daxprtrdma: Fix regbuf data not freed in rpcrdma_req_create() | *cba633b24aALSA: mts64: fix possible null-ptr-defer in snd_mts64_interrupt | *9018550d96media: saa7164: fix missing pci_disable_device() | *2df1e2a6ecALSA: pcm: Set missing stop_operating flag at undoing trigger start | *a443c55d96bpf, sockmap: fix race in sock_map_free() | *5229b90337hwmon: (jc42) Restore the min/max/critical temperatures on resume | *785f5c732ahwmon: (jc42) Convert register access and caching to regmap/regcache | *c4c64d8abdregulator: core: fix resource leak in regulator_register() | *07f82dca11configfs: fix possible memory leak in configfs_create_dir() | *21a061772bhsr: Synchronize sequence number updates. | *a82f5b2e08hsr: Synchronize sending frames to have always incremented outgoing seq nr. | *bb3b40cd6ahsr: Disable netpoll. | *8e148d981bhsr: Avoid double remove of a node. | *9387cbf7f7hsr: Add a rcu-read lock to hsr_forward_skb(). | *a051e10bfcclk: qcom: clk-krait: fix wrong div2 functions | *8275c7465dclk: qcom: lpass-sc7180: Fix pm_runtime usage | *91657ec4d0regulator: core: fix module refcount leak in set_supply() | *66976a3be9wifi: mt76: fix coverity overrun-call in mt76_get_txpower() | *a21e3f6f41wifi: mt76: mt7921: fix reporting of TX AGGR histogram | *c8659018b6mt76: stop the radar detector after leaving dfs channel | *ae19622e7fwifi: cfg80211: Fix not unregister reg_pdev when load_builtin_regdb_keys() fails | *2e32f12998wifi: mac80211: fix memory leak in ieee80211_if_add() | *f58888434dspi: spidev: mask SPI_CS_HIGH in SPI_IOC_RD_MODE | *b6d27d9250bonding: uninitialized variable in bond_miimon_inspect() | *7201e4f4f5bpf, sockmap: Fix data loss caused by using apply_bytes on ingress redirect | *6105ed3598bpf, sockmap: Fix missing BPF_F_INGRESS flag when using apply_bytes | *8786bde11abpf, sockmap: Fix repeated calls to sock_put() when msg has more_data | *a222f992ceInput: wistron_btns - disable on UML | *d78649c21bnetfilter: conntrack: set icmpv6 redirects as RELATED | *09fe3b1392ASoC: pcm512x: Fix PM disable depth imbalance in pcm512x_probe | *8876793e56drm/amdkfd: Fix memory leakage | *8f2d2badf8drm/amdgpu: Fix PCI device refcount leak in amdgpu_atrm_get_bios() | *88c6e0995cdrm/radeon: Fix PCI device refcount leak in radeon_atrm_get_bios() | *0af0ff9fc0drm/amd/pm/smu11: BACO is supported when it's in BACO state | *27e7cf595dASoC: mediatek: mt8173: Enable IRQ when pdata is ready | *905e565375ASoC: mediatek: mt8173: Fix debugfs registration for components | *d8e32f1bf1wifi: iwlwifi: mvm: fix double free on tx path. | *d0bb44775cALSA: asihpi: fix missing pci_disable_device() | *f12377abacNFS: Fix an Oops in nfs_d_automount() | *9a96aff53cNFSv4: Fix a deadlock between nfs4_open_recover_helper() and delegreturn | *c6aca4c7baNFSv4: Fix a credential leak in _nfs4_discover_trunking() | *7f6607c884NFSv4.2: Fix initialisation of struct nfs4_label | *51899eefd1NFSv4.2: Fix a memory stomp in decode_attr_security_label | *34dffc77ddNFSv4.2: Clear FATTR4_WORD2_SECURITY_LABEL when done decoding | *d926611c89ASoC: mediatek: mtk-btcvsd: Add checks for write and read of mtk_btcvsd_snd | *f243ff92d6ASoC: dt-bindings: wcd9335: fix reset line polarity in example | *41d7b8291cdrm/tegra: Add missing clk_disable_unprepare() in tegra_dc_probe() | *2376d7fa08media: s5p-mfc: Add variant data for MFC v7 hardware for Exynos 3250 SoC | *210fcf64bemedia: dvb-usb: az6027: fix null-ptr-deref in az6027_i2c_xfer() | *b223cc15f9media: dvb-core: Fix ignored return value in dvb_register_frontend() | *825a8af31dpinctrl: pinconf-generic: add missing of_node_put() | *eedc698d66clk: imx8mn: fix imx8mn_enet_phy_sels clocks list | *f86a432604clk: imx8mn: fix imx8mn_sai2_sels clocks list | *5e98c3a345clk: imx: replace osc_hdmi with dummy | *9453e097b8clk: imx8mn: rename vpu_pll to m7_alt_pll | *bffc80bac8media: imon: fix a race condition in send_packet() | *9c9ff35d68media: vimc: Fix wrong function called when vimc_init() fails | *f849c116d3ASoC: qcom: Add checks for devm_kcalloc | *16437645dddrbd: destroy workqueue when drbd device was freed | *cdaf45415cdrbd: remove call to memset before free device/resource/connection | *f35981083cmtd: maps: pxa2xx-flash: fix memory leak in probe | *87c750affdbonding: fix link recovery in mode 2 when updelay is nonzero | *02105f0b30drm/amdgpu: fix pci device refcount leak | *5b0a1f1247clk: rockchip: Fix memory leak in rockchip_clk_register_pll() | *27aac5c012regulator: core: use kfree_const() to free space conditionally | *a69b1faa9bALSA: seq: fix undefined behavior in bit shift for SNDRV_SEQ_FILTER_USE_EVENT | *9c0f3617baALSA: pcm: fix undefined behavior in bit shift for SNDRV_PCM_RATE_KNOT | *6159424e2dpinctrl: k210: call of_node_put() | *18a973fcb1HID: hid-sensor-custom: set fixed size for custom attributes | *0fc4280dbebpf: Move skb->len == 0 checks into __bpf_redirect | *8dbcb4c284mtd: spi-nor: Fix the number of bytes for the dummy cycles | *58e1a0ef52mtd: spi-nor: hide jedec_id sysfs attribute if not present | *348d95e39finet: add READ_ONCE(sk->sk_bound_dev_if) in inet_csk_bind_conflict() | *4451bef1a3media: videobuf-dma-contig: use dma_mmap_coherent | *b2781a8626media: platform: exynos4-is: Fix error handling in fimc_md_init() | *7cf71bbe5dmedia: solo6x10: fix possible memory leak in solo_sysfs_init() | *c290aa527fmedia: vidtv: Fix use-after-free in vidtv_bridge_dvb_init() | *648f303102Input: elants_i2c - properly handle the reset GPIO when power is off | *e0d3e46ac6mtd: lpddr2_nvm: Fix possible null-ptr-deref | *ab4e42f519drm/msm/a6xx: Fix speed-bin detection vs probe-defer | *fea795f7c7wifi: ath10k: Fix return value in ath10k_pci_init() | *77482c4dd4block: clear ->slave_dir when dropping the main slave_dir reference | *62251948e2ima: Fix misuse of dereference of pointer in template_desc_init_fields() | *29d6c69ba4integrity: Fix memory leakage in keyring allocation error path | *8e6df95717drm/fourcc: Fix vsub/hsub for Q410 and Q401 | *ec1727f89edrm/fourcc: Add packed 10bit YUV 4:2:0 format | *f72608b8ddregulator: qcom-rpmh: Fix PMR735a S3 regulator spec | *63d011ad05nvme: return err on nvme_init_non_mdts_limits fail | *f289a38df0amdgpu/pm: prevent array underflow in vega20_odn_edit_dpm_table() | *cda1895f3bregulator: core: fix unbalanced of node refcount in regulator_dev_lookup() | *1a5aaa5736nvmet: only allocate a single slab for bvecs | *cb3033a432libbpf: Fix uninitialized warning in btf_dump_dump_type_data | *83baa50939ASoC: pxa: fix null-pointer dereference in filter() | *a06ba0f7f8drm/mediatek: Modify dpi power on/off sequence. | *6d25bc6370drm/radeon: Add the missed acpi_put_table() to fix memory leak | *4cf11e9d31bfq: fix waker_bfqq inconsistency crash | *55e822212erxrpc: Fix ack.bufferSize to be 0 when generating an ack | *5ef8bf0df1net, proc: Provide PROC_FS=n fallback for proc_create_net_single_write() | *d1c44928bbmedia: camss: Clean up received buffers on failed start of streaming | *3b4b4df3f8wifi: rsi: Fix handling of 802.3 EAPOL frames sent via control port | *9e1440c858Input: joystick - fix Kconfig warning for JOYSTICK_ADC | *71212d7318mtd: Fix device name leak when register device failed in add_mtd_device() | *106311677bclk: qcom: gcc-sm8250: Use retention mode for USB GDSCs | *322c7415e7bpf: propagate precision across all frames, not just the last one | *07c286c10abpf: Check the other end of slot_type for STACK_SPILL | *fdbc363bc1bpf: propagate precision in ALU/ALU64 operations | *b29e46610cmedia: platform: exynos4-is: fix return value check in fimc_md_probe() | *ab54081a28media: vivid: fix compose size exceed boundary | *3c58c83c6fbpf: Fix slot type check in check_stack_write_var_off | *cffa75198cdrm/msm/hdmi: use devres helper for runtime PM management | *58d002b72edrm/msm/hdmi: drop unused GPIO support | *2d4bc60693ima: Handle -ESTALE returned by ima_filter_rule_match() | *13fc167e16drm/panel/panel-sitronix-st7701: Remove panel on DSI attach failure | *c20672cfa0spi: Update reference to struct spi_controller | *2858d038c5clk: renesas: r9a06g032: Repair grave increment error | *f6ed73db39drm/rockchip: lvds: fix PM usage counter unbalance in poweron | *13fab6322bcan: kvaser_usb: Compare requested bittiming parameters with actual parameters in do_set_{,data}_bittiming | *4e55d61e87can: kvaser_usb: Add struct kvaser_usb_busparams | *fcfd4df200can: kvaser_usb_leaf: Fix bogus restart events | *51f07da38bcan: kvaser_usb_leaf: Fix wrong CAN state after stopping | *647c26887bcan: kvaser_usb_leaf: Fix improved state not being reported | *9676d65a4acan: kvaser_usb: make use of units.h in assignment of frequency | *c761108562can: kvaser_usb_leaf: Set Warning state even without bus errors | *a60bf9d814can: kvaser_usb: kvaser_usb_leaf: Handle CMD_ERROR_EVENT | *8aae6bddc1can: kvaser_usb: kvaser_usb_leaf: Rename {leaf,usbcan}_cmd_error_event to {leaf,usbcan}_cmd_can_error_event | *972270be24can: kvaser_usb: kvaser_usb_leaf: Get capabilities from device | *e9e0d9945fcan: kvaser_usb: do not increase tx statistics when sending error message frames | *e39bce64e5libbpf: Btf dedup identical struct test needs check for nested structs/arrays | *d4419f93e2media: exynos4-is: don't rely on the v4l2_async_subdev internals | *8741792d82soreuseport: Fix socket selection for SO_INCOMING_CPU. | *094f56192cvenus: pm_helpers: Fix error check in vcodec_domains_get() | *3c793a9ad9media: i2c: ad5820: Fix error path | *07611f9e44media: adv748x: afe: Select input port when initializing AFE | *aa81257dbfmedia: coda: jpeg: Add check for kmalloc | *9a402adc9fmedia: v4l2-ctrls: Fix off-by-one error in integer menu control check | *1caed03305drm/amdgpu/powerplay/psm: Fix memory leak in power state init | *f66a877083ipmi: kcs: Poll OBF briefly to reduce OBE latency | *983320199eata: libata: fix NCQ autosense logic | *a9caf71aebata: add/use ata_taskfile::{error|status} fields | *3483c3fb48ata: libata: move ata_{port,link,dev}_dbg to standard pr_XXX() macros | *6706135577libbpf: Fix null-pointer dereference in find_prog_by_sec_insn() | *a733bf1019libbpf: Fix use-after-free in btf_dump_name_dups | *b5ec2a04fedrm/bridge: adv7533: remove dynamic lane switching from adv7533 bridge | *6d40a49d05wifi: rtl8xxxu: Fix reading the vendor of combo chips | *355f16f756wifi: ath9k: hif_usb: Fix use-after-free in ath9k_hif_usb_reg_in_cb() | *d856f7574bwifi: ath9k: hif_usb: fix memory leak of urbs in ath9k_hif_usb_dealloc_tx_urbs() | *12229a2523platform/mellanox: mlxbf-pmc: Fix event typo | *a0d93aac54rapidio: devices: fix missing put_device in mport_cdev_open | *7af9cb8cbbhfs: Fix OOB Write in hfs_asc2mac | *90962b3b1crelay: fix type mismatch when allocating memory in relay_create_buf() | *0d60b11f8feventfd: change int to __u64 in eventfd_signal() ifndef CONFIG_EVENTFD | *2f5cc7fd73rapidio: fix possible UAF when kfifo_alloc() fails | *337b68da68fs: sysv: Fix sysv_nblocks() returns wrong value | *95d42a8d3dlockd: set other missing fields when unlocking files | *318229b4d3MIPS: OCTEON: warn only once if deprecated link status is being used | *5e6d37a93aMIPS: BCM63xx: Add check for NULL for clk in clk_enable | *50af0ba3e1platform/x86: intel_scu_ipc: fix possible name leak in __intel_scu_ipc_register() | *3cf8150135platform/x86: mxm-wmi: fix memleak in mxm_wmi_call_mx[ds|mx]() | *0ceadb5a3eplatform/chrome: cros_ec_typec: zero out stale pointers | *49c98b5688platform/chrome: cros_ec_typec: Cleanup switch handle return paths | *b55ef8508aPM: runtime: Do not call __rpm_callback() from rpm_idle() | *0bf874183bxen/privcmd: Fix a possible warning in privcmd_ioctl_mmap_resource() | *70966d6b0fx86/xen: Fix memory leak in xen_init_lock_cpu() | *23aef94eeax86/xen: Fix memory leak in xen_smp_intr_init{_pv}() | *03ab1c5c2fuprobes/x86: Allow to probe a NOP instruction with 0x66 prefix | *6fde666278ACPICA: Fix use-after-free in acpi_ut_copy_ipackage_to_ipackage() | *9cabd5f4f1clocksource/drivers/timer-ti-dm: Fix missing clk_disable_unprepare in dmtimer_systimer_init_clock() | *b73c76c3c4cpu/hotplug: Do not bail-out in DYING/STARTING sections | *6eb1802184cpu/hotplug: Make target_store() a nop when target == state | *cd130e2676futex: Resend potentially swallowed owner death notification | *fd8a10d44cfutex: Move to kernel/futex/ | *156144bd18mips: ralink: mt7621: do not use kzalloc too early | *186d59bb6amips: ralink: mt7621: soc queries and tests as functions | *8348da01e5mips: ralink: mt7621: define MT7621_SYSC_BASE with __iomem | *0f8e6fe09cclocksource/drivers/sh_cmt: Access registers according to spec | *a47de2fd3frapidio: rio: fix possible name leak in rio_register_mport() | *ec3f04f74frapidio: fix possible name leaks when rio_add_device() fails | *4662d8e6abdebugfs: fix error when writing negative value to atomic_t debugfs file | *7e8e8cc136lib/notifier-error-inject: fix error when writing -errno to debugfs file | *39b5e6130blibfs: add DEFINE_SIMPLE_ATTRIBUTE_SIGNED for signed value | *19c202e6e5cpufreq: amd_freq_sensitivity: Add missing pci_dev_put() | *93e3c80338genirq/irqdesc: Don't try to remove non-existing sysfs files | *435cc7d18cnfsd: don't call nfsd_file_put from client states seqfile display | *5030d4d2bfNFSD: Finish converting the NFSv2 GETACL result encoder | *e498675e06SUNRPC: Return true/false (not 1/0) from bool functions | *3e255dc210EDAC/i10nm: fix refcount leak in pci_get_dev_wrapper() | *740efb64cairqchip/wpcm450: Fix memory leak in wpcm450_aic_of_init() | *77b99b483firqchip: gic-pm: Use pm_runtime_resume_and_get() in gic_probe() | *5139cbc0c6thermal: core: fix some possible name leaks in error paths | *cab345f9d5platform/chrome: cros_usbpd_notify: Fix error handling in cros_usbpd_notify_init() | *0358bc7cc2perf/x86/intel/uncore: Fix reference count leak in __uncore_imc_init_box() | *433bd587dcperf/x86/intel/uncore: Fix reference count leak in snr_uncore_mmio_map() | *3485f19751perf/x86/intel/uncore: Fix reference count leak in hswep_has_limit_sbox() | *0021ef7dc6perf/x86/intel/uncore: Fix reference count leak in sad_cfg_iio_topology() | *c12b314bb2PNP: fix name memory leak in pnp_alloc_dev() | *f1c7a6af71selftests/efivarfs: Add checking of the test return value | *46be3ee1caMIPS: vpe-cmp: fix possible memory leak while module exiting | *e820a8192fMIPS: vpe-mt: fix possible memory leak while module exiting | *61d68cf2baocfs2: fix memory leak in ocfs2_stack_glue_init() | *e83b47580alib/fonts: fix undefined behavior in bit shift for get_default_font | *0df7d9ab6bproc: fixup uptime selftest | *07b8659b8etimerqueue: Use rb_entry_safe() in timerqueue_getnext() | *413b18866bplatform/x86: huawei-wmi: fix return value calculation | *4b46932283lib/debugobjects: fix stat count and optimize debug_objects_mem_init | *f790dfe816perf: Fix possible memleak in pmu_dev_alloc() | *418d21c0dfselftests/ftrace: event_triggers: wait longer for test_event_enable | *4ea765b106cpufreq: qcom-hw: Fix memory leak in qcom_cpufreq_hw_read_lut() | *c52d9c25d9fs: don't audit the capability check in simple_xattr_list() | *e4d0d13b46PM: hibernate: Fix mistake in kerneldoc comment | *1f62b8e50dx86/sgx: Reduce delay and interference of enclave release | *f5b88170f0alpha: fix syscall entry in !AUDUT_SYSCALL case | *a819ba80b9alpha: fix TIF_NOTIFY_SIGNAL handling | *eb2a732ef4cpuidle: dt: Return the correct numbers of parsed idle states | *3af4f5cb8asched/uclamp: Make asym_fits_capacity() use util_fits_cpu() | *23cb580e0csched/core: Introduce sched_asym_cpucap_active() | *41c2dba388sched/fair: Removed useless update of p->recent_used_cpu | *55ffeab089sched/uclamp: Make select_idle_capacity() use util_fits_cpu() | *4639bfbb83sched/uclamp: Make task_fits_capacity() use util_fits_cpu() | *309e50cbfesched/uclamp: Fix relationship between uclamp and migration margin | *54a766e196sched/fair: Cleanup task_util and capacity type | *26bffaf678ovl: remove privs in ovl_fallocate() | *5dc34f9aaaovl: remove privs in ovl_copyfile() | *9636e70ee2ovl: use ovl_copy_{real,upper}attr() wrappers | *a54843833covl: store lower path in ovl_inode | *163c5bbe7dtpm/tpm_crb: Fix error message in __crb_relinquish_locality() | *fe880e9df9tpm/tpm_ftpm_tee: Fix error handling in ftpm_mod_init() | *ebc73c4f26pstore: Avoid kcore oops by vmap()ing with VM_IOREMAP | *d4dcde11bfARM: mmp: fix timer_read delay | *95916147dcpstore/ram: Fix error return code in ramoops_probe() | *a31a647a3dseccomp: Move copy_seccomp() to no failure path. | *b8b76b8da6arm64: dts: armada-3720-turris-mox: Add missing interrupt for RTC | *820a5ccca7ARM: dts: turris-omnia: Add switch port 6 node | *b311f8e9f5ARM: dts: turris-omnia: Add ethernet aliases | *48ebdd06c9ARM: dts: armada-39x: Fix assigned-addresses for every PCIe Root Port | *f27dd04e44ARM: dts: armada-38x: Fix assigned-addresses for every PCIe Root Port | *1e53c63da8ARM: dts: armada-375: Fix assigned-addresses for every PCIe Root Port | *3af1a73e9eARM: dts: armada-xp: Fix assigned-addresses for every PCIe Root Port | *e4ed8133c4ARM: dts: armada-370: Fix assigned-addresses for every PCIe Root Port | *b335b6344eARM: dts: dove: Fix assigned-addresses for every PCIe Root Port | *5b3415e683arm64: dts: mediatek: mt6797: Fix 26M oscillator unit name | *93f5e66496arm64: dts: mediatek: pumpkin-common: Fix devicetree warnings | *debd938e21arm64: dts: mt2712-evb: Fix usb vbus regulators unit names | *b2c6397754arm64: dts: mt2712-evb: Fix vproc fixed regulators unit names | *96c972f835arm64: dts: mt2712e: Fix unit address for pinctrl node | *2cd1391c28arm64: dts: mt2712e: Fix unit_address_vs_reg warning for oscillators | *39877a3636arm64: dts: mt6779: Fix devicetree build warnings | *af431ce47eARM: dts: nuvoton: Remove bogus unit addresses from fixed-partition nodes | *0a616049ecarm64: dts: ti: k3-j721e-main: Drop dma-coherent in crypto node | *22a740824aarm64: dts: ti: k3-am65-main: Drop dma-coherent in crypto node | *b131304fe7perf/smmuv3: Fix hotplug callback leak in arm_smmu_pmu_init() | *b99fbe8d94perf/arm_dmc620: Fix hotplug callback leak in dmc620_pmu_init() | *9285b623bbperf: arm_dsu: Fix hotplug callback leak in dsu_pmu_init() | *e6318a7e19arm64: mm: kfence: only handle translation faults | *46ddfb9d1earm64: Treat ESR_ELx as a 64-bit register | *681e340128soc: ti: smartreflex: Fix PM disable depth imbalance in omap_sr_probe | *6eca7a2535soc: ti: knav_qmss_queue: Fix PM disable depth imbalance in knav_queue_probe | *972f8fc065soc: ti: knav_qmss_queue: Use pm_runtime_resume_and_get instead of pm_runtime_get_sync | *fe53048f2aarm: dts: spear600: Fix clcd interrupt | *75baeec464arm64: dts: qcom: sm6125: fix SDHCI CQE reg names | *0f9ac04191soc: qcom: apr: Add check for idr_alloc and of_property_read_string_index | *6855dd02c5soc: qcom: apr: make code more reuseable | *c9fb81a835arm64: dts: qcom: sm8250: drop bogus DP PHY clock | *53ffa57464arm64: dts: qcom: sm8350: fix UFS PHY registers | *d5a6bbd7a2arm64: dts: qcom: sm8250: fix UFS PHY registers | *3a52ff845farm64: dts: qcom: sm8150: fix UFS PHY registers | *800f8165e0arm64: dts: qcom: Correct QMP PHY child node name | *ee136f275bsoc: qcom: llcc: make irq truly optional | *aa7ffd4174arm64: dts: qcom: sm8250: correct LPASS pin pull down | *f94bacc616arm64: dts: qcom: pm660: Use unique ADC5_VCOIN address in node name | *d5bf119781drivers: soc: ti: knav_qmss_queue: Mark knav_acc_firmwares as static | *4707d5daf8ARM: dts: stm32: Fix AV96 WLAN regulator gpio property | *33647d7a46ARM: dts: stm32: Drop stm32mp15xc.dtsi from Avenger96 | *9f271a8660objtool, kcsan: Add volatile read/write instrumentation to whitelist | *51fe2dcba8arm64: dts: qcom: msm8916: Drop MSS fallback compatible | *a9fff3524farm64: dts: qcom: sdm845-cheza: fix AP suspend pin bias | *6487f48ea3arm64: dts: qcom: sdm630: fix UART1 pin bias | *6c0c9c5458ARM: dts: qcom: apq8064: fix coresight compatible | *0f9b088d68arm64: dts: qcom: msm8996: fix GPU OPP table | *270683fc7barm64: dts: qcom: msm8996: fix supported-hw in cpufreq OPP tables | *5c5a628914arm64: dts: qcom: msm8996: Add MSM8996 Pro support | *3f14048ee4arm64: dts: qcom: sm8250-sony-xperia-edo: fix touchscreen bias-disable | *89f79f8d7farm64: dts: qcom: ipq6018-cp01-c1: use BLSPI1 pins | *9db5992e72usb: musb: remove extra check in musb_gadget_vbus_draw | *adc063a491drm/amd/display: Manually adjust strobe for DCN303 * |50e12445abMerge 5.15.85 into android13-5.15-lts |\| | *5827ddaf45Linux 5.15.85 | *e22dbadac8net: loopback: use NET_NAME_PREDICTABLE for name_assign_type | *314e7a7836selftests: net: Use "grep -E" instead of "egrep" | *19a7814396Bluetooth: L2CAP: Fix u8 overflow | *f692abf139HID: uclogic: Add HID_QUIRK_HIDINPUT_FORCE quirk | *5325a884e2usb: dwc3: pci: Update PCIe device ID for USB3 controller on CPU sub-system for Raptor Lake | *367e1e3399igb: Initialize mailbox message for VF reset | *a301742b35xhci: Apply XHCI_RESET_TO_DEFAULT quirk to ADL-N | *5e959f0c4cUSB: serial: f81534: fix division by zero on line-speed change | *68fbe268d2USB: serial: f81232: fix division by zero on line-speed change | *3ec7f24b8bUSB: serial: cp210x: add Kamstrup RF sniffer PIDs | *2b092fab23USB: serial: option: add Quectel EM05-G modem | *6b41a35b41usb: gadget: uvc: Prevent buffer overflow in setup handler | *828112571cudf: Fix extending file within last block | *df1a2596c7udf: Do not bother looking for prealloc extents if i_lenExtents matches i_size | *63dbbd8f14udf: Fix preallocation discarding at indirect extent boundary | *79a97f08aeudf: Discard preallocation before extending file with a hole * |fb8d543b61Merge 5.15.84 into android13-5.15-lts |\| | *d68f50bfb0Linux 5.15.84 | *972707bae3net: fec: properly guard irq coalesce setup | *289721fe09ASoC: ops: Correct bounds check for second channel on SX controls | *de0866b94anvme-pci: clear the prp2 field when not used | *8bffa95ac1perf: Fix perf_pending_task() UaF | *825bd2af42ASoC: cs42l51: Correct PGA Volume minimum value | *91582b3a1anet: fec: don't reset irq coalesce settings to defaults on "ip link up" | *c772dab247can: mcba_usb: Fix termination command argument | *aa822de7decan: sja1000: fix size of OCR_MODE_MASK define | *09e08740d7pinctrl: meditatek: Startup with the IRQs disabled | *172a95026flibbpf: Use page size as max_entries when probing ring buffer map | *cf611d7867ASoC: ops: Check bounds for second channel in snd_soc_put_volsw_sx() | *a74b88e170ASoC: fsl_micfil: explicitly clear CHnF flags | *afac1e7d78ASoC: fsl_micfil: explicitly clear software reset bit | *9d933af8fenfp: fix use-after-free in area_cache_get() | *e1a4f5880dvfs: fix copy_file_range() averts filesystem freeze protection | *86e28ed25bx86/vdso: Conditionally export __vdso_sgx_enter_enclave() * |bfbd2237c1Merge 5.15.83 into android13-5.15-lts |\| | *fd6d66840bLinux 5.15.83 | *f895511de9io_uring: Fix a null-ptr-deref in io_tctx_exit_cb() | *f435c66d23io_uring: move to separate directory | *d9e1e5d8a7block: move CONFIG_BLOCK guard to top Makefile | *e5c0bc4ff5can: esd_usb: Allow REC and TEC to return to zero | *db6343a5b0s390/qeth: fix use-after-free in hsci | *a56c1cebe4s390/qeth: fix various format strings | *a6dba316c9macsec: add missing attribute validation for offload | *40500f1f47net: mvneta: Fix an out of bounds check | *b9274dbe39net: thunderbolt: fix memory leak in tbnet_open() | *7390c70bd4ipv6: avoid use-after-free in ip6_fragment() | *1beb475892net: plip: don't call kfree_skb/dev_kfree_skb() under spin_lock_irq() | *b08412a9cfnet: phy: mxl-gpy: fix version reporting | *dec5abd91axen/netback: fix build warning | *54d830e242dpaa2-switch: Fix memory leak in dpaa2_switch_acl_entry_add() and dpaa2_switch_acl_entry_remove() | *c7adcbd0fdethernet: aeroflex: fix potential skb leak in greth_init_rings() | *d962d42d63tipc: call tipc_lxc_xmit without holding node_read_lock | *f3b5dda26cnet: dsa: sja1105: fix memory leak in sja1105_setup_devlink_regions() | *5dab6fa068ipv4: Fix incorrect route flushing when table ID 0 is used | *ac566bd577ipv4: Fix incorrect route flushing when source address is deleted | *af4ccae4b7tipc: Fix potential OOB in tipc_link_proto_rcv() | *b8ce0e6f9fnet: hisilicon: Fix potential use-after-free in hix5hd2_rx() | *1685417774net: mdio: fix unbalanced fwnode reference count in mdio_device_release() | *6f4798ac9cnet: hisilicon: Fix potential use-after-free in hisi_femac_rx() | *114e65a221net: thunderx: Fix missing destroy_workqueue of nicvf_rx_mode_wq | *51c0494575net: microchip: sparx5: Fix missing destroy_workqueue of mact_queue | *99eec0a766ip_gre: do not report erspan version on GRE interface | *2891957853net: stmmac: fix "snps,axi-config" node property parsing | *5cb8f1a784gpio/rockchip: fix refcount leak in rockchip_gpiolib_register() | *b8c2f0392dnvme initialize core quirks before calling nvme_init_subsystem | *908b2da426NFC: nci: Bounds check struct nfc_target arrays | *d841cc1563i40e: Disallow ip4 and ip6 l4_4_bytes | *625a13850bi40e: Fix for VF MAC address 0 | *5538794dbdi40e: Fix not setting default xps_cpus after reset | *a6b30598fenet: mvneta: Prevent out of bounds read in mvneta_config_rss() | *e6e897d4fexen-netfront: Fix NULL sring after live migration | *eefd8953a7octeontx2-pf: Fix potential memory leak in otx2_init_tc() | *f88acaed07net: mdiobus: fix double put fwnode in the error path | *cc62d76928net: mdiobus: fwnode_mdiobus_register_phy() rework error handling | *ea113b570enet: encx24j600: Fix invalid logic in reading of MISTAT register | *8aae746d06net: encx24j600: Add parentheses to fix precedence | *a110287ef4mac802154: fix missing INIT_LIST_HEAD in ieee802154_if_add() | *e046421bedselftests: rtnetlink: correct xfrm policy rule in kci_test_ipsec_offload | *4fa8988a36net: dsa: sja1105: Check return value | *b35be171dfnet: dsa: hellcreek: Check return value | *a4c342e645net: dsa: ksz: Check return value | *edf7284a98Bluetooth: Fix not cleanup led when bt_init fails | *3322193949Bluetooth: 6LoWPAN: add missing hci_dev_put() in get_l2cap_conn() | *6c88c764e0vmxnet3: use correct intrConf reference when using extended queues | *5ad0d85757vmxnet3: correctly report encapsulated LRO packet | *5c014eb0edaf_unix: Get user_ns from in_skb in unix_diag_get_exact(). | *807a01a329drm: bridge: dw_hdmi: fix preference of RGB modes over YUV420 | *eb96fd3983net: broadcom: Add PTP_1588_CLOCK_OPTIONAL dependency for BCMGENET under ARCH_BCM2835 | *16eb678bcaigb: Allocate MSI-X vector when testing | *34c6367c94e1000e: Fix TX dispatch condition | *4271515f18gpio: amd8111: Fix PCI device reference count leak | *d57b60e9b3drm/bridge: ti-sn65dsi86: Fix output polarity setting bug | *f8b2965601netfilter: ctnetlink: fix compilation warning after data race fixes in ct mark | *246bcd05baca8210: Fix crash by zero initializing data | *80dad8df5fieee802154: cc2520: Fix error return code in cc2520_hw_init() | *dd9dcfb85cdrm/vmwgfx: Fix race issue calling pin_user_pages | *7b09ba9036netfilter: nft_set_pipapo: Actually validate intervals in fields after the first one | *6daaa84b62gpiolib: fix memory leak in gpiochip_setup_dev() | *1a1075d371gpiolib: check the 'ngpios' property in core gpiolib code | *70c5515c1cgpiolib: improve coding style for local variables | *3b714f25fcclk: Fix pointer casting to prevent oops in devm_clk_release() | *c142cba37dcan: af_can: fix NULL pointer dereference in can_rcv_filter | *104bb1f67eHID: ite: Enable QUIRK_TOUCHPAD_ON_OFF_REPORT on Acer Aspire Switch V 10 | *f755d11c55HID: core: fix shift-out-of-bounds in hid_report_raw_event | *2d4b310c32HID: hid-lg4ff: Add check for empty lbuf | *5e8021ae08HID: usbhid: Add ALWAYS_POLL quirk for some mice | *5e88c6f4aanet: dsa: sja1105: avoid out of bounds access in sja1105_init_l2_policing() | *1074fefce9drm/shmem-helper: Avoid vm_open error paths | *83e3da8bb9drm/shmem-helper: Remove errant put in error path | *249011f4c3drm/amdgpu/sdma_v4_0: turn off SDMA ring buffer in the s2idle suspend | *1e4fe9a154drm/vmwgfx: Don't use screen objects when SEV is active | *f6550976feKVM: s390: vsie: Fix the initialization of the epoch extension (epdx) field | *fe50a9bbebnet: mana: Fix race on per-CQ variable napi work_done | *a49894a5acBluetooth: Fix crash when replugging CSR fake controllers | *1dee2b5047Bluetooth: btusb: Add debug message for CSR controllers | *3ac29732a2mm/gup: fix gup_pud_range() for dax | *aad8bbd17amemcg: fix possible use-after-free in memcg_write_event_control() | *6fb8bc29bfmedia: v4l2-dv-timings.c: fix too strict blanking sanity checks | *a4c575541eRevert "ARM: dts: imx7: Fix NAND controller size-cells" | *28abc11459soundwire: intel: Initialize clock stop timeout | *22d800b378media: videobuf2-core: take mmap_lock in vb2_get_unmapped_area() | *5d0fa6fc88xen/netback: don't call kfree_skb() with interrupts disabled | *4422241cefxen/netback: do some code cleanup | *0fe29bd925xen/netback: Ensure protocol headers don't fall in the non-linear area | *f01677be31drm/bridge: anx7625: Fix edid_read break case in sp_tx_edid_read() | *ee2536830bcifs: fix use-after-free caused by invalid pointer `hostname` | *dc62f05f66rtc: cmos: avoid UIP when reading alarm time | *48ea4199afrtc: cmos: avoid UIP when writing alarm time | *3f52afc6edrtc: mc146818-lib: extract mc146818_avoid_UIP | *1a3f8c6cd2mm/khugepaged: invoke MMU notifiers in shmem/file collapse paths | *79ad784c9dmm/khugepaged: fix GUP-fast interaction by sending IPI | *d15cd6de01mm/khugepaged: take the right locks for page table retraction | *26f084e554net: usb: qmi_wwan: add u-blox 0x1342 composition | *029a7f1c5d9p/xen: check logical size for buffer size | *b398832893usb: dwc3: gadget: Disable GUSB2PHYCFG.SUSPHY for End Transfer | *e70a572440fbcon: Use kzalloc() in fbcon_prepare_logo() | *fd3768597dregulator: twl6030: fix get status of twl6032 regulators | *9f74b9aa8dASoC: soc-pcm: Add NULL check in BE reparenting | *dae93f4168btrfs: send: avoid unaligned encoded writes when attempting to clone range | *f54e1edf57selftests/net: Find nettest in current directory | *fccd454129ALSA: seq: Fix function prototype mismatch in snd_seq_expand_var_event | *542a563bb7regulator: slg51000: Wait after asserting CS pin | *3d1b5fde369p/fd: Use P9_HDRSZ for header size | *fe2d44e86eASoC: rt711-sdca: fix the latency time of clock stop prepare state machine transitions | *e945f3d809ARM: dts: rockchip: disable arm_global_timer on rk3066 and rk3188 | *c3b818c91aspi: mediatek: Fix DEVAPC Violation at KO Remove | *d9f0107be1ASoC: wm8962: Wait for updated value of WM8962_CLOCKING1 register | *7ae0262748ARM: 9266/1: mm: fix no-MMU ZERO_PAGE() implementation | *d81c62e312ARM: 9251/1: perf: Fix stacktraces for tracepoint events in THUMB2 kernels | *66717ad03bfs: use acquire ordering in __fget_light() | *1222e2364aARM: dts: rockchip: rk3188: fix lcdc1-rgb24 node name | *996fb29b06arm64: dts: rockchip: fix ir-receiver node names | *752138ef89ARM: dts: rockchip: fix ir-receiver node names | *8045971e40arm: dts: rockchip: remove clock-frequency from rtc | *5e9fb8013aarm: dts: rockchip: fix node name for hym8563 rtc | *2ed7137e91arm64: dts: rockchip: keep I2S1 disabled for GPIO function on ROCK Pi 4 series | *5a1122e1a8mmc: mtk-sd: Fix missing clk_disable_unprepare in msdc_of_clock_parse() | *282f52c954clk: Provide new devm_clk helpers for prepared and enabled clocks | *eb94a7a20fclk: generalize devm_clk_get() a bit * |20de784185ANDROID: fix up abi change in struct sdhci_host * |ebd1f8013dANDROID: gki_defconfig: add CONFIG_FUNCTION_ERROR_INJECTION * |112ff45bb5Merge 5.15.82 into android13-5.15-lts |\| | *d979030136Linux 5.15.82 | *48642f9431proc: proc_skip_spaces() shouldn't think it is working on C strings | *3eb9213f66proc: avoid integer type confusion in get_proc_long | *4a4073a2e2ipc/sem: Fix dangling sem_array access in semtimedop race | *53b9b1201eInput: raydium_ts_i2c - fix memory leak in raydium_i2c_send() | *571b6bbbf5char: tpm: Protect tpm_pm_suspend with locks | *f39891cfe7Revert "clocksource/drivers/riscv: Events are stopped during CPU suspend" | *a759057af7ACPI: HMAT: Fix initiator registration for single-initiator systems | *da8a794d71ACPI: HMAT: remove unnecessary variable initialization | *2d16161a2ci2c: imx: Only DMA messages with I2C_M_DMA_SAFE flag set | *950a05cb15i2c: npcm7xx: Fix error handling in npcm_i2c_init() | *db3f8da033serial: stm32: Deassert Transmit Enable on ->rs485_config() | *45f628f4fdserial: stm32: Use TC interrupt to deassert GPIO RTS in RS485 mode | *c60eae5b1dserial: stm32: Factor out GPIO RTS toggling into separate function | *041f8dc882ipv4: Fix route deletion when nexthop info is not specified | *25174d91e4ipv4: Handle attempt to delete multipath route when fib_info contains an nh reference | *a0ad247e55selftests: net: fix nexthop warning cleanup double ip typo | *532847b69cselftests: net: add delete nexthop route warning test | *e078355881Kconfig.debug: provide a little extra FRAME_WARN leeway when KASAN is enabled | *723fa02e0eparisc: Increase FRAME_WARN to 2048 bytes on parisc | *b951ab4b35mm: migrate: fix THP's mapcount on isolation | *c5eda6029cmm: __isolate_lru_page_prepare() in isolate_migratepages_block() | *bdb613ef17iommu/vt-d: Fix PCI device refcount leak in dmar_dev_scope_init() | *b6eea8b2e8iommu/vt-d: Fix PCI device refcount leak in has_external_pci() | *787d81d4ebnvme: fix SRCU protection of nvme_ns_head list | *12f237200criscv: kexec: Fixup irq controller broken in kexec crash path | *ac00301adbriscv: fix race when vmap stack overflow | *fa7a7d185eriscv: Sync efi page table's kernel mappings before switching | *d86d698925pinctrl: single: Fix potential division by zero | *98b15c7066ASoC: ops: Fix bounds check for _sx controls | *f88a6977f8KVM: x86/mmu: Fix race condition in direct_page_fault | *df4b177b48io_uring/poll: fix poll_refs race with cancelation | *4b702b7d11io_uring: make poll refs more robust | *1d58849ac2io_uring: cmpxchg for poll arm refs release | *cd1981a8c3io_uring: fix tw losing poll events | *62321dc7b0io_uring: update res mask in io_poll_check_events | *417d5ea6e7tracing: Free buffers when a used dynamic event is removed | *52fc245d15tracing: Fix race where histograms can be called before the event | *cb2b0612cdtracing/osnoise: Fix duration type | *615a996ff3drm/i915: Never return 0 if not all requests retired | *01a2b25ef2drm/i915: Fix negative value passed as remaining time | *ff1591ba33drm/amdgpu: enable Vangogh VCN indirect sram mode | *ac2d7fa908drm/amdgpu: temporarily disable broken Clang builds due to blown stack-frame | *57ee7bc4c6mmc: sdhci: Fix voltage switch delay | *bb8f809514mmc: sdhci-sprd: Fix no reset data and command after voltage switch | *4c7681c1a5mmc: sdhci-esdhc-imx: correct CQHCI exit halt state check | *01dbe4db59mmc: core: Fix ambiguous TRIM and DISCARD arg | *738946e355mmc: mmc_test: Fix removal of debugfs file | *635d051734net: stmmac: Set MAC's flow control register to reflect current settings | *9132dcdf3bv4l2: don't fall back to follow_pfn() if pin_user_pages_fast() fails | *76ad884be0pinctrl: intel: Save and restore pins in "direct IRQ" mode | *41296b85fax86/bugs: Make sure MSR_SPEC_CTRL is updated properly upon resume from S3 | *33021419fdnilfs2: fix NULL pointer dereference in nilfs_palloc_commit_free_entry() | *2e44dd9a8dtools/vm/slabinfo-gnuplot: use "grep -E" instead of "egrep" | *b60a8ad771error-injection: Add prompt for function error injection | *757eb00c4cALSA: dice: fix regression for Lexicon I-ONIX FW810S | *a1a96a6f30riscv: mm: Proper page permissions after initmem free | *823df3607driscv: vdso: fix section overlapping under some conditions | *6e035d5a2ahwmon: (coretemp) fix pci device refcount leak in nv1a_ram_new() | *7692700ac8hwmon: (coretemp) Check for null before removing sysfs attrs | *9b5836b9c4net: ethernet: renesas: ravb: Fix promiscuous mode after system resumed | *0dfb9a5663sctp: fix memory leak in sctp_stream_outq_migrate() | *fcb3e02161packet: do not set TP_STATUS_CSUM_VALID on CHECKSUM_COMPLETE | *04b995e963net: tun: Fix use-after-free in tun_detach() | *43ca0adf79afs: Fix fileserver probe RTT handling | *543d917f69net: mdiobus: fix unbalanced node reference count | *dca370e575net: hsr: Fix potential use-after-free | *1daec08156tipc: re-fetch skb cb after tipc_msg_validate | *16a64dc265dsa: lan9303: Correct stat name | *766086ea8cnet: wwan: iosm: fix dma_alloc_coherent incompatible pointer type | *c667751a42net: wwan: iosm: fix kernel test robot reported error | *9c584d6d9cnet: ethernet: nixge: fix NULL dereference | *8782b32ef8net/9p: Fix a potential socket leak in p9_socket_open | *6fc9425bffnet: net_netdev: Fix error handling in ntb_netdev_init_module() | *3bc893ef36net: ethernet: ti: am65-cpsw: fix error handling in am65_cpsw_nuss_probe() | *7730904f50net: phy: fix null-ptr-deref while probe() failed | *59b54f0563wifi: mac8021: fix possible oob access in ieee80211_get_rate_duration | *dc0853f8b5wifi: cfg80211: don't allow multi-BSSID in S1G | *88a6fe3707wifi: cfg80211: fix buffer overflow in elem comparison | *08fff7aaebaquantia: Do not purge addresses when setting the number of rings | *2a7aa52573qlcnic: fix sleep-in-atomic-context bugs caused by msleep | *7b734d26f0can: m_can: Add check for devm_clk_get | *ea8dc27bb0can: m_can: pci: add missing m_can_class_free_dev() in probe/remove methods | *b1d2a8e02acan: etas_es58x: es58x_init_netdev(): free netdev when register_candev() | *e53da04e37can: cc770: cc770_isa_probe(): add missing free_cc770dev() | *d452a71995can: sja1000_isa: sja1000_isa_probe(): add missing free_sja1000dev() | *372eb550fanet/mlx5e: Fix use-after-free when reverting termination table | *839eeab03cnet/mlx5: Fix uninitialized variable bug in outlen_write() | *34feea3bfbnet/mlx5: DR, Fix uninitialized var warning | *3485ef2aabnet/mlx5: DR, Rename list field in matcher struct to list_node | *9fc27d22cde100: Fix possible use after free in e100_xmit_prepare | *0d9f5bd54biavf: Fix error handling in iavf_init_module() | *b0b2b9050ciavf: remove redundant ret variable | *69501d8205fm10k: Fix error handling in fm10k_init_module() | *5e3657dedei40e: Fix error handling in i40e_init_module() | *7109e94109ixgbevf: Fix resource leak in ixgbevf_init_module() | *196ea810e2of: property: decrement node refcount in of_fwnode_get_reference_args() | *36164db278nvmem: rmem: Fix return value check in rmem_read() | *e376183167bpf: Do not copy spin lock field from user in bpf_selem_alloc | *45f6e81863hwmon: (ibmpex) Fix possible UAF when ibmpex_register_bmc() fails | *a90251376chwmon: (i5500_temp) fix missing pci_disable_device() | *eeb31b828dhwmon: (ina3221) Fix shunt sum critical calculation | *9514b95cachwmon: (ltc2947) fix temperature scaling | *0140e079a4libbpf: Handle size overflow for ringbuf mmap | *06d5790e7dARM: at91: rm9200: fix usb device clock id | *d074f173fbscripts/faddr2line: Fix regression in name resolution on ppc64le | *ee3d37d796bpf, perf: Use subprog name when reporting subprog ksymbol | *ec02fc0a41iio: light: rpr0521: add missing Kconfig dependencies | *f7419fc42aiio: health:afe4404: Fix oob read in afe4404_[read|write]_raw | *e7e76a77aaiio: health: afe4403: Fix oob read in afe4403_read_raw | *ebdca90efbdrm/amdgpu: Partially revert "drm/amdgpu: update drm_display_info correctly when the edid is read" | *c365d3c3e5drm/amdgpu: update drm_display_info correctly when the edid is read | *df5346466edrm/display/dp_mst: Fix drm_dp_mst_add_affected_dsc_crtcs() return code | *044da1a371btrfs: qgroup: fix sleep from invalid context bug in btrfs_qgroup_inherit() | *da86809ab8btrfs: move QUOTA_ENABLED check to rescan_should_stop from btrfs_qgroup_rescan_worker | *5d66eadc1cspi: spi-imx: Fix spi_bus_clk if requested clock is higher than input clock | *6b4544a131btrfs: free btrfs_path before copying inodes to userspace | *c7ae3beceebtrfs: sink iterator parameter to btrfs_ioctl_logical_to_ino | *acc2f40b98erofs: fix order >= MAX_ORDER warning due to crafted negative i_size | *ca9f27448adrm/i915/gt: Use i915_vm_put on ppgtt_create error paths | *c2f2972889drm/i915: Create a dummy object for gen6 ppgtt | *918002bdbearm64: mte: Avoid setting PG_mte_tagged if no tags cleared or restored * |d753150bdcRevert "serial: Add rs485_supported to uart_port" * |8ccd9528beRevert "serial: fsl_lpuart: Fill in rs485_supported" * |a924bb92c6Merge 5.15.81 into android13-5.15-lts |\| | *e4a7232c91Linux 5.15.81 | *5c5c563a08cifs: fix missed refcounting of ipc tcon | *ee2d04f23bdrm/i915: fix TLB invalidation for Gen12 video and compute engines | *bef834845ddrm/amdgpu: always register an MMU notifier for userptr | *7901de7aa8drm/amdgpu: Enable Aldebaran devices to report CU Occupancy | *e7bf1fe538drm/amd/display: No display after resume from WB/CB | *5033cba00cdrm/amd/dc/dce120: Fix audio register mapping, stop triggering KASAN | *b8dc245909btrfs: sysfs: normalize the error handling branch in btrfs_init_sysfs() | *914baca57abtrfs: use kvcalloc in btrfs_get_dev_zone_info | *c1e6d4bfdebtrfs: zoned: fix missing endianness conversion in sb_write_pointer | *d88bf6be02btrfs: free btrfs_path before copying subvol info to userspace | *f218b404fcbtrfs: free btrfs_path before copying fspath to userspace | *fea9397101btrfs: free btrfs_path before copying root refs to userspace | *7d0c25b5fegenirq: Take the proposed affinity at face value if force==true | *f17657cce0irqchip/gic-v3: Always trust the managed affinity provided by the core code | *52a93f2dcfgenirq: Always limit the affinity to online CPUs | *599cf4b845genirq/msi: Shutdown managed interrupts with unsatifiable affinities | *7aed1dd5d2wifi: wilc1000: validate number of channels | *e9de501cf7wifi: wilc1000: validate length of IEEE80211_P2P_ATTR_CHANNEL_LIST attribute | *143232cb5awifi: wilc1000: validate length of IEEE80211_P2P_ATTR_OPER_CHANNEL attribute | *cd9c486971wifi: wilc1000: validate pairwise and authentication suite offsets | *f2fb18d429fuse: lock inode unconditionally in fuse_fallocate() | *bb1c33bdf4dm integrity: clear the journal on suspend | *20ad31b09edm integrity: flush the journal on suspend | *5ca2110ba5gpu: host1x: Avoid trying to use GART on Tegra20 | *97f47617e8scsi: iscsi: Fix possible memory leak when device_register() failed | *56ab7f237enet: usb: qmi_wwan: add Telit 0x103a composition | *e2e33f213dtcp: configurable source port perturb table size | *269928e5c7platform/x86: ideapad-laptop: Fix interrupt storm on fn-lock toggle on some Yoga laptops | *17d995dc69platform/x86: hp-wmi: Ignore Smart Experience App event | *e85bdc7872zonefs: fix zone report size in __zonefs_io_error() | *982fcd83fbdrm/amdgpu: disable BACO support on more cards | *ea11f8197dplatform/x86: acer-wmi: Enable SW_TABLET_MODE on Switch V 10 (SW5-017) | *09af15e691platform/x86: asus-wmi: add missing pci_dev_put() in asus_wmi_set_xusb2pr() | *ba040bea9dxen/platform-pci: add missing free_irq() in error path | *6815b2087dxen-pciback: Allow setting PCI_MSIX_FLAGS_MASKALL too | *4c13ddb74fASoC: stm32: dfsdm: manage cb buffers cleanup | *dd82295a23Input: i8042 - apply probe defer to more ASUS ZenBook models | *e12e121febInput: soc_button_array - add Acer Switch V 10 to dmi_use_low_level_irq[] | *9f5c167074Input: soc_button_array - add use_low_level_irq module parameter | *aaef86eac9Input: goodix - try resetting the controller when no config is set | *e2223f5fbbserial: 8250: 8250_omap: Avoid RS485 RTS glitch on ->set_termios() | *4e208294detools: iio: iio_generic_buffer: Fix read size | *0d0e2545faASoC: Intel: bytcht_es8316: Add quirk for the Nanote UMPC-01 | *e394cf9d7aInput: synaptics - switch touchpad on HP Laptop 15-da3001TU to RMI mode | *96b5d11777x86/ioremap: Fix page aligned size calculation in __ioremap_caller() | *d048f74815x86/pm: Add enumeration check before spec MSRs save/restore setup | *070e3560bfx86/tsx: Add a feature bit for TSX control MSR support | *1430c98ebbKVM: x86: remove exit_int_info warning in svm_handle_exit | *27550a5930KVM: x86: add kvm_leave_nested | *3e87cb0caaKVM: x86: nSVM: harden svm_free_nested against freeing vmcb02 while still in use | *6425c590d0KVM: x86: forcibly leave nested mode on vCPU reset | *f42ebf972aKVM: x86: nSVM: leave nested mode on vCPU free | *7b3c9405b2mm: vmscan: fix extreme overreclaim and swap floods | *feb2eda5e1gcov: clang: fix the buffer overflow issue | *ea6aa25c9anilfs2: fix nilfs_sufile_mark_dirty() not set segment usage as dirty | *9d97a9fbfcusb: dwc3: gadget: Clear ep descriptor last | *02632ea4dfusb: dwc3: gadget: Return -ESHUTDOWN on ep disable | *765ca3e63fusb: dwc3: gadget: conditionally remove requests | *7945cbf866bus: ixp4xx: Don't touch bit 7 on IXP42x | *39c039018aiio: core: Fix entry not deleted when iio_register_sw_trigger_type() fails | *0791a5ddbaiio: light: apds9960: fix wrong register for gesture gain | *f0158b9bfcarm64: dts: rockchip: lower rk3399-puma-haikou SD controller clock frequency | *277d19ec28ext4: fix use-after-free in ext4_ext_shift_extents | *c9d133100busb: cdnsp: fix issue with ZLP - added TD_SIZE = 1 | *c2ad434cd4usb: cdnsp: Fix issue with Clear Feature Halt Endpoint | *1d91c64887usb: dwc3: exynos: Fix remove() function | *0a216625c3KVM: arm64: pkvm: Fixup boot mode to reflect that the kernel resumes from EL1 | *f0044a4a31mmc: sdhci-brcmstb: Fix SDHCI_RESET_ALL for CQHCI | *8e6940979bmmc: sdhci-brcmstb: Enable Clock Gating to save power | *24b46bfa96mmc: sdhci-brcmstb: Re-organize flags | *227543ccacnios2: add FORCE for vmlinuz.gz | *6a4ea16a67init/Kconfig: fix CC_HAS_ASM_GOTO_TIED_OUTPUT test with dash | *c4a9046c27lib/vdso: use "grep -E" instead of "egrep" | *5fefdceafbs390/crashdump: fix TOD programmable field size | *592b6fd74anet: thunderx: Fix the ACPI memory leak | *697eb30a35octeontx2-af: Fix reference count issue in rvu_sdp_init() | *6ba1687ea1octeontx2-pf: Add check for devm_kcalloc | *26c31e7c73net: enetc: preserve TX ring priority across reconfiguration | *0e16bbf616net: enetc: cache accesses to &priv->si->hw | *68de40f66anet: enetc: manage ENETC_F_QBV in priv->active_offloads only when enabled | *5c0858e142nfc: st-nci: fix incorrect sizing calculations in EVT_TRANSACTION | *e09243fb16nfc: st-nci: fix memory leaks in EVT_TRANSACTION | *dca20b7a19nfc: st-nci: fix incorrect validating logic in EVT_TRANSACTION | *67d638f8efs390/dasd: fix no record found for raw_track_access | *88277853cfarcnet: fix potential memory leak in com20020_probe() | *1d44ec8507ipv4: Fix error return code in fib_table_insert() | *918e83c6bfdccp/tcp: Reset saddr on failure after inet6?_hash_connect(). | *8ce9b1c97ffs: do not update freeing inode i_io_list | *8db9e60cdfnetfilter: flowtable_offload: add missing locking | *c1da3bfca1netfilter: ipset: restore allowing 64 clashing elements in hash:net,iface | *606091b2f6dma-buf: fix racing conflict of dma_heap_add() | *8af9450befbnx2x: fix pci device refcount leak in bnx2x_vf_is_pcie_pending() | *251bcf6cfbregulator: twl6030: re-add TWL6032_SUBCLASS | *6258a8f913NFC: nci: fix memory leak in nci_rx_data_packet() | *ffe6021154net: sched: allow act_ct to be built without NF_NAT | *a05c0f9511net: sparx5: fix error handling in sparx5_port_open() | *182ef20f0fsfc: fix potential memleak in __ef100_hard_start_xmit() | *2da022fac9net: wwan: iosm: use ACPI_FREE() but not kfree() in ipc_pcie_read_bios_cfg() | *a48b345b87xfrm: Fix ignored return value in xfrm6_init() | *19989e1635xfrm: Fix oops in __xfrm_state_delete() | *46d450067ftipc: check skb_linearize() return value in tipc_disc_rcv() | *33fb115a76tipc: add an extra conn_get in tipc_conn_alloc | *4ae907c45ftipc: set con sock in tipc_conn_alloc | *ef866d9ea9net/mlx5: Fix handling of entry refcount when command is not issued to FW | *3101318939net/mlx5: Fix FW tracer timestamp calculation | *1eaabb5bbbnet/mlx5: Do not query pci info while pci disabled | *8180099b2anetfilter: ipset: regression in ip_set_hash_ip.c | *448b627370Drivers: hv: vmbus: fix possible memory leak in vmbus_device_register() | *082c31cb99Drivers: hv: vmbus: fix double free in the error path of vmbus_add_channel_work() | *7fdd9daa5bmacsec: Fix invalid error code set | *e8fb93a079nfp: add port from netdev validation for EEPROM access | *e44e424ed9nfp: fill splittable of devlink_port_attrs correctly | *527046c138net: pch_gbe: fix pci device refcount leak while module exiting | *f77c84dd5bocteontx2-af: debugsfs: fix pci device refcount leak | *cd581ffd8dnet/qla3xxx: fix potential memleak in ql3xxx_send() | *a8976074e2net: mvpp2: fix possible invalid pointer dereference | *3a4cc56cd1net/mlx4: Check retval of mlx4_bitmap_init | *c368220e17net: ethernet: mtk_eth_soc: fix error handling in mtk_open() | *d9729437b2ARM: dts: imx6q-prti6q: Fix ref/tcxo-clock-frequency properties | *1c0b6a97c4ARM: mxs: fix memory leak in mxs_machine_init() | *ecff08f3c4iavf: Fix race condition between iavf_shutdown and iavf_remove | *31147d4e90iavf: Do not restart Tx queues after reset task failure | *232942b26ciavf: Fix a crash during reset task | *0600615d01netfilter: nf_tables: do not set up extensions for end interval | *60387731e6netfilter: conntrack: Fix data-races around ct mark | *ee3ccd1abb9p/fd: fix issue of list_del corruption in p9_fd_cancel() | *131c2eeabcnet: pch_gbe: fix potential memleak in pch_gbe_tx_queue() | *f58df483ffnfc/nci: fix race with opening and closing | *da22d7410anet: dsa: sja1105: disallow C45 transactions on the BASE-TX MDIO bus | *38fe0988bdrxrpc: Fix race between conn bundle lookup and bundle removal [ZDI-CAN-15975] | *d92151b465rxrpc: Use refcount_t rather than atomic_t | *3c33e41fa5rxrpc: Allow list of in-use local UDP endpoints to be viewed in /proc | *46cefa2689net: liquidio: simplify if expression | *95500ee0b3selftests: mptcp: fix mibit vs mbit mix up | *f8c4da198eselftests: mptcp: more stable simult_flows tests | *1c0efab08cARM: dts: at91: sam9g20ek: enable udc vbus gpio pinctrl | *ade662f3f2tee: optee: fix possible memory leak in optee_register_device() | *d1dd119134bus: sunxi-rsb: Support atomic transfers | *b1ed61e706bus: sunxi-rsb: Remove the shutdown callback | *61a41d1abcregulator: core: fix UAF in destroy_regulator() | *a85c0db3f5spi: dw-dma: decrease reference count in dw_spi_dma_init_mfld() | *d9f9b3255bregulator: core: fix kobject release warning and memory leak in regulator_register() | *bd419c7c68ASoC: max98373: Add checks for devm_kcalloc | *f9bc4a18e7scsi: storvsc: Fix handling of srb_status and capacity change events | *c2153fe2d0x86/hyperv: Restore VP assist page after cpu offlining/onlining | *b2ddd76237ASoC: soc-pcm: Don't zero TDM masks in __soc_pcm_open() | *dd62cb7e6fASoC: sgtl5000: Reset the CHIP_CLK_CTRL reg on remove | *d80ffd4823ASoC: hdac_hda: fix hda pcm buffer overflow issue | *10bee7eb2aARM: dts: am335x-pcm-953: Define fixed regulators in root node | *8fe533c0f9af_key: Fix send_acquire race with pfkey_register | *0c69a4658exfrm: replay: Fix ESN wrap around for GSO | *ecc6ce4fdfxfrm: fix "disable_policy" on ipv4 early demux | *5a792c1d4dMIPS: pic32: treat port as signed integer | *144452b421RISC-V: vdso: Do not add missing symbols to version section in linker script | *799970b8ccALSA: usb-audio: add quirk to fix Hamedal C20 disconnect issue | *38b09dc14fRevert "drm/amdgpu: Revert "drm/amdgpu: getting fan speed pwm for vega10 properly"" | *44d50fccf8nvmet: fix memory leak in nvmet_subsys_attr_model_store_locked | *5adc12d9e2arm64/syscall: Include asm/ptrace.h in syscall_wrapper header. | *1340f02773block, bfq: fix null pointer dereference in bfq_bio_bfqg() | *86d4dca4a6drm: panel-orientation-quirks: Add quirk for Acer Switch V 10 (SW5-017) | *b90e6234f5scsi: scsi_debug: Make the READ CAPACITY response compliant with ZBC | *cdbba6a4descsi: ibmvfc: Avoid path failures during live migration | *6e8124a151platform/x86/intel/hid: Add some ACPI device IDs | *32735e24f4platform/x86/intel/pmt: Sapphire Rapids PMT errata fix | *83a6823016platform/x86: touchscreen_dmi: Add info for the RCA Cambio W101 v2 2-in-1 | *f707986a14platform/x86: ideapad-laptop: Disable touchpad_switch | *5e38740ae5Revert "net: macsec: report real_dev features when HW offloading is enabled" | *26b72202eeselftests/bpf: Add verifier test for release_reference() | *8395e3f98cspi: stm32: fix stm32_spi_prepare_mbr() that halves spi clk for every run | *d04722f280wifi: ath11k: Fix QCN9074 firmware boot on x86 | *9cc96a20a9wifi: mac80211: Fix ack frame idr leak when mesh has no route | *86f90014e7wifi: airo: do not assign -1 to unsigned char | *f5558fbda0audit: fix undefined behavior in bit shift for AUDIT_BIT | *af5de982ffriscv: dts: sifive unleashed: Add PWM controlled LEDs | *ee34a19dbewifi: mac80211_hwsim: fix debugfs attribute ps with rc table support | *3513785dc1wifi: mac80211: fix memory free error when registering wiphy fail | *855485d31eceph: fix NULL pointer dereference for req->r_session | *729c9ad294ceph: Use kcalloc for allocating multiple elements | *d276fb4a7ebinder: validate alloc->mm in ->mmap() handler | *5277e3d633x86/sgx: Add overflow check in sgx_validate_offset_length() | *b5a838ba47x86/sgx: Create utility to validate user provided offset and length | *2f6e2de3a5ceph: avoid putting the realm twice when decoding snaps fails | *8bef55d793ceph: do not update snapshot context when there is no new snapshot | *cdee3136c9iio: pressure: ms5611: fixed value compensation bug | *5d6696e79diio: ms5611: Simplify IO callback parameters | *f0ee88e83cnvme-pci: add NVME_QUIRK_BOGUS_NID for Netac NV7000 | *a61716cd24nvme-pci: disable write zeroes on various Kingston SSD | *19b60f3363nvme-pci: disable namespace identifiers for the MAXIO MAP1001 | *d537e19306nvme-pci: add NVME_QUIRK_BOGUS_NID for Micron Nitro | *af03ce894cnvme: add a bogus subsystem NQN quirk for Micron MTFDKBA2T0TFH | *c6803faa6adrm/display: Don't assume dual mode adaptors support i2c sub-addressing | *d2284fe43cata: libata-core: do not issue non-internal commands once EH is pending | *e09583e83eata: libata-scsi: simplify __ata_scsi_queuecmd() | *a9059e338fcifs: Fix connections leak when tlink setup failed | *81d583baa5cifs: support nested dfs links over reconnect | *dbc0ea91becifs: split out dfs code from cifs_reconnect() | *b3ce844d23cifs: introduce new helper for cifs_reconnect() | *2ea600b598sctp: clear out_curr if all frag chunks of current msg are pruned | *1f9f346fbbsctp: remove the unnecessary sinfo_stream check in sctp_prsctp_prune_unsent | *e8915faa9ftty: serial: fsl_lpuart: don't break the on-going transfer when global reset | *bd19013935serial: fsl_lpuart: Fill in rs485_supported | *87c81c19cdserial: Add rs485_supported to uart_port | *c08f4ea79fASoC: fsl_asrc fsl_esai fsl_sai: allow CONFIG_PM=N | *d1e4288d2aASoC: fsl_sai: use local device pointer * |e66b45d527Merge branch 'android13-5.15' into android13-5.15-lts * |72d681a01dRevert "net: use struct_group to copy ip/ipv6 header addresses" * |c46ed1b2d7Merge 5.15.80 into android13-5.15-lts |\| | *71e496bd33Linux 5.15.80 | *b63ddb3ba6ntfs: check overflow when iterating ATTR_RECORDs | *ab6a1bb17entfs: fix out-of-bounds read in ntfs_attr_find() | *5330c423b8ntfs: fix use-after-free in ntfs_attr_find() | *43bbadb7e4net/9p: use a dedicated spinlock for trans_fd | *9357fca9damm: fs: initialize fsdata passed to write_begin/write_end interface | *b334ab4c33wifi: wext: use flex array destination for memcpy() | *0e07032b4b9p/trans_fd: always use O_NONBLOCK read/write | *7c7b7476b5gfs2: Switch from strlcpy to strscpy | *28275a7c84gfs2: Check sb_bsize_shift after reading superblock | *a4f1a01b2e9p: trans_fd/p9_conn_cancel: drop client lock earlier | *f7b0e95071kcm: close race conditions on sk_receive_queue | *27d706b0d3kcm: avoid potential race in kcm_tx_work | *b49026d9c8tcp: cdg: allow tcp_cdg_release() to be called multiple times | *e41cbf98dfmacvlan: enforce a consistent minimal mtu | *d5f7f6e63fInput: i8042 - fix leaking of platform device on module removal | *c49cc2c059kprobes: Skip clearing aggrprobe's post_handler in kprobe-on-ftrace case | *71beab7119scsi: scsi_debug: Fix possible UAF in sdebug_add_host_helper() | *a636772988scsi: target: tcm_loop: Fix possible name leak in tcm_loop_setup_hba_bus() | *cb7893c85enet: use struct_group to copy ip/ipv6 header addresses | *9b8c0c88f4tracing: Fix warning on variable 'struct trace_array' | *73cf0ff9a3ring-buffer: Include dropped pages in counting dirty patches | *35c60b4e8cperf: Improve missing SIGTRAP checking | *2ac6276864serial: 8250_lpss: Use 16B DMA burst with Elkhart Lake | *b1a27b2aadnvme: ensure subsystem reset is single threaded | *bccece3c33nvme: restrict management ioctls to admin | *8cddb0d96bperf/x86/intel/pt: Fix sampling using single range output | *8e2f33c598misc/vmw_vmci: fix an infoleak in vmci_host_do_receive_datagram() | *9a72a46cb0docs: update mediator contact information in CoC doc | *a99a547658mmc: sdhci-pci: Fix possible memory leak caused by missing pci_dev_put() | *4a1b6f7839mmc: sdhci-pci-o2micro: fix card detect fail issue caused by CD# debounce timeout | *fd285d4215mmc: core: properly select voltage range without power cycle | *8a9bae5f1bfirmware: coreboot: Register bus in module init | *052d0e79efiommu/vt-d: Set SRE bit only when hardware has SRS cap | *c31a792a82iommu/vt-d: Preset Access bit for IOVA in FL non-leaf paging entries | *11edbdee43scsi: zfcp: Fix double free of FSF request when qdio send fails | *fdf87b5b30net: phy: marvell: add sleep time after enabling the loopback bit | *9648d760edmaccess: Fix writing offset in case of fault in strncpy_from_kernel_nofault() | *fdd57c20d4Input: iforce - invert valid length check when fetching device IDs | *0cafb719beserial: 8250_lpss: Configure DMA also w/o DMA filter | *59f6596697serial: 8250: Flush DMA Rx on RLSI | *118b52c2aeserial: 8250: Fall back to non-DMA Rx if IIR_RDI occurs | *6ffce7a92edm ioctl: fix misbehavior if list_versions races with module loading | *2b104973f7iio: pressure: ms5611: changed hardcoded SPI speed to value limited | *1678d4abb2iio: adc: mp2629: fix potential array out of bound access | *bd22c232eaiio: adc: mp2629: fix wrong comparison of channel | *656f670613iio: trigger: sysfs: fix possible memory leak in iio_sysfs_trig_init() | *1bf8c0aff8iio: adc: at91_adc: fix possible memory leak in at91_adc_allocate_trigger() | *afc0aea702usb: typec: mux: Enter safe mode only when pins need to be reconfigured | *8236628a54usb: cdns3: host: fix endless superspeed hub port reset | *ead83b0db8usb: chipidea: fix deadlock in ci_otg_del_timer | *cc9e6d8c55usb: add NO_LPM quirk for Realforce 87U Keyboard | *70eca1d261USB: serial: option: add Fibocom FM160 0x0111 composition | *1b6a54885cUSB: serial: option: add u-blox LARA-L6 modem | *b0467d0059USB: serial: option: add u-blox LARA-R6 00B modem | *95688a8a57USB: serial: option: remove old LARA-R6 PID | *53dee78ea3USB: serial: option: add Sierra Wireless EM9191 | *e7764e88e6USB: bcma: Make GPIO explicitly optional | *a190a83db2speakup: fix a segfault caused by switching consoles | *b3c6edbee4slimbus: stream: correct presence rate frequencies | *6b35ac8315slimbus: qcom-ngd: Fix build error when CONFIG_SLIM_QCOM_NGD_CTRL=y && CONFIG_QCOM_RPROC_COMMON=m | *0f847462feRevert "usb: dwc3: disable USB core PHY management" | *23ad214a86ALSA: hda/realtek: Fix the speaker output on Samsung Galaxy Book Pro 360 | *a36b505749ALSA: hda/realtek: fix speakers for Samsung Galaxy Book Pro | *02b94885b2ALSA: usb-audio: Drop snd_BUG_ON() from snd_usbmidi_output_open() | *7176d6f3addrm/amd/display: Add HUBP surface flip interrupt handler | *e57daa7503tracing: kprobe: Fix potential null-ptr-deref on trace_array in kprobe_event_gen_test_exit() | *3a41c0f2a5tracing: kprobe: Fix potential null-ptr-deref on trace_event_file in kprobe_event_gen_test_exit() | *7291dec4f2tracing: Fix race where eprobes can be called before the event | *6517b97134tracing: Fix wild-memory-access in register_synth_event() | *07ba4f0603tracing: Fix memory leak in test_gen_synth_cmd() and test_empty_synth_event() | *8b318f3032tracing/ring-buffer: Have polling block on watermark | *2c21ee020ctracing: Fix memory leak in tracing_read_pipe() | *00f74b1a98ring_buffer: Do not deactivate non-existant pages | *1bea037a1aftrace: Fix null pointer dereference in ftrace_add_mod() | *fadfcf39fbftrace: Optimize the allocation for mcount entries | *5c5f264289ftrace: Fix the possible incorrect kernel message | *2ab2494162cifs: add check for returning value of SMB2_set_info_init | *5783abda58net: thunderbolt: Fix error handling in tbnet_init() | *80e590aeb1net: microchip: sparx5: Fix potential null-ptr-deref in sparx_stats_init() and sparx5_start() | *4a55aec142cifs: Fix wrong return value checking when GETFLAGS | *c8baf1fc24net/x25: Fix skb leak in x25_lapb_receive_frame() | *af4b57fa6bnet: ag71xx: call phylink_disconnect_phy if ag71xx_hw_enable() fail in ag71xx_open() | *61404a182ecifs: add check for returning value of SMB2_close_init | *d3233f4bf3platform/surface: aggregator: Do not check for repeated unsequenced packets | *6969171403platform/x86/intel: pmc: Don't unconditionally attach Intel PMC when virtualized | *7d93417d59drbd: use after free in drbd_create_device() | *fc16a2c81abridge: switchdev: Fix memory leaks when changing VLAN protocol | *3d90a668c4net: hns3: fix setting incorrect phy link ksettings for firmware in resetting process | *3f7b2ef8fenet: ena: Fix error handling in ena_init() | *2540eea1bdnet: ionic: Fix error handling in ionic_init_module() | *c08c13cb13xen/pcpu: fix possible memory leak in register_pcpu() | *97009f07f2net: dsa: make dsa_master_ioctl() see through port_hwtstamp_get() shims | *88da008e5enet: mhi: Fix memory leak in mhi_net_dellink() | *8f839715d0bnxt_en: Remove debugfs when pci_register_driver failed | *b88713d92bnet: caif: fix double disconnect client in chnl_net_open() | *6d24034160net: macvlan: Use built-in RCU list checking | *596230471dmISDN: fix misuse of put_device() in mISDN_register_device() | *07a6a8cf17net: liquidio: release resources when liquidio driver open failed | *19feb6cf41soc: imx8m: Enable OCOTP clock before reading the register | *8c54d706d8net: stmmac: ensure tx function is not running in stmmac_xdp_release() | *6219f46c2bnet: hinic: Fix error handling in hinic_module_init() | *7a05e39296mISDN: fix possible memory leak in mISDN_dsp_element_register() | *0ee6455c9cnet: bgmac: Drop free_netdev() from bgmac_enet_remove() | *7ff4fa179ebpf: Initialize same number of free nodes for each pcpu_freelist | *12f178cf05MIPS: Loongson64: Add WARN_ON on kexec related kmalloc failed | *a4d6e024beMIPS: fix duplicate definitions for exported symbols | *44142b652anfp: change eeprom length to max length enumerators | *f23058dc23ata: libata-transport: fix error handling in ata_tdev_add() | *67b2193146ata: libata-transport: fix error handling in ata_tlink_add() | *e7bb1b7a7bata: libata-transport: fix error handling in ata_tport_add() | *377ff82c33ata: libata-transport: fix double ata_host_put() in ata_tport_add() | *494df0b0efarm64: dts: imx8mn: Fix NAND controller size-cells | *7178d568f7arm64: dts: imx8mm: Fix NAND controller size-cells | *8ccf18c82aARM: dts: imx7: Fix NAND controller size-cells | *e884a6c2d4drm: Fix potential null-ptr-deref in drm_vblank_destroy_worker() | *07e56de876drm/drv: Fix potential memory leak in drm_dev_init() | *45c300613bdrm/panel: simple: set bpc field for logic technologies displays | *779f3f9e0cdrm/vc4: kms: Fix IS_ERR() vs NULL check for vc4_kms | *97e5b508e9pinctrl: devicetree: fix null pointer dereferencing in pinctrl_dt_to_map | *9a77b8557fparport_pc: Avoid FIFO port location truncation | *5d03c2911csiox: fix possible memory leak in siox_device_add() | *530e987a02arm64: Fix bit-shifting UB in the MIDR_CPU_MODEL() macro | *d494449782bpf: Fix memory leaks in __check_func_call | *25521fd2e2block: sed-opal: kmalloc the cmd/resp buffers | *2f21d653c6scsi: scsi_transport_sas: Fix error handling in sas_phy_add() | *7cd28bc410pinctrl: rockchip: list all pins in a possible mux route for PX30 | *ab79b8dbe2ASoC: soc-utils: Remove __exit for snd_soc_util_exit() | *eaa8edd865bpf, test_run: Fix alignment problem in bpf_prog_test_run_skb() | *33cabe04d2tty: n_gsm: fix sleep-in-atomic-context bug in gsm_control_send | *ae22294e21serial: imx: Add missing .thaw_noirq hook | *26db1cd519serial: 8250: omap: Flush PM QOS work on remove | *e0db709a58serial: 8250: omap: Fix unpaired pm_runtime_put_sync() in omap8250_remove() | *83b6d4d6daserial: 8250_omap: remove wait loop from Errata i202 workaround | *76db05ab70serial: 8250: omap: Fix missing PM runtime calls for omap8250_set_mctrl() | *2aee616a6bARM: at91: pm: avoid soft resetting AC DLL | *188546c780ASoC: tas2764: Fix set_tdm_slot in case of single slot | *5782896dafASoC: tas2770: Fix set_tdm_slot in case of single slot | *34eee4189bASoC: core: Fix use-after-free in snd_soc_exit() | *aa6f8aecbbARM: dts: at91: sama7g5: fix signal name of pin PB2 | *487fff700fspi: stm32: Print summary 'callbacks suppressed' message | *2cec2f65c1arm64: dts: qcom: sm8350-hdk: Specify which LDO modes are allowed | *44dbe66bb3arm64: dts: qcom: sm8250-xperia-edo: Specify which LDO modes are allowed | *8b2eae7defarm64: dts: qcom: sm8150-xperia-kumano: Specify which LDO modes are allowed | *c8e76eeea7arm64: dts: qcom: sa8155p-adp: Specify which LDO modes are allowed | *30571f28bbhugetlbfs: don't delete error page from pagecache | *14ddbb83c3KVM: x86/pmu: Do not speculatively query Intel GP PMCs that don't exist yet | *a9b964ed7cspi: intel: Use correct mask for flash and protected regions | *f4eb68642emtd: spi-nor: intel-spi: Disable write protection only if asked | *156d0c823cASoC: codecs: jz4725b: Fix spelling mistake "Sourc" -> "Source", "Routee" -> "Route" | *5907ff9f2cx86/cpu: Add several Intel server CPU model numbers | *41e37d04e3Bluetooth: L2CAP: Fix l2cap_global_chan_by_psm | *b02a025dd1btrfs: remove pointless and double ulist frees in error paths of qgroup tests | *1c366c206fdrm/imx: imx-tve: Fix return type of imx_tve_connector_mode_valid | *1c8ded1b38i2c: i801: add lis3lv02d's I2C address for Vostro 5568 | *b432581f19i2c: tegra: Allocate DMA memory for DMA engine | *7b0ae4c7b9firmware: arm_scmi: Cleanup the core driver removal callback | *1a8a2fef27ACPI: x86: Add another system to quirk list for forcing StorageD3Enable | *8a03a4a5cfNFSv4: Retry LOCK on OLD_STATEID during delegation return | *49ca2227c4btrfs: raid56: properly handle the error when unable to find the missing stripe | *0f7bd3a2dfRDMA/efa: Add EFA 0xefa2 PCI ID | *a42d4363e7ACPI: scan: Add LATT2021 to acpi_ignore_dep_ids[] | *004decd41bdrm/amd/display: Remove wrong pipe control lock | *7779efbb99ASoC: rt1308-sdw: add the default value of some registers | *ef1e4ed858selftests/intel_pstate: fix build for ARCH=x86_64 | *dfd3cc1ef3selftests/futex: fix build for clang | *648467236cASoC: Intel: sof_sdw: add quirk variant for LAPBC710 NUC15 | *64ee750c29ASoC: codecs: jz4725b: fix capture selector naming | *150b74cd06ASoC: codecs: jz4725b: use right control for Capture Volume | *5352d8b315ASoC: codecs: jz4725b: fix reported volume for Master ctl | *85134577a7ASoC: codecs: jz4725b: add missed Line In power control bit | *5e61dffb16spi: intel: Fix the offset to get the 64K erase opcode | *c697cb2e66ASoC: wm8962: Add an event handler for TEMP_HP and TEMP_SPK | *569085124dASoC: rt1019: Fix the TDM settings | *4160a515c7ASoC: mt6660: Keep the pm_runtime enables before component stuff in mt6660_i2c_probe | *2963ec4535ASoC: wm8997: Revert "ASoC: wm8997: Fix PM disable depth imbalance in wm8997_probe" | *30a2f9479cASoC: wm5110: Revert "ASoC: wm5110: Fix PM disable depth imbalance in wm5110_probe" | *3bf6da38a2ASoC: wm5102: Revert "ASoC: wm5102: Fix PM disable depth imbalance in wm5102_probe" | *94fa250ea5mm: shmem: don't truncate page if memory failure happens | *003fa19591mm: hwpoison: handle non-anonymous THP correctly | *a62b1bc603mm: hwpoison: refactor refcount check handling * |49ca4a5978Revert "bpf, sockmap: Fix sk->sk_forward_alloc warn_on in sk_stream_kill_queues" * |6fa2a43acdRevert "ALSA: usb-audio: Yet more regression for for the delayed card registration" * |ac2a7a141fMerge 5.15.79 into android13-5.15-lts |/ *3df0eeae4dLinux 5.15.79 *599b24eedfx86/cpu: Restore AMD's DE_CFG MSR after resume *9132fa043fnet: tun: call napi_schedule_prep() to ensure we own a napi *1dea25e25adrm/amdkfd: Migrate in CPU page fault use current mm *a1c303fbd4marvell: octeontx2: build error: unknown type name 'u64' *d948b22834dmaengine: at_hdmac: Check return code of dma_async_device_register *c556ecf32admaengine: at_hdmac: Fix impossible condition *8a941ff34edmaengine: at_hdmac: Don't allow CPU to reorder channel enable *53831f7a13dmaengine: at_hdmac: Fix completion of unissued descriptor in case of errors *14f5462e4admaengine: at_hdmac: Fix descriptor handling when issuing it to hardware *5482403228dmaengine: at_hdmac: Fix concurrency over the active list *82ca19414fdmaengine: at_hdmac: Free the memset buf without holding the chan lock *8fd36e069ddmaengine: at_hdmac: Fix concurrency over descriptor *1ee012d452dmaengine: at_hdmac: Fix concurrency problems by removing atc_complete_all() *90c1b07406dmaengine: at_hdmac: Protect atchan->status with the channel lock *b5ee1fe06admaengine: at_hdmac: Do not call the complete callback on device_terminate_all *9bbf5df0fcdmaengine: at_hdmac: Fix premature completion of desc in issue_pending *f7d1aaa903dmaengine: at_hdmac: Start transfer for cyclic channels in issue_pending *e9777b4efcdmaengine: at_hdmac: Don't start transactions at tx_submit level *4e28674a0edmaengine: at_hdmac: Fix at_lli struct definition *49eba53137cert host tools: Stop complaining about deprecated OpenSSL functions *69e86c6268can: j1939: j1939_send_one(): fix missing CAN header initialization *81fc8f90b8mm/shmem: use page_mapping() to detect page cache for uffd continue *e91451af11mm/memremap.c: map FS_DAX device memory as decrypted *48998c1773mm/damon/dbgfs: check if rm_contexts input is for a real context *c736ed8541udf: Fix a slab-out-of-bounds write bug in udf_find_entry() *2e87eddf57mms: sdhci-esdhc-imx: Fix SDHCI_RESET_ALL for CQHCI *91c38504e5btrfs: zoned: initialize device's zone info for seeding *432c30ba3fbtrfs: selftests: fix wrong error check in btrfs_free_dummy_root() *c9fe4719c6btrfs: fix match incorrectly in dev_args_match_device *f96fd36936wifi: ath11k: avoid deadlock during regulatory update in ath11k_regd_update() *8e2b576cafplatform/x86: hp_wmi: Fix rfkill causing soft blocked wifi *cb3ab0e1e0drm/amdgpu: disable BACO on special BEIGE_GOBY card *dc066a7850drm/i915/dmabuf: fix sg_table handling in map_dma_buf *afbd118838nilfs2: fix use-after-free bug of ns_writer on remount *abc082aac0nilfs2: fix deadlock in nilfs_count_free_blocks() *589da22881ata: libata-scsi: fix SYNCHRONIZE CACHE (16) command failure *51ae4579a5vmlinux.lds.h: Fix placement of '.data..decrypted' section *1f8e08ab32ALSA: usb-audio: Add DSD support for Accuphase DAC-60 *c2451f62b2ALSA: usb-audio: Add quirk entry for M-Audio Micro *031d1480a0ALSA: usb-audio: Yet more regression for for the delayed card registration *574f51e4aaALSA: hda/realtek: Add Positivo C6300 model quirk *7140d7aaf9ALSA: hda: fix potential memleak in 'add_widget_node' *f6d7a487aaALSA: hda/ca0132: add quirk for EVGA Z390 DARK *1ccd55b390ALSA: hda/hdmi - enable runtime pm for more AMD display audio *29100c6742mmc: sdhci-esdhc-imx: use the correct host caps for MMC_CAP_8_BIT_DATA *3dce99e2ebmmc: sdhci-tegra: Fix SDHCI_RESET_ALL for CQHCI *9d6bd33e6ammc: sdhci_am654: Fix SDHCI_RESET_ALL for CQHCI *ad01f16ca9mmc: sdhci-of-arasan: Fix SDHCI_RESET_ALL for CQHCI *1aa78c1d01mmc: cqhci: Provide helper for resetting both SDHCI and CQHCI *c198524a99MIPS: jump_label: Fix compat branch range check *9713ceffa4arm64: efi: Fix handling of misaligned runtime regions and drop warning *518e49f059riscv: fix reserved memory setup *d07c3d7491riscv: vdso: fix build with llvm *cc36c7fa5driscv: process: fix kernel info leakage *a8d67367abnet: macvlan: fix memory leaks of macvlan_common_newlink *7b194dd32bethernet: tundra: free irq when alloc ring failed in tsi108_open() *7de10342fenet: mv643xx_eth: disable napi when init rxq or txq failed in mv643xx_eth_open() *88e1dd2d92ethernet: s2io: disable napi when start nic failed in s2io_card_up() *3652f1f8d3net: atlantic: macsec: clear encryption keys from the stack *fca3b0a1fdnet: phy: mscc: macsec: clear encryption keys when freeing a flow *60a0af8813stmmac: dwmac-loongson: fix missing of_node_put() while module exiting *ee4a9bd2c7stmmac: dwmac-loongson: fix missing pci_disable_device() in loongson_dwmac_probe() *4a8770eebcstmmac: dwmac-loongson: fix missing pci_disable_msi() while module exiting *83196d8dc5cxgb4vf: shut down the adapter when t4vf_update_port_info() failed in cxgb4vf_open() *49d8a6e24amctp: Fix an error handling path in mctp_init() *29961d2332stmmac: intel: Update PCH PTP clock rate from 200MHz to 204.8MHz *8604bebc5cstmmac: intel: Enable 2.5Gbps for Intel AlderLake-S *7dec6dae2bnet: cxgb3_main: disable napi when bind qsets failed in cxgb_up() *960f9d30denet: cpsw: disable napi in cpsw_ndo_open() *1360778fdbnet/mlx5e: E-Switch, Fix comparing termination table instance *f13e9ebd29net/mlx5: Allow async trigger completion execution on single CPU systems *48b73b46a5net/mlx5: Bridge, verify LAG state when adding bond to bridge *13b1ea861enet: wwan: iosm: fix memory leak in ipc_pcie_read_bios_cfg *7e4dcacb4dnet: nixge: disable napi when enable interrupts failed in nixge_open() *409731df63net: marvell: prestera: fix memory leak in prestera_rxtx_switch_init() *77ff31cba9netfilter: Cleanup nft_net->module_list from nf_tables_exit_net() *e62cb1c093netfilter: nfnetlink: fix potential dead lock in nfnetlink_rcv_msg() *0bd20318daperf tools: Add the include/perf/ directory to .gitignore *a733671e38perf stat: Fix printing os->prefix in CSV metrics output *c36e9e2c4adrivers: net: xgene: disable napi when register irq failed in xgene_enet_open() *4689bd3a1bnet: lapbether: fix issue of invalid opcode in lapbeth_open() *1dd27541aadmaengine: ti: k3-udma-glue: fix memory leak when register device fail *992e966cafdmaengine: mv_xor_v2: Fix a resource leak in mv_xor_v2_remove() *9766af75badmaengine: pxa_dma: use platform_get_irq_optional *301caa0609tipc: fix the msg->req tlv len check in tipc_nl_compat_name_table_dump_header *6a264203dbnet: broadcom: Fix BCMGENET Kconfig *e7871b9a21net: stmmac: dwmac-meson8b: fix meson8b_devm_clk_prepare_enable() *261178a1c2can: af_can: fix NULL pointer dereference in can_rx_register() *2acb2779b1ipv6: addrlabel: fix infoleak when sending struct ifaddrlblmsg to network *13ecaa6832tcp: prohibit TCP_REPAIR_OPTIONS if data was already sent *bc79cb9fb0drm/vc4: Fix missing platform_unregister_drivers() call in vc4_drm_register() *2845bc9070net: wwan: mhi: fix memory leak in mhi_mbim_dellink *2ce2348c28net: wwan: iosm: fix memory leak in ipc_wwan_dellink *7b6bc50f65hamradio: fix issue of dev reference count leakage in bpq_device_event() *f59adebb8cnet: lapbether: fix issue of dev reference count leakage in lapbeth_device_event() *119407dc32KVM: s390: pv: don't allow userspace to set the clock under PV *500bcd3a99phy: ralink: mt7621-pci: add sentinel to quirks table *151dc8087bcapabilities: fix undefined behavior in bit shift for CAP_TO_MASK *435c7ddfd5net: fman: Unregister ethernet device on removal *3a504d6d96bnxt_en: fix potentially incorrect return value for ndo_rx_flow_steer *ac257c43fabnxt_en: Fix possible crash in bnxt_hwrm_set_coal() *d7569302a7net: tun: Fix memory leaks of napi_get_frags *430d1f4964octeontx2-pf: NIX TX overwrites SQ_CTX_HW_S[SQ_INT] *ec0db81883octeontx2-pf: Use hardware register for CQE count *b89a0d8859macsec: clear encryption keys from the stack after setting up offload *eeba7f07a0macsec: fix detection of RXSCs when toggling offloading *3070a880ebmacsec: fix secy->n_rx_sc accounting *e957555a36macsec: delete new rxsc when offload fails *ad25a115f5net: gso: fix panic on frag_list with mixed head alloc types *466ce46f25bpf: Fix wrong reg type conversion in release_reference() *35d8130f2abpf: Add helper macro bpf_for_each_reg_in_vstate *61274498fbbpf, sock_map: Move cancel_work_sync() out of sock lock *32b5dd03bebpf: Fix sockmap calling sleepable function in teardown path *e991558189bpf, sockmap: Fix sk->sk_forward_alloc warn_on in sk_stream_kill_queues *5ad95d7134HID: hyperv: fix possible memory leak in mousevsc_probe() *6dcdd1b68bbpftool: Fix NULL pointer dereference when pin {PROG, MAP, LINK} without FILE *2fc902245cwifi: mac80211: Set TWT Information Frame Disabled bit as 1 *95adbd2ac8bpf, sockmap: Fix the sk->sk_forward_alloc warning of sk_stream_kill_queues *06615967d4bpf, verifier: Fix memory leak in array reallocation for stack state *4335a82c4fsoundwire: qcom: check for outanding writes before doing a read *ae4dad2e53soundwire: qcom: reinit broadcast completion *38c9fa2cc6wifi: cfg80211: fix memory leak in query_regdb_file() *2c6ba0a787wifi: cfg80211: silence a sparse RCU warning *921738c280phy: stm32: fix an error code in probe *fa722006f7hwspinlock: qcom: correct MMIO max register for newer SoCs *3c1bb6187edrm/amdkfd: Fix NULL pointer dereference in svm_migrate_to_ram() *b1f8522771drm/amdkfd: handle CPU fault on COW mapping *36770c045adrm/amdkfd: avoid recursive lock in migrations back to RAM *93a5de7e88fuse: fix readdir cache race *1920cf9454thunderbolt: Add DP OUT resource when DP tunnel is discovered *47dbf24969thunderbolt: Tear down existing tunnels when resuming from hibernate And update the .xml file with the new symbol that we are tracking and the abi preservation fix: 1 function symbol(s) added 'void __dev_kfree_skb_irq(struct sk_buff *, enum skb_free_reason)' type 'struct sdhci_host' changed member 'union { struct { u8 reinit_uhs; u8 reserve01; u8 drv_type; u16 reserve02; u32 reserve03; }; struct { u64 android_kabi_reserved1; }; union { }; }' was added member 'u64 android_kabi_reserved1' was removed Change-Id: If4a059230a137dee54298fff61ec87306bf96b0f Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
3886 lines
134 KiB
C
3886 lines
134 KiB
C
// SPDX-License-Identifier: GPL-2.0
|
|
/*
|
|
* ext4.h
|
|
*
|
|
* Copyright (C) 1992, 1993, 1994, 1995
|
|
* Remy Card (card@masi.ibp.fr)
|
|
* Laboratoire MASI - Institut Blaise Pascal
|
|
* Universite Pierre et Marie Curie (Paris VI)
|
|
*
|
|
* from
|
|
*
|
|
* linux/include/linux/minix_fs.h
|
|
*
|
|
* Copyright (C) 1991, 1992 Linus Torvalds
|
|
*/
|
|
|
|
#ifndef _EXT4_H
|
|
#define _EXT4_H
|
|
|
|
#include <linux/types.h>
|
|
#include <linux/blkdev.h>
|
|
#include <linux/magic.h>
|
|
#include <linux/jbd2.h>
|
|
#include <linux/quota.h>
|
|
#include <linux/rwsem.h>
|
|
#include <linux/rbtree.h>
|
|
#include <linux/seqlock.h>
|
|
#include <linux/mutex.h>
|
|
#include <linux/timer.h>
|
|
#include <linux/wait.h>
|
|
#include <linux/sched/signal.h>
|
|
#include <linux/blockgroup_lock.h>
|
|
#include <linux/percpu_counter.h>
|
|
#include <linux/ratelimit.h>
|
|
#include <crypto/hash.h>
|
|
#include <linux/falloc.h>
|
|
#include <linux/percpu-rwsem.h>
|
|
#include <linux/fiemap.h>
|
|
#ifdef __KERNEL__
|
|
#include <linux/compat.h>
|
|
#endif
|
|
|
|
#include <linux/fscrypt.h>
|
|
#include <linux/fsverity.h>
|
|
|
|
#include <linux/compiler.h>
|
|
|
|
/*
|
|
* The fourth extended filesystem constants/structures
|
|
*/
|
|
|
|
/*
|
|
* with AGGRESSIVE_CHECK allocator runs consistency checks over
|
|
* structures. these checks slow things down a lot
|
|
*/
|
|
#define AGGRESSIVE_CHECK__
|
|
|
|
/*
|
|
* with DOUBLE_CHECK defined mballoc creates persistent in-core
|
|
* bitmaps, maintains and uses them to check for double allocations
|
|
*/
|
|
#define DOUBLE_CHECK__
|
|
|
|
/*
|
|
* Define EXT4FS_DEBUG to produce debug messages
|
|
*/
|
|
#undef EXT4FS_DEBUG
|
|
|
|
/*
|
|
* Debug code
|
|
*/
|
|
#ifdef EXT4FS_DEBUG
|
|
#define ext4_debug(f, a...) \
|
|
do { \
|
|
printk(KERN_DEBUG "EXT4-fs DEBUG (%s, %d): %s:", \
|
|
__FILE__, __LINE__, __func__); \
|
|
printk(KERN_DEBUG f, ## a); \
|
|
} while (0)
|
|
#else
|
|
#define ext4_debug(fmt, ...) no_printk(fmt, ##__VA_ARGS__)
|
|
#endif
|
|
|
|
/*
|
|
* Turn on EXT_DEBUG to enable ext4_ext_show_path/leaf/move in extents.c
|
|
*/
|
|
#define EXT_DEBUG__
|
|
|
|
/*
|
|
* Dynamic printk for controlled extents debugging.
|
|
*/
|
|
#ifdef CONFIG_EXT4_DEBUG
|
|
#define ext_debug(ino, fmt, ...) \
|
|
pr_debug("[%s/%d] EXT4-fs (%s): ino %lu: (%s, %d): %s:" fmt, \
|
|
current->comm, task_pid_nr(current), \
|
|
ino->i_sb->s_id, ino->i_ino, __FILE__, __LINE__, \
|
|
__func__, ##__VA_ARGS__)
|
|
#else
|
|
#define ext_debug(ino, fmt, ...) no_printk(fmt, ##__VA_ARGS__)
|
|
#endif
|
|
|
|
#define ASSERT(assert) \
|
|
do { \
|
|
if (unlikely(!(assert))) { \
|
|
printk(KERN_EMERG \
|
|
"Assertion failure in %s() at %s:%d: '%s'\n", \
|
|
__func__, __FILE__, __LINE__, #assert); \
|
|
BUG(); \
|
|
} \
|
|
} while (0)
|
|
|
|
/* data type for block offset of block group */
|
|
typedef int ext4_grpblk_t;
|
|
|
|
/* data type for filesystem-wide blocks number */
|
|
typedef unsigned long long ext4_fsblk_t;
|
|
|
|
/* data type for file logical block number */
|
|
typedef __u32 ext4_lblk_t;
|
|
|
|
/* data type for block group number */
|
|
typedef unsigned int ext4_group_t;
|
|
|
|
enum SHIFT_DIRECTION {
|
|
SHIFT_LEFT = 0,
|
|
SHIFT_RIGHT,
|
|
};
|
|
|
|
/*
|
|
* Flags used in mballoc's allocation_context flags field.
|
|
*
|
|
* Also used to show what's going on for debugging purposes when the
|
|
* flag field is exported via the traceport interface
|
|
*/
|
|
|
|
/* prefer goal again. length */
|
|
#define EXT4_MB_HINT_MERGE 0x0001
|
|
/* blocks already reserved */
|
|
#define EXT4_MB_HINT_RESERVED 0x0002
|
|
/* metadata is being allocated */
|
|
#define EXT4_MB_HINT_METADATA 0x0004
|
|
/* first blocks in the file */
|
|
#define EXT4_MB_HINT_FIRST 0x0008
|
|
/* search for the best chunk */
|
|
#define EXT4_MB_HINT_BEST 0x0010
|
|
/* data is being allocated */
|
|
#define EXT4_MB_HINT_DATA 0x0020
|
|
/* don't preallocate (for tails) */
|
|
#define EXT4_MB_HINT_NOPREALLOC 0x0040
|
|
/* allocate for locality group */
|
|
#define EXT4_MB_HINT_GROUP_ALLOC 0x0080
|
|
/* allocate goal blocks or none */
|
|
#define EXT4_MB_HINT_GOAL_ONLY 0x0100
|
|
/* goal is meaningful */
|
|
#define EXT4_MB_HINT_TRY_GOAL 0x0200
|
|
/* blocks already pre-reserved by delayed allocation */
|
|
#define EXT4_MB_DELALLOC_RESERVED 0x0400
|
|
/* We are doing stream allocation */
|
|
#define EXT4_MB_STREAM_ALLOC 0x0800
|
|
/* Use reserved root blocks if needed */
|
|
#define EXT4_MB_USE_ROOT_BLOCKS 0x1000
|
|
/* Use blocks from reserved pool */
|
|
#define EXT4_MB_USE_RESERVED 0x2000
|
|
/* Do strict check for free blocks while retrying block allocation */
|
|
#define EXT4_MB_STRICT_CHECK 0x4000
|
|
/* Large fragment size list lookup succeeded at least once for cr = 0 */
|
|
#define EXT4_MB_CR0_OPTIMIZED 0x8000
|
|
/* Avg fragment size rb tree lookup succeeded at least once for cr = 1 */
|
|
#define EXT4_MB_CR1_OPTIMIZED 0x00010000
|
|
/* Perform linear traversal for one group */
|
|
#define EXT4_MB_SEARCH_NEXT_LINEAR 0x00020000
|
|
struct ext4_allocation_request {
|
|
/* target inode for block we're allocating */
|
|
struct inode *inode;
|
|
/* how many blocks we want to allocate */
|
|
unsigned int len;
|
|
/* logical block in target inode */
|
|
ext4_lblk_t logical;
|
|
/* the closest logical allocated block to the left */
|
|
ext4_lblk_t lleft;
|
|
/* the closest logical allocated block to the right */
|
|
ext4_lblk_t lright;
|
|
/* phys. target (a hint) */
|
|
ext4_fsblk_t goal;
|
|
/* phys. block for the closest logical allocated block to the left */
|
|
ext4_fsblk_t pleft;
|
|
/* phys. block for the closest logical allocated block to the right */
|
|
ext4_fsblk_t pright;
|
|
/* flags. see above EXT4_MB_HINT_* */
|
|
unsigned int flags;
|
|
};
|
|
|
|
/*
|
|
* Logical to physical block mapping, used by ext4_map_blocks()
|
|
*
|
|
* This structure is used to pass requests into ext4_map_blocks() as
|
|
* well as to store the information returned by ext4_map_blocks(). It
|
|
* takes less room on the stack than a struct buffer_head.
|
|
*/
|
|
#define EXT4_MAP_NEW BIT(BH_New)
|
|
#define EXT4_MAP_MAPPED BIT(BH_Mapped)
|
|
#define EXT4_MAP_UNWRITTEN BIT(BH_Unwritten)
|
|
#define EXT4_MAP_BOUNDARY BIT(BH_Boundary)
|
|
#define EXT4_MAP_FLAGS (EXT4_MAP_NEW | EXT4_MAP_MAPPED |\
|
|
EXT4_MAP_UNWRITTEN | EXT4_MAP_BOUNDARY)
|
|
|
|
struct ext4_map_blocks {
|
|
ext4_fsblk_t m_pblk;
|
|
ext4_lblk_t m_lblk;
|
|
unsigned int m_len;
|
|
unsigned int m_flags;
|
|
};
|
|
|
|
/*
|
|
* Block validity checking, system zone rbtree.
|
|
*/
|
|
struct ext4_system_blocks {
|
|
struct rb_root root;
|
|
struct rcu_head rcu;
|
|
};
|
|
|
|
/*
|
|
* Flags for ext4_io_end->flags
|
|
*/
|
|
#define EXT4_IO_END_UNWRITTEN 0x0001
|
|
|
|
struct ext4_io_end_vec {
|
|
struct list_head list; /* list of io_end_vec */
|
|
loff_t offset; /* offset in the file */
|
|
ssize_t size; /* size of the extent */
|
|
};
|
|
|
|
/*
|
|
* For converting unwritten extents on a work queue. 'handle' is used for
|
|
* buffered writeback.
|
|
*/
|
|
typedef struct ext4_io_end {
|
|
struct list_head list; /* per-file finished IO list */
|
|
handle_t *handle; /* handle reserved for extent
|
|
* conversion */
|
|
struct inode *inode; /* file being written to */
|
|
struct bio *bio; /* Linked list of completed
|
|
* bios covering the extent */
|
|
unsigned int flag; /* unwritten or not */
|
|
atomic_t count; /* reference counter */
|
|
struct list_head list_vec; /* list of ext4_io_end_vec */
|
|
} ext4_io_end_t;
|
|
|
|
struct ext4_io_submit {
|
|
struct writeback_control *io_wbc;
|
|
struct bio *io_bio;
|
|
ext4_io_end_t *io_end;
|
|
sector_t io_next_block;
|
|
};
|
|
|
|
/*
|
|
* Special inodes numbers
|
|
*/
|
|
#define EXT4_BAD_INO 1 /* Bad blocks inode */
|
|
#define EXT4_ROOT_INO 2 /* Root inode */
|
|
#define EXT4_USR_QUOTA_INO 3 /* User quota inode */
|
|
#define EXT4_GRP_QUOTA_INO 4 /* Group quota inode */
|
|
#define EXT4_BOOT_LOADER_INO 5 /* Boot loader inode */
|
|
#define EXT4_UNDEL_DIR_INO 6 /* Undelete directory inode */
|
|
#define EXT4_RESIZE_INO 7 /* Reserved group descriptors inode */
|
|
#define EXT4_JOURNAL_INO 8 /* Journal inode */
|
|
|
|
/* First non-reserved inode for old ext4 filesystems */
|
|
#define EXT4_GOOD_OLD_FIRST_INO 11
|
|
|
|
/*
|
|
* Maximal count of links to a file
|
|
*/
|
|
#define EXT4_LINK_MAX 65000
|
|
|
|
/*
|
|
* Macro-instructions used to manage several block sizes
|
|
*/
|
|
#define EXT4_MIN_BLOCK_SIZE 1024
|
|
#define EXT4_MAX_BLOCK_SIZE 65536
|
|
#define EXT4_MIN_BLOCK_LOG_SIZE 10
|
|
#define EXT4_MAX_BLOCK_LOG_SIZE 16
|
|
#define EXT4_MAX_CLUSTER_LOG_SIZE 30
|
|
#ifdef __KERNEL__
|
|
# define EXT4_BLOCK_SIZE(s) ((s)->s_blocksize)
|
|
#else
|
|
# define EXT4_BLOCK_SIZE(s) (EXT4_MIN_BLOCK_SIZE << (s)->s_log_block_size)
|
|
#endif
|
|
#define EXT4_ADDR_PER_BLOCK(s) (EXT4_BLOCK_SIZE(s) / sizeof(__u32))
|
|
#define EXT4_CLUSTER_SIZE(s) (EXT4_BLOCK_SIZE(s) << \
|
|
EXT4_SB(s)->s_cluster_bits)
|
|
#ifdef __KERNEL__
|
|
# define EXT4_BLOCK_SIZE_BITS(s) ((s)->s_blocksize_bits)
|
|
# define EXT4_CLUSTER_BITS(s) (EXT4_SB(s)->s_cluster_bits)
|
|
#else
|
|
# define EXT4_BLOCK_SIZE_BITS(s) ((s)->s_log_block_size + 10)
|
|
#endif
|
|
#ifdef __KERNEL__
|
|
#define EXT4_ADDR_PER_BLOCK_BITS(s) (EXT4_SB(s)->s_addr_per_block_bits)
|
|
#define EXT4_INODE_SIZE(s) (EXT4_SB(s)->s_inode_size)
|
|
#define EXT4_FIRST_INO(s) (EXT4_SB(s)->s_first_ino)
|
|
#else
|
|
#define EXT4_INODE_SIZE(s) (((s)->s_rev_level == EXT4_GOOD_OLD_REV) ? \
|
|
EXT4_GOOD_OLD_INODE_SIZE : \
|
|
(s)->s_inode_size)
|
|
#define EXT4_FIRST_INO(s) (((s)->s_rev_level == EXT4_GOOD_OLD_REV) ? \
|
|
EXT4_GOOD_OLD_FIRST_INO : \
|
|
(s)->s_first_ino)
|
|
#endif
|
|
#define EXT4_BLOCK_ALIGN(size, blkbits) ALIGN((size), (1 << (blkbits)))
|
|
#define EXT4_MAX_BLOCKS(size, offset, blkbits) \
|
|
((EXT4_BLOCK_ALIGN(size + offset, blkbits) >> blkbits) - (offset >> \
|
|
blkbits))
|
|
|
|
/* Translate a block number to a cluster number */
|
|
#define EXT4_B2C(sbi, blk) ((blk) >> (sbi)->s_cluster_bits)
|
|
/* Translate a cluster number to a block number */
|
|
#define EXT4_C2B(sbi, cluster) ((cluster) << (sbi)->s_cluster_bits)
|
|
/* Translate # of blks to # of clusters */
|
|
#define EXT4_NUM_B2C(sbi, blks) (((blks) + (sbi)->s_cluster_ratio - 1) >> \
|
|
(sbi)->s_cluster_bits)
|
|
/* Mask out the low bits to get the starting block of the cluster */
|
|
#define EXT4_PBLK_CMASK(s, pblk) ((pblk) & \
|
|
~((ext4_fsblk_t) (s)->s_cluster_ratio - 1))
|
|
#define EXT4_LBLK_CMASK(s, lblk) ((lblk) & \
|
|
~((ext4_lblk_t) (s)->s_cluster_ratio - 1))
|
|
/* Fill in the low bits to get the last block of the cluster */
|
|
#define EXT4_LBLK_CFILL(sbi, lblk) ((lblk) | \
|
|
((ext4_lblk_t) (sbi)->s_cluster_ratio - 1))
|
|
/* Get the cluster offset */
|
|
#define EXT4_PBLK_COFF(s, pblk) ((pblk) & \
|
|
((ext4_fsblk_t) (s)->s_cluster_ratio - 1))
|
|
#define EXT4_LBLK_COFF(s, lblk) ((lblk) & \
|
|
((ext4_lblk_t) (s)->s_cluster_ratio - 1))
|
|
|
|
/*
|
|
* Structure of a blocks group descriptor
|
|
*/
|
|
struct ext4_group_desc
|
|
{
|
|
__le32 bg_block_bitmap_lo; /* Blocks bitmap block */
|
|
__le32 bg_inode_bitmap_lo; /* Inodes bitmap block */
|
|
__le32 bg_inode_table_lo; /* Inodes table block */
|
|
__le16 bg_free_blocks_count_lo;/* Free blocks count */
|
|
__le16 bg_free_inodes_count_lo;/* Free inodes count */
|
|
__le16 bg_used_dirs_count_lo; /* Directories count */
|
|
__le16 bg_flags; /* EXT4_BG_flags (INODE_UNINIT, etc) */
|
|
__le32 bg_exclude_bitmap_lo; /* Exclude bitmap for snapshots */
|
|
__le16 bg_block_bitmap_csum_lo;/* crc32c(s_uuid+grp_num+bbitmap) LE */
|
|
__le16 bg_inode_bitmap_csum_lo;/* crc32c(s_uuid+grp_num+ibitmap) LE */
|
|
__le16 bg_itable_unused_lo; /* Unused inodes count */
|
|
__le16 bg_checksum; /* crc16(sb_uuid+group+desc) */
|
|
__le32 bg_block_bitmap_hi; /* Blocks bitmap block MSB */
|
|
__le32 bg_inode_bitmap_hi; /* Inodes bitmap block MSB */
|
|
__le32 bg_inode_table_hi; /* Inodes table block MSB */
|
|
__le16 bg_free_blocks_count_hi;/* Free blocks count MSB */
|
|
__le16 bg_free_inodes_count_hi;/* Free inodes count MSB */
|
|
__le16 bg_used_dirs_count_hi; /* Directories count MSB */
|
|
__le16 bg_itable_unused_hi; /* Unused inodes count MSB */
|
|
__le32 bg_exclude_bitmap_hi; /* Exclude bitmap block MSB */
|
|
__le16 bg_block_bitmap_csum_hi;/* crc32c(s_uuid+grp_num+bbitmap) BE */
|
|
__le16 bg_inode_bitmap_csum_hi;/* crc32c(s_uuid+grp_num+ibitmap) BE */
|
|
__u32 bg_reserved;
|
|
};
|
|
|
|
#define EXT4_BG_INODE_BITMAP_CSUM_HI_END \
|
|
(offsetof(struct ext4_group_desc, bg_inode_bitmap_csum_hi) + \
|
|
sizeof(__le16))
|
|
#define EXT4_BG_BLOCK_BITMAP_CSUM_HI_END \
|
|
(offsetof(struct ext4_group_desc, bg_block_bitmap_csum_hi) + \
|
|
sizeof(__le16))
|
|
|
|
/*
|
|
* Structure of a flex block group info
|
|
*/
|
|
|
|
struct flex_groups {
|
|
atomic64_t free_clusters;
|
|
atomic_t free_inodes;
|
|
atomic_t used_dirs;
|
|
};
|
|
|
|
#define EXT4_BG_INODE_UNINIT 0x0001 /* Inode table/bitmap not in use */
|
|
#define EXT4_BG_BLOCK_UNINIT 0x0002 /* Block bitmap not in use */
|
|
#define EXT4_BG_INODE_ZEROED 0x0004 /* On-disk itable initialized to zero */
|
|
|
|
/*
|
|
* Macro-instructions used to manage group descriptors
|
|
*/
|
|
#define EXT4_MIN_DESC_SIZE 32
|
|
#define EXT4_MIN_DESC_SIZE_64BIT 64
|
|
#define EXT4_MAX_DESC_SIZE EXT4_MIN_BLOCK_SIZE
|
|
#define EXT4_DESC_SIZE(s) (EXT4_SB(s)->s_desc_size)
|
|
#ifdef __KERNEL__
|
|
# define EXT4_BLOCKS_PER_GROUP(s) (EXT4_SB(s)->s_blocks_per_group)
|
|
# define EXT4_CLUSTERS_PER_GROUP(s) (EXT4_SB(s)->s_clusters_per_group)
|
|
# define EXT4_DESC_PER_BLOCK(s) (EXT4_SB(s)->s_desc_per_block)
|
|
# define EXT4_INODES_PER_GROUP(s) (EXT4_SB(s)->s_inodes_per_group)
|
|
# define EXT4_DESC_PER_BLOCK_BITS(s) (EXT4_SB(s)->s_desc_per_block_bits)
|
|
#else
|
|
# define EXT4_BLOCKS_PER_GROUP(s) ((s)->s_blocks_per_group)
|
|
# define EXT4_DESC_PER_BLOCK(s) (EXT4_BLOCK_SIZE(s) / EXT4_DESC_SIZE(s))
|
|
# define EXT4_INODES_PER_GROUP(s) ((s)->s_inodes_per_group)
|
|
#endif
|
|
|
|
/*
|
|
* Constants relative to the data blocks
|
|
*/
|
|
#define EXT4_NDIR_BLOCKS 12
|
|
#define EXT4_IND_BLOCK EXT4_NDIR_BLOCKS
|
|
#define EXT4_DIND_BLOCK (EXT4_IND_BLOCK + 1)
|
|
#define EXT4_TIND_BLOCK (EXT4_DIND_BLOCK + 1)
|
|
#define EXT4_N_BLOCKS (EXT4_TIND_BLOCK + 1)
|
|
|
|
/*
|
|
* Inode flags
|
|
*/
|
|
#define EXT4_SECRM_FL 0x00000001 /* Secure deletion */
|
|
#define EXT4_UNRM_FL 0x00000002 /* Undelete */
|
|
#define EXT4_COMPR_FL 0x00000004 /* Compress file */
|
|
#define EXT4_SYNC_FL 0x00000008 /* Synchronous updates */
|
|
#define EXT4_IMMUTABLE_FL 0x00000010 /* Immutable file */
|
|
#define EXT4_APPEND_FL 0x00000020 /* writes to file may only append */
|
|
#define EXT4_NODUMP_FL 0x00000040 /* do not dump file */
|
|
#define EXT4_NOATIME_FL 0x00000080 /* do not update atime */
|
|
/* Reserved for compression usage... */
|
|
#define EXT4_DIRTY_FL 0x00000100
|
|
#define EXT4_COMPRBLK_FL 0x00000200 /* One or more compressed clusters */
|
|
#define EXT4_NOCOMPR_FL 0x00000400 /* Don't compress */
|
|
/* nb: was previously EXT2_ECOMPR_FL */
|
|
#define EXT4_ENCRYPT_FL 0x00000800 /* encrypted file */
|
|
/* End compression flags --- maybe not all used */
|
|
#define EXT4_INDEX_FL 0x00001000 /* hash-indexed directory */
|
|
#define EXT4_IMAGIC_FL 0x00002000 /* AFS directory */
|
|
#define EXT4_JOURNAL_DATA_FL 0x00004000 /* file data should be journaled */
|
|
#define EXT4_NOTAIL_FL 0x00008000 /* file tail should not be merged */
|
|
#define EXT4_DIRSYNC_FL 0x00010000 /* dirsync behaviour (directories only) */
|
|
#define EXT4_TOPDIR_FL 0x00020000 /* Top of directory hierarchies*/
|
|
#define EXT4_HUGE_FILE_FL 0x00040000 /* Set to each huge file */
|
|
#define EXT4_EXTENTS_FL 0x00080000 /* Inode uses extents */
|
|
#define EXT4_VERITY_FL 0x00100000 /* Verity protected inode */
|
|
#define EXT4_EA_INODE_FL 0x00200000 /* Inode used for large EA */
|
|
/* 0x00400000 was formerly EXT4_EOFBLOCKS_FL */
|
|
|
|
#define EXT4_DAX_FL 0x02000000 /* Inode is DAX */
|
|
|
|
#define EXT4_INLINE_DATA_FL 0x10000000 /* Inode has inline data. */
|
|
#define EXT4_PROJINHERIT_FL 0x20000000 /* Create with parents projid */
|
|
#define EXT4_CASEFOLD_FL 0x40000000 /* Casefolded directory */
|
|
#define EXT4_RESERVED_FL 0x80000000 /* reserved for ext4 lib */
|
|
|
|
/* User modifiable flags */
|
|
#define EXT4_FL_USER_MODIFIABLE (EXT4_SECRM_FL | \
|
|
EXT4_UNRM_FL | \
|
|
EXT4_COMPR_FL | \
|
|
EXT4_SYNC_FL | \
|
|
EXT4_IMMUTABLE_FL | \
|
|
EXT4_APPEND_FL | \
|
|
EXT4_NODUMP_FL | \
|
|
EXT4_NOATIME_FL | \
|
|
EXT4_JOURNAL_DATA_FL | \
|
|
EXT4_NOTAIL_FL | \
|
|
EXT4_DIRSYNC_FL | \
|
|
EXT4_TOPDIR_FL | \
|
|
EXT4_EXTENTS_FL | \
|
|
0x00400000 /* EXT4_EOFBLOCKS_FL */ | \
|
|
EXT4_DAX_FL | \
|
|
EXT4_PROJINHERIT_FL | \
|
|
EXT4_CASEFOLD_FL)
|
|
|
|
/* User visible flags */
|
|
#define EXT4_FL_USER_VISIBLE (EXT4_FL_USER_MODIFIABLE | \
|
|
EXT4_DIRTY_FL | \
|
|
EXT4_COMPRBLK_FL | \
|
|
EXT4_NOCOMPR_FL | \
|
|
EXT4_ENCRYPT_FL | \
|
|
EXT4_INDEX_FL | \
|
|
EXT4_VERITY_FL | \
|
|
EXT4_INLINE_DATA_FL)
|
|
|
|
/* Flags that should be inherited by new inodes from their parent. */
|
|
#define EXT4_FL_INHERITED (EXT4_SECRM_FL | EXT4_UNRM_FL | EXT4_COMPR_FL |\
|
|
EXT4_SYNC_FL | EXT4_NODUMP_FL | EXT4_NOATIME_FL |\
|
|
EXT4_NOCOMPR_FL | EXT4_JOURNAL_DATA_FL |\
|
|
EXT4_NOTAIL_FL | EXT4_DIRSYNC_FL |\
|
|
EXT4_PROJINHERIT_FL | EXT4_CASEFOLD_FL |\
|
|
EXT4_DAX_FL)
|
|
|
|
/* Flags that are appropriate for regular files (all but dir-specific ones). */
|
|
#define EXT4_REG_FLMASK (~(EXT4_DIRSYNC_FL | EXT4_TOPDIR_FL | EXT4_CASEFOLD_FL |\
|
|
EXT4_PROJINHERIT_FL))
|
|
|
|
/* Flags that are appropriate for non-directories/regular files. */
|
|
#define EXT4_OTHER_FLMASK (EXT4_NODUMP_FL | EXT4_NOATIME_FL)
|
|
|
|
/* The only flags that should be swapped */
|
|
#define EXT4_FL_SHOULD_SWAP (EXT4_HUGE_FILE_FL | EXT4_EXTENTS_FL)
|
|
|
|
/* Flags which are mutually exclusive to DAX */
|
|
#define EXT4_DAX_MUT_EXCL (EXT4_VERITY_FL | EXT4_ENCRYPT_FL |\
|
|
EXT4_JOURNAL_DATA_FL | EXT4_INLINE_DATA_FL)
|
|
|
|
/* Mask out flags that are inappropriate for the given type of inode. */
|
|
static inline __u32 ext4_mask_flags(umode_t mode, __u32 flags)
|
|
{
|
|
if (S_ISDIR(mode))
|
|
return flags;
|
|
else if (S_ISREG(mode))
|
|
return flags & EXT4_REG_FLMASK;
|
|
else
|
|
return flags & EXT4_OTHER_FLMASK;
|
|
}
|
|
|
|
/*
|
|
* Inode flags used for atomic set/get
|
|
*/
|
|
enum {
|
|
EXT4_INODE_SECRM = 0, /* Secure deletion */
|
|
EXT4_INODE_UNRM = 1, /* Undelete */
|
|
EXT4_INODE_COMPR = 2, /* Compress file */
|
|
EXT4_INODE_SYNC = 3, /* Synchronous updates */
|
|
EXT4_INODE_IMMUTABLE = 4, /* Immutable file */
|
|
EXT4_INODE_APPEND = 5, /* writes to file may only append */
|
|
EXT4_INODE_NODUMP = 6, /* do not dump file */
|
|
EXT4_INODE_NOATIME = 7, /* do not update atime */
|
|
/* Reserved for compression usage... */
|
|
EXT4_INODE_DIRTY = 8,
|
|
EXT4_INODE_COMPRBLK = 9, /* One or more compressed clusters */
|
|
EXT4_INODE_NOCOMPR = 10, /* Don't compress */
|
|
EXT4_INODE_ENCRYPT = 11, /* Encrypted file */
|
|
/* End compression flags --- maybe not all used */
|
|
EXT4_INODE_INDEX = 12, /* hash-indexed directory */
|
|
EXT4_INODE_IMAGIC = 13, /* AFS directory */
|
|
EXT4_INODE_JOURNAL_DATA = 14, /* file data should be journaled */
|
|
EXT4_INODE_NOTAIL = 15, /* file tail should not be merged */
|
|
EXT4_INODE_DIRSYNC = 16, /* dirsync behaviour (directories only) */
|
|
EXT4_INODE_TOPDIR = 17, /* Top of directory hierarchies*/
|
|
EXT4_INODE_HUGE_FILE = 18, /* Set to each huge file */
|
|
EXT4_INODE_EXTENTS = 19, /* Inode uses extents */
|
|
EXT4_INODE_VERITY = 20, /* Verity protected inode */
|
|
EXT4_INODE_EA_INODE = 21, /* Inode used for large EA */
|
|
/* 22 was formerly EXT4_INODE_EOFBLOCKS */
|
|
EXT4_INODE_DAX = 25, /* Inode is DAX */
|
|
EXT4_INODE_INLINE_DATA = 28, /* Data in inode. */
|
|
EXT4_INODE_PROJINHERIT = 29, /* Create with parents projid */
|
|
EXT4_INODE_CASEFOLD = 30, /* Casefolded directory */
|
|
EXT4_INODE_RESERVED = 31, /* reserved for ext4 lib */
|
|
};
|
|
|
|
/*
|
|
* Since it's pretty easy to mix up bit numbers and hex values, we use a
|
|
* build-time check to make sure that EXT4_XXX_FL is consistent with respect to
|
|
* EXT4_INODE_XXX. If all is well, the macros will be dropped, so, it won't cost
|
|
* any extra space in the compiled kernel image, otherwise, the build will fail.
|
|
* It's important that these values are the same, since we are using
|
|
* EXT4_INODE_XXX to test for flag values, but EXT4_XXX_FL must be consistent
|
|
* with the values of FS_XXX_FL defined in include/linux/fs.h and the on-disk
|
|
* values found in ext2, ext3 and ext4 filesystems, and of course the values
|
|
* defined in e2fsprogs.
|
|
*
|
|
* It's not paranoia if the Murphy's Law really *is* out to get you. :-)
|
|
*/
|
|
#define TEST_FLAG_VALUE(FLAG) (EXT4_##FLAG##_FL == (1U << EXT4_INODE_##FLAG))
|
|
#define CHECK_FLAG_VALUE(FLAG) BUILD_BUG_ON(!TEST_FLAG_VALUE(FLAG))
|
|
|
|
static inline void ext4_check_flag_values(void)
|
|
{
|
|
CHECK_FLAG_VALUE(SECRM);
|
|
CHECK_FLAG_VALUE(UNRM);
|
|
CHECK_FLAG_VALUE(COMPR);
|
|
CHECK_FLAG_VALUE(SYNC);
|
|
CHECK_FLAG_VALUE(IMMUTABLE);
|
|
CHECK_FLAG_VALUE(APPEND);
|
|
CHECK_FLAG_VALUE(NODUMP);
|
|
CHECK_FLAG_VALUE(NOATIME);
|
|
CHECK_FLAG_VALUE(DIRTY);
|
|
CHECK_FLAG_VALUE(COMPRBLK);
|
|
CHECK_FLAG_VALUE(NOCOMPR);
|
|
CHECK_FLAG_VALUE(ENCRYPT);
|
|
CHECK_FLAG_VALUE(INDEX);
|
|
CHECK_FLAG_VALUE(IMAGIC);
|
|
CHECK_FLAG_VALUE(JOURNAL_DATA);
|
|
CHECK_FLAG_VALUE(NOTAIL);
|
|
CHECK_FLAG_VALUE(DIRSYNC);
|
|
CHECK_FLAG_VALUE(TOPDIR);
|
|
CHECK_FLAG_VALUE(HUGE_FILE);
|
|
CHECK_FLAG_VALUE(EXTENTS);
|
|
CHECK_FLAG_VALUE(VERITY);
|
|
CHECK_FLAG_VALUE(EA_INODE);
|
|
CHECK_FLAG_VALUE(INLINE_DATA);
|
|
CHECK_FLAG_VALUE(PROJINHERIT);
|
|
CHECK_FLAG_VALUE(CASEFOLD);
|
|
CHECK_FLAG_VALUE(RESERVED);
|
|
}
|
|
|
|
/* Used to pass group descriptor data when online resize is done */
|
|
struct ext4_new_group_input {
|
|
__u32 group; /* Group number for this data */
|
|
__u64 block_bitmap; /* Absolute block number of block bitmap */
|
|
__u64 inode_bitmap; /* Absolute block number of inode bitmap */
|
|
__u64 inode_table; /* Absolute block number of inode table start */
|
|
__u32 blocks_count; /* Total number of blocks in this group */
|
|
__u16 reserved_blocks; /* Number of reserved blocks in this group */
|
|
__u16 unused;
|
|
};
|
|
|
|
#if defined(__KERNEL__) && defined(CONFIG_COMPAT)
|
|
struct compat_ext4_new_group_input {
|
|
u32 group;
|
|
compat_u64 block_bitmap;
|
|
compat_u64 inode_bitmap;
|
|
compat_u64 inode_table;
|
|
u32 blocks_count;
|
|
u16 reserved_blocks;
|
|
u16 unused;
|
|
};
|
|
#endif
|
|
|
|
/* The struct ext4_new_group_input in kernel space, with free_blocks_count */
|
|
struct ext4_new_group_data {
|
|
__u32 group;
|
|
__u64 block_bitmap;
|
|
__u64 inode_bitmap;
|
|
__u64 inode_table;
|
|
__u32 blocks_count;
|
|
__u16 reserved_blocks;
|
|
__u16 mdata_blocks;
|
|
__u32 free_clusters_count;
|
|
};
|
|
|
|
/* Indexes used to index group tables in ext4_new_group_data */
|
|
enum {
|
|
BLOCK_BITMAP = 0, /* block bitmap */
|
|
INODE_BITMAP, /* inode bitmap */
|
|
INODE_TABLE, /* inode tables */
|
|
GROUP_TABLE_COUNT,
|
|
};
|
|
|
|
/*
|
|
* Flags used by ext4_map_blocks()
|
|
*/
|
|
/* Allocate any needed blocks and/or convert an unwritten
|
|
extent to be an initialized ext4 */
|
|
#define EXT4_GET_BLOCKS_CREATE 0x0001
|
|
/* Request the creation of an unwritten extent */
|
|
#define EXT4_GET_BLOCKS_UNWRIT_EXT 0x0002
|
|
#define EXT4_GET_BLOCKS_CREATE_UNWRIT_EXT (EXT4_GET_BLOCKS_UNWRIT_EXT|\
|
|
EXT4_GET_BLOCKS_CREATE)
|
|
/* Caller is from the delayed allocation writeout path
|
|
* finally doing the actual allocation of delayed blocks */
|
|
#define EXT4_GET_BLOCKS_DELALLOC_RESERVE 0x0004
|
|
/* caller is from the direct IO path, request to creation of an
|
|
unwritten extents if not allocated, split the unwritten
|
|
extent if blocks has been preallocated already*/
|
|
#define EXT4_GET_BLOCKS_PRE_IO 0x0008
|
|
#define EXT4_GET_BLOCKS_CONVERT 0x0010
|
|
#define EXT4_GET_BLOCKS_IO_CREATE_EXT (EXT4_GET_BLOCKS_PRE_IO|\
|
|
EXT4_GET_BLOCKS_CREATE_UNWRIT_EXT)
|
|
/* Convert extent to initialized after IO complete */
|
|
#define EXT4_GET_BLOCKS_IO_CONVERT_EXT (EXT4_GET_BLOCKS_CONVERT|\
|
|
EXT4_GET_BLOCKS_CREATE_UNWRIT_EXT)
|
|
/* Eventual metadata allocation (due to growing extent tree)
|
|
* should not fail, so try to use reserved blocks for that.*/
|
|
#define EXT4_GET_BLOCKS_METADATA_NOFAIL 0x0020
|
|
/* Don't normalize allocation size (used for fallocate) */
|
|
#define EXT4_GET_BLOCKS_NO_NORMALIZE 0x0040
|
|
/* Convert written extents to unwritten */
|
|
#define EXT4_GET_BLOCKS_CONVERT_UNWRITTEN 0x0100
|
|
/* Write zeros to newly created written extents */
|
|
#define EXT4_GET_BLOCKS_ZERO 0x0200
|
|
#define EXT4_GET_BLOCKS_CREATE_ZERO (EXT4_GET_BLOCKS_CREATE |\
|
|
EXT4_GET_BLOCKS_ZERO)
|
|
/* Caller will submit data before dropping transaction handle. This
|
|
* allows jbd2 to avoid submitting data before commit. */
|
|
#define EXT4_GET_BLOCKS_IO_SUBMIT 0x0400
|
|
|
|
/*
|
|
* The bit position of these flags must not overlap with any of the
|
|
* EXT4_GET_BLOCKS_*. They are used by ext4_find_extent(),
|
|
* read_extent_tree_block(), ext4_split_extent_at(),
|
|
* ext4_ext_insert_extent(), and ext4_ext_create_new_leaf().
|
|
* EXT4_EX_NOCACHE is used to indicate that the we shouldn't be
|
|
* caching the extents when reading from the extent tree while a
|
|
* truncate or punch hole operation is in progress.
|
|
*/
|
|
#define EXT4_EX_NOCACHE 0x40000000
|
|
#define EXT4_EX_FORCE_CACHE 0x20000000
|
|
#define EXT4_EX_NOFAIL 0x10000000
|
|
|
|
/*
|
|
* Flags used by ext4_free_blocks
|
|
*/
|
|
#define EXT4_FREE_BLOCKS_METADATA 0x0001
|
|
#define EXT4_FREE_BLOCKS_FORGET 0x0002
|
|
#define EXT4_FREE_BLOCKS_VALIDATED 0x0004
|
|
#define EXT4_FREE_BLOCKS_NO_QUOT_UPDATE 0x0008
|
|
#define EXT4_FREE_BLOCKS_NOFREE_FIRST_CLUSTER 0x0010
|
|
#define EXT4_FREE_BLOCKS_NOFREE_LAST_CLUSTER 0x0020
|
|
#define EXT4_FREE_BLOCKS_RERESERVE_CLUSTER 0x0040
|
|
|
|
/*
|
|
* ioctl commands
|
|
*/
|
|
#define EXT4_IOC_GETVERSION _IOR('f', 3, long)
|
|
#define EXT4_IOC_SETVERSION _IOW('f', 4, long)
|
|
#define EXT4_IOC_GETVERSION_OLD FS_IOC_GETVERSION
|
|
#define EXT4_IOC_SETVERSION_OLD FS_IOC_SETVERSION
|
|
#define EXT4_IOC_GETRSVSZ _IOR('f', 5, long)
|
|
#define EXT4_IOC_SETRSVSZ _IOW('f', 6, long)
|
|
#define EXT4_IOC_GROUP_EXTEND _IOW('f', 7, unsigned long)
|
|
#define EXT4_IOC_GROUP_ADD _IOW('f', 8, struct ext4_new_group_input)
|
|
#define EXT4_IOC_MIGRATE _IO('f', 9)
|
|
/* note ioctl 10 reserved for an early version of the FIEMAP ioctl */
|
|
/* note ioctl 11 reserved for filesystem-independent FIEMAP ioctl */
|
|
#define EXT4_IOC_ALLOC_DA_BLKS _IO('f', 12)
|
|
#define EXT4_IOC_MOVE_EXT _IOWR('f', 15, struct move_extent)
|
|
#define EXT4_IOC_RESIZE_FS _IOW('f', 16, __u64)
|
|
#define EXT4_IOC_SWAP_BOOT _IO('f', 17)
|
|
#define EXT4_IOC_PRECACHE_EXTENTS _IO('f', 18)
|
|
/* ioctl codes 19--39 are reserved for fscrypt */
|
|
#define EXT4_IOC_CLEAR_ES_CACHE _IO('f', 40)
|
|
#define EXT4_IOC_GETSTATE _IOW('f', 41, __u32)
|
|
#define EXT4_IOC_GET_ES_CACHE _IOWR('f', 42, struct fiemap)
|
|
#define EXT4_IOC_CHECKPOINT _IOW('f', 43, __u32)
|
|
|
|
#define EXT4_IOC_SHUTDOWN _IOR ('X', 125, __u32)
|
|
|
|
/*
|
|
* Flags for going down operation
|
|
*/
|
|
#define EXT4_GOING_FLAGS_DEFAULT 0x0 /* going down */
|
|
#define EXT4_GOING_FLAGS_LOGFLUSH 0x1 /* flush log but not data */
|
|
#define EXT4_GOING_FLAGS_NOLOGFLUSH 0x2 /* don't flush log nor data */
|
|
|
|
/*
|
|
* Flags returned by EXT4_IOC_GETSTATE
|
|
*
|
|
* We only expose to userspace a subset of the state flags in
|
|
* i_state_flags
|
|
*/
|
|
#define EXT4_STATE_FLAG_EXT_PRECACHED 0x00000001
|
|
#define EXT4_STATE_FLAG_NEW 0x00000002
|
|
#define EXT4_STATE_FLAG_NEWENTRY 0x00000004
|
|
#define EXT4_STATE_FLAG_DA_ALLOC_CLOSE 0x00000008
|
|
|
|
/* flags for ioctl EXT4_IOC_CHECKPOINT */
|
|
#define EXT4_IOC_CHECKPOINT_FLAG_DISCARD 0x1
|
|
#define EXT4_IOC_CHECKPOINT_FLAG_ZEROOUT 0x2
|
|
#define EXT4_IOC_CHECKPOINT_FLAG_DRY_RUN 0x4
|
|
#define EXT4_IOC_CHECKPOINT_FLAG_VALID (EXT4_IOC_CHECKPOINT_FLAG_DISCARD | \
|
|
EXT4_IOC_CHECKPOINT_FLAG_ZEROOUT | \
|
|
EXT4_IOC_CHECKPOINT_FLAG_DRY_RUN)
|
|
|
|
#if defined(__KERNEL__) && defined(CONFIG_COMPAT)
|
|
/*
|
|
* ioctl commands in 32 bit emulation
|
|
*/
|
|
#define EXT4_IOC32_GETVERSION _IOR('f', 3, int)
|
|
#define EXT4_IOC32_SETVERSION _IOW('f', 4, int)
|
|
#define EXT4_IOC32_GETRSVSZ _IOR('f', 5, int)
|
|
#define EXT4_IOC32_SETRSVSZ _IOW('f', 6, int)
|
|
#define EXT4_IOC32_GROUP_EXTEND _IOW('f', 7, unsigned int)
|
|
#define EXT4_IOC32_GROUP_ADD _IOW('f', 8, struct compat_ext4_new_group_input)
|
|
#define EXT4_IOC32_GETVERSION_OLD FS_IOC32_GETVERSION
|
|
#define EXT4_IOC32_SETVERSION_OLD FS_IOC32_SETVERSION
|
|
#endif
|
|
|
|
/*
|
|
* Returned by EXT4_IOC_GET_ES_CACHE as an additional possible flag.
|
|
* It indicates that the entry in extent status cache is for a hole.
|
|
*/
|
|
#define EXT4_FIEMAP_EXTENT_HOLE 0x08000000
|
|
|
|
/* Max physical block we can address w/o extents */
|
|
#define EXT4_MAX_BLOCK_FILE_PHYS 0xFFFFFFFF
|
|
|
|
/* Max logical block we can support */
|
|
#define EXT4_MAX_LOGICAL_BLOCK 0xFFFFFFFE
|
|
|
|
/*
|
|
* Structure of an inode on the disk
|
|
*/
|
|
struct ext4_inode {
|
|
__le16 i_mode; /* File mode */
|
|
__le16 i_uid; /* Low 16 bits of Owner Uid */
|
|
__le32 i_size_lo; /* Size in bytes */
|
|
__le32 i_atime; /* Access time */
|
|
__le32 i_ctime; /* Inode Change time */
|
|
__le32 i_mtime; /* Modification time */
|
|
__le32 i_dtime; /* Deletion Time */
|
|
__le16 i_gid; /* Low 16 bits of Group Id */
|
|
__le16 i_links_count; /* Links count */
|
|
__le32 i_blocks_lo; /* Blocks count */
|
|
__le32 i_flags; /* File flags */
|
|
union {
|
|
struct {
|
|
__le32 l_i_version;
|
|
} linux1;
|
|
struct {
|
|
__u32 h_i_translator;
|
|
} hurd1;
|
|
struct {
|
|
__u32 m_i_reserved1;
|
|
} masix1;
|
|
} osd1; /* OS dependent 1 */
|
|
__le32 i_block[EXT4_N_BLOCKS];/* Pointers to blocks */
|
|
__le32 i_generation; /* File version (for NFS) */
|
|
__le32 i_file_acl_lo; /* File ACL */
|
|
__le32 i_size_high;
|
|
__le32 i_obso_faddr; /* Obsoleted fragment address */
|
|
union {
|
|
struct {
|
|
__le16 l_i_blocks_high; /* were l_i_reserved1 */
|
|
__le16 l_i_file_acl_high;
|
|
__le16 l_i_uid_high; /* these 2 fields */
|
|
__le16 l_i_gid_high; /* were reserved2[0] */
|
|
__le16 l_i_checksum_lo;/* crc32c(uuid+inum+inode) LE */
|
|
__le16 l_i_reserved;
|
|
} linux2;
|
|
struct {
|
|
__le16 h_i_reserved1; /* Obsoleted fragment number/size which are removed in ext4 */
|
|
__u16 h_i_mode_high;
|
|
__u16 h_i_uid_high;
|
|
__u16 h_i_gid_high;
|
|
__u32 h_i_author;
|
|
} hurd2;
|
|
struct {
|
|
__le16 h_i_reserved1; /* Obsoleted fragment number/size which are removed in ext4 */
|
|
__le16 m_i_file_acl_high;
|
|
__u32 m_i_reserved2[2];
|
|
} masix2;
|
|
} osd2; /* OS dependent 2 */
|
|
__le16 i_extra_isize;
|
|
__le16 i_checksum_hi; /* crc32c(uuid+inum+inode) BE */
|
|
__le32 i_ctime_extra; /* extra Change time (nsec << 2 | epoch) */
|
|
__le32 i_mtime_extra; /* extra Modification time(nsec << 2 | epoch) */
|
|
__le32 i_atime_extra; /* extra Access time (nsec << 2 | epoch) */
|
|
__le32 i_crtime; /* File Creation time */
|
|
__le32 i_crtime_extra; /* extra FileCreationtime (nsec << 2 | epoch) */
|
|
__le32 i_version_hi; /* high 32 bits for 64-bit version */
|
|
__le32 i_projid; /* Project ID */
|
|
};
|
|
|
|
struct move_extent {
|
|
__u32 reserved; /* should be zero */
|
|
__u32 donor_fd; /* donor file descriptor */
|
|
__u64 orig_start; /* logical start offset in block for orig */
|
|
__u64 donor_start; /* logical start offset in block for donor */
|
|
__u64 len; /* block length to be moved */
|
|
__u64 moved_len; /* moved block length */
|
|
};
|
|
|
|
#define EXT4_EPOCH_BITS 2
|
|
#define EXT4_EPOCH_MASK ((1 << EXT4_EPOCH_BITS) - 1)
|
|
#define EXT4_NSEC_MASK (~0UL << EXT4_EPOCH_BITS)
|
|
|
|
/*
|
|
* Extended fields will fit into an inode if the filesystem was formatted
|
|
* with large inodes (-I 256 or larger) and there are not currently any EAs
|
|
* consuming all of the available space. For new inodes we always reserve
|
|
* enough space for the kernel's known extended fields, but for inodes
|
|
* created with an old kernel this might not have been the case. None of
|
|
* the extended inode fields is critical for correct filesystem operation.
|
|
* This macro checks if a certain field fits in the inode. Note that
|
|
* inode-size = GOOD_OLD_INODE_SIZE + i_extra_isize
|
|
*/
|
|
#define EXT4_FITS_IN_INODE(ext4_inode, einode, field) \
|
|
((offsetof(typeof(*ext4_inode), field) + \
|
|
sizeof((ext4_inode)->field)) \
|
|
<= (EXT4_GOOD_OLD_INODE_SIZE + \
|
|
(einode)->i_extra_isize)) \
|
|
|
|
/*
|
|
* We use an encoding that preserves the times for extra epoch "00":
|
|
*
|
|
* extra msb of adjust for signed
|
|
* epoch 32-bit 32-bit tv_sec to
|
|
* bits time decoded 64-bit tv_sec 64-bit tv_sec valid time range
|
|
* 0 0 1 -0x80000000..-0x00000001 0x000000000 1901-12-13..1969-12-31
|
|
* 0 0 0 0x000000000..0x07fffffff 0x000000000 1970-01-01..2038-01-19
|
|
* 0 1 1 0x080000000..0x0ffffffff 0x100000000 2038-01-19..2106-02-07
|
|
* 0 1 0 0x100000000..0x17fffffff 0x100000000 2106-02-07..2174-02-25
|
|
* 1 0 1 0x180000000..0x1ffffffff 0x200000000 2174-02-25..2242-03-16
|
|
* 1 0 0 0x200000000..0x27fffffff 0x200000000 2242-03-16..2310-04-04
|
|
* 1 1 1 0x280000000..0x2ffffffff 0x300000000 2310-04-04..2378-04-22
|
|
* 1 1 0 0x300000000..0x37fffffff 0x300000000 2378-04-22..2446-05-10
|
|
*
|
|
* Note that previous versions of the kernel on 64-bit systems would
|
|
* incorrectly use extra epoch bits 1,1 for dates between 1901 and
|
|
* 1970. e2fsck will correct this, assuming that it is run on the
|
|
* affected filesystem before 2242.
|
|
*/
|
|
|
|
static inline __le32 ext4_encode_extra_time(struct timespec64 *time)
|
|
{
|
|
u32 extra =((time->tv_sec - (s32)time->tv_sec) >> 32) & EXT4_EPOCH_MASK;
|
|
return cpu_to_le32(extra | (time->tv_nsec << EXT4_EPOCH_BITS));
|
|
}
|
|
|
|
static inline void ext4_decode_extra_time(struct timespec64 *time,
|
|
__le32 extra)
|
|
{
|
|
if (unlikely(extra & cpu_to_le32(EXT4_EPOCH_MASK)))
|
|
time->tv_sec += (u64)(le32_to_cpu(extra) & EXT4_EPOCH_MASK) << 32;
|
|
time->tv_nsec = (le32_to_cpu(extra) & EXT4_NSEC_MASK) >> EXT4_EPOCH_BITS;
|
|
}
|
|
|
|
#define EXT4_INODE_SET_XTIME(xtime, inode, raw_inode) \
|
|
do { \
|
|
if (EXT4_FITS_IN_INODE(raw_inode, EXT4_I(inode), xtime ## _extra)) {\
|
|
(raw_inode)->xtime = cpu_to_le32((inode)->xtime.tv_sec); \
|
|
(raw_inode)->xtime ## _extra = \
|
|
ext4_encode_extra_time(&(inode)->xtime); \
|
|
} \
|
|
else \
|
|
(raw_inode)->xtime = cpu_to_le32(clamp_t(int32_t, (inode)->xtime.tv_sec, S32_MIN, S32_MAX)); \
|
|
} while (0)
|
|
|
|
#define EXT4_EINODE_SET_XTIME(xtime, einode, raw_inode) \
|
|
do { \
|
|
if (EXT4_FITS_IN_INODE(raw_inode, einode, xtime)) \
|
|
(raw_inode)->xtime = cpu_to_le32((einode)->xtime.tv_sec); \
|
|
if (EXT4_FITS_IN_INODE(raw_inode, einode, xtime ## _extra)) \
|
|
(raw_inode)->xtime ## _extra = \
|
|
ext4_encode_extra_time(&(einode)->xtime); \
|
|
} while (0)
|
|
|
|
#define EXT4_INODE_GET_XTIME(xtime, inode, raw_inode) \
|
|
do { \
|
|
(inode)->xtime.tv_sec = (signed)le32_to_cpu((raw_inode)->xtime); \
|
|
if (EXT4_FITS_IN_INODE(raw_inode, EXT4_I(inode), xtime ## _extra)) { \
|
|
ext4_decode_extra_time(&(inode)->xtime, \
|
|
raw_inode->xtime ## _extra); \
|
|
} \
|
|
else \
|
|
(inode)->xtime.tv_nsec = 0; \
|
|
} while (0)
|
|
|
|
|
|
#define EXT4_EINODE_GET_XTIME(xtime, einode, raw_inode) \
|
|
do { \
|
|
if (EXT4_FITS_IN_INODE(raw_inode, einode, xtime)) \
|
|
(einode)->xtime.tv_sec = \
|
|
(signed)le32_to_cpu((raw_inode)->xtime); \
|
|
else \
|
|
(einode)->xtime.tv_sec = 0; \
|
|
if (EXT4_FITS_IN_INODE(raw_inode, einode, xtime ## _extra)) \
|
|
ext4_decode_extra_time(&(einode)->xtime, \
|
|
raw_inode->xtime ## _extra); \
|
|
else \
|
|
(einode)->xtime.tv_nsec = 0; \
|
|
} while (0)
|
|
|
|
#define i_disk_version osd1.linux1.l_i_version
|
|
|
|
#if defined(__KERNEL__) || defined(__linux__)
|
|
#define i_reserved1 osd1.linux1.l_i_reserved1
|
|
#define i_file_acl_high osd2.linux2.l_i_file_acl_high
|
|
#define i_blocks_high osd2.linux2.l_i_blocks_high
|
|
#define i_uid_low i_uid
|
|
#define i_gid_low i_gid
|
|
#define i_uid_high osd2.linux2.l_i_uid_high
|
|
#define i_gid_high osd2.linux2.l_i_gid_high
|
|
#define i_checksum_lo osd2.linux2.l_i_checksum_lo
|
|
|
|
#elif defined(__GNU__)
|
|
|
|
#define i_translator osd1.hurd1.h_i_translator
|
|
#define i_uid_high osd2.hurd2.h_i_uid_high
|
|
#define i_gid_high osd2.hurd2.h_i_gid_high
|
|
#define i_author osd2.hurd2.h_i_author
|
|
|
|
#elif defined(__masix__)
|
|
|
|
#define i_reserved1 osd1.masix1.m_i_reserved1
|
|
#define i_file_acl_high osd2.masix2.m_i_file_acl_high
|
|
#define i_reserved2 osd2.masix2.m_i_reserved2
|
|
|
|
#endif /* defined(__KERNEL__) || defined(__linux__) */
|
|
|
|
#include "extents_status.h"
|
|
#include "fast_commit.h"
|
|
|
|
/*
|
|
* Lock subclasses for i_data_sem in the ext4_inode_info structure.
|
|
*
|
|
* These are needed to avoid lockdep false positives when we need to
|
|
* allocate blocks to the quota inode during ext4_map_blocks(), while
|
|
* holding i_data_sem for a normal (non-quota) inode. Since we don't
|
|
* do quota tracking for the quota inode, this avoids deadlock (as
|
|
* well as infinite recursion, since it isn't turtles all the way
|
|
* down...)
|
|
*
|
|
* I_DATA_SEM_NORMAL - Used for most inodes
|
|
* I_DATA_SEM_OTHER - Used by move_inode.c for the second normal inode
|
|
* where the second inode has larger inode number
|
|
* than the first
|
|
* I_DATA_SEM_QUOTA - Used for quota inodes only
|
|
*/
|
|
enum {
|
|
I_DATA_SEM_NORMAL = 0,
|
|
I_DATA_SEM_OTHER,
|
|
I_DATA_SEM_QUOTA,
|
|
};
|
|
|
|
|
|
/*
|
|
* fourth extended file system inode data in memory
|
|
*/
|
|
struct ext4_inode_info {
|
|
__le32 i_data[15]; /* unconverted */
|
|
__u32 i_dtime;
|
|
ext4_fsblk_t i_file_acl;
|
|
|
|
/*
|
|
* i_block_group is the number of the block group which contains
|
|
* this file's inode. Constant across the lifetime of the inode,
|
|
* it is used for making block allocation decisions - we try to
|
|
* place a file's data blocks near its inode block, and new inodes
|
|
* near to their parent directory's inode.
|
|
*/
|
|
ext4_group_t i_block_group;
|
|
ext4_lblk_t i_dir_start_lookup;
|
|
#if (BITS_PER_LONG < 64)
|
|
unsigned long i_state_flags; /* Dynamic state flags */
|
|
#endif
|
|
unsigned long i_flags;
|
|
|
|
/*
|
|
* Extended attributes can be read independently of the main file
|
|
* data. Taking i_mutex even when reading would cause contention
|
|
* between readers of EAs and writers of regular file data, so
|
|
* instead we synchronize on xattr_sem when reading or changing
|
|
* EAs.
|
|
*/
|
|
struct rw_semaphore xattr_sem;
|
|
|
|
/*
|
|
* Inodes with EXT4_STATE_ORPHAN_FILE use i_orphan_idx. Otherwise
|
|
* i_orphan is used.
|
|
*/
|
|
union {
|
|
struct list_head i_orphan; /* unlinked but open inodes */
|
|
unsigned int i_orphan_idx; /* Index in orphan file */
|
|
};
|
|
|
|
/* Fast commit related info */
|
|
|
|
struct list_head i_fc_list; /*
|
|
* inodes that need fast commit
|
|
* protected by sbi->s_fc_lock.
|
|
*/
|
|
|
|
/* Start of lblk range that needs to be committed in this fast commit */
|
|
ext4_lblk_t i_fc_lblk_start;
|
|
|
|
/* End of lblk range that needs to be committed in this fast commit */
|
|
ext4_lblk_t i_fc_lblk_len;
|
|
|
|
/* Number of ongoing updates on this inode */
|
|
atomic_t i_fc_updates;
|
|
|
|
/* Fast commit wait queue for this inode */
|
|
wait_queue_head_t i_fc_wait;
|
|
|
|
/* Protect concurrent accesses on i_fc_lblk_start, i_fc_lblk_len */
|
|
struct mutex i_fc_lock;
|
|
|
|
/*
|
|
* i_disksize keeps track of what the inode size is ON DISK, not
|
|
* in memory. During truncate, i_size is set to the new size by
|
|
* the VFS prior to calling ext4_truncate(), but the filesystem won't
|
|
* set i_disksize to 0 until the truncate is actually under way.
|
|
*
|
|
* The intent is that i_disksize always represents the blocks which
|
|
* are used by this file. This allows recovery to restart truncate
|
|
* on orphans if we crash during truncate. We actually write i_disksize
|
|
* into the on-disk inode when writing inodes out, instead of i_size.
|
|
*
|
|
* The only time when i_disksize and i_size may be different is when
|
|
* a truncate is in progress. The only things which change i_disksize
|
|
* are ext4_get_block (growth) and ext4_truncate (shrinkth).
|
|
*/
|
|
loff_t i_disksize;
|
|
|
|
/*
|
|
* i_data_sem is for serialising ext4_truncate() against
|
|
* ext4_getblock(). In the 2.4 ext2 design, great chunks of inode's
|
|
* data tree are chopped off during truncate. We can't do that in
|
|
* ext4 because whenever we perform intermediate commits during
|
|
* truncate, the inode and all the metadata blocks *must* be in a
|
|
* consistent state which allows truncation of the orphans to restart
|
|
* during recovery. Hence we must fix the get_block-vs-truncate race
|
|
* by other means, so we have i_data_sem.
|
|
*/
|
|
struct rw_semaphore i_data_sem;
|
|
struct inode vfs_inode;
|
|
struct jbd2_inode *jinode;
|
|
|
|
spinlock_t i_raw_lock; /* protects updates to the raw inode */
|
|
|
|
/*
|
|
* File creation time. Its function is same as that of
|
|
* struct timespec64 i_{a,c,m}time in the generic inode.
|
|
*/
|
|
struct timespec64 i_crtime;
|
|
|
|
/* mballoc */
|
|
atomic_t i_prealloc_active;
|
|
struct list_head i_prealloc_list;
|
|
spinlock_t i_prealloc_lock;
|
|
|
|
/* extents status tree */
|
|
struct ext4_es_tree i_es_tree;
|
|
rwlock_t i_es_lock;
|
|
struct list_head i_es_list;
|
|
unsigned int i_es_all_nr; /* protected by i_es_lock */
|
|
unsigned int i_es_shk_nr; /* protected by i_es_lock */
|
|
ext4_lblk_t i_es_shrink_lblk; /* Offset where we start searching for
|
|
extents to shrink. Protected by
|
|
i_es_lock */
|
|
|
|
/* ialloc */
|
|
ext4_group_t i_last_alloc_group;
|
|
|
|
/* allocation reservation info for delalloc */
|
|
/* In case of bigalloc, this refer to clusters rather than blocks */
|
|
unsigned int i_reserved_data_blocks;
|
|
|
|
/* pending cluster reservations for bigalloc file systems */
|
|
struct ext4_pending_tree i_pending_tree;
|
|
|
|
/* on-disk additional length */
|
|
__u16 i_extra_isize;
|
|
|
|
/* Indicate the inline data space. */
|
|
u16 i_inline_off;
|
|
u16 i_inline_size;
|
|
|
|
#ifdef CONFIG_QUOTA
|
|
/* quota space reservation, managed internally by quota code */
|
|
qsize_t i_reserved_quota;
|
|
#endif
|
|
|
|
/* Lock protecting lists below */
|
|
spinlock_t i_completed_io_lock;
|
|
/*
|
|
* Completed IOs that need unwritten extents handling and have
|
|
* transaction reserved
|
|
*/
|
|
struct list_head i_rsv_conversion_list;
|
|
struct work_struct i_rsv_conversion_work;
|
|
atomic_t i_unwritten; /* Nr. of inflight conversions pending */
|
|
|
|
spinlock_t i_block_reservation_lock;
|
|
|
|
/*
|
|
* Transactions that contain inode's metadata needed to complete
|
|
* fsync and fdatasync, respectively.
|
|
*/
|
|
tid_t i_sync_tid;
|
|
tid_t i_datasync_tid;
|
|
|
|
#ifdef CONFIG_QUOTA
|
|
struct dquot *i_dquot[MAXQUOTAS];
|
|
#endif
|
|
|
|
/* Precomputed uuid+inum+igen checksum for seeding inode checksums */
|
|
__u32 i_csum_seed;
|
|
|
|
kprojid_t i_projid;
|
|
};
|
|
|
|
/*
|
|
* File system states
|
|
*/
|
|
#define EXT4_VALID_FS 0x0001 /* Unmounted cleanly */
|
|
#define EXT4_ERROR_FS 0x0002 /* Errors detected */
|
|
#define EXT4_ORPHAN_FS 0x0004 /* Orphans being recovered */
|
|
#define EXT4_FC_REPLAY 0x0020 /* Fast commit replay ongoing */
|
|
|
|
/*
|
|
* Misc. filesystem flags
|
|
*/
|
|
#define EXT2_FLAGS_SIGNED_HASH 0x0001 /* Signed dirhash in use */
|
|
#define EXT2_FLAGS_UNSIGNED_HASH 0x0002 /* Unsigned dirhash in use */
|
|
#define EXT2_FLAGS_TEST_FILESYS 0x0004 /* to test development code */
|
|
|
|
/*
|
|
* Mount flags set via mount options or defaults
|
|
*/
|
|
#define EXT4_MOUNT_NO_MBCACHE 0x00001 /* Do not use mbcache */
|
|
#define EXT4_MOUNT_GRPID 0x00004 /* Create files with directory's group */
|
|
#define EXT4_MOUNT_DEBUG 0x00008 /* Some debugging messages */
|
|
#define EXT4_MOUNT_ERRORS_CONT 0x00010 /* Continue on errors */
|
|
#define EXT4_MOUNT_ERRORS_RO 0x00020 /* Remount fs ro on errors */
|
|
#define EXT4_MOUNT_ERRORS_PANIC 0x00040 /* Panic on errors */
|
|
#define EXT4_MOUNT_ERRORS_MASK 0x00070
|
|
#define EXT4_MOUNT_MINIX_DF 0x00080 /* Mimics the Minix statfs */
|
|
#define EXT4_MOUNT_NOLOAD 0x00100 /* Don't use existing journal*/
|
|
#ifdef CONFIG_FS_DAX
|
|
#define EXT4_MOUNT_DAX_ALWAYS 0x00200 /* Direct Access */
|
|
#else
|
|
#define EXT4_MOUNT_DAX_ALWAYS 0
|
|
#endif
|
|
#define EXT4_MOUNT_DATA_FLAGS 0x00C00 /* Mode for data writes: */
|
|
#define EXT4_MOUNT_JOURNAL_DATA 0x00400 /* Write data to journal */
|
|
#define EXT4_MOUNT_ORDERED_DATA 0x00800 /* Flush data before commit */
|
|
#define EXT4_MOUNT_WRITEBACK_DATA 0x00C00 /* No data ordering */
|
|
#define EXT4_MOUNT_UPDATE_JOURNAL 0x01000 /* Update the journal format */
|
|
#define EXT4_MOUNT_NO_UID32 0x02000 /* Disable 32-bit UIDs */
|
|
#define EXT4_MOUNT_XATTR_USER 0x04000 /* Extended user attributes */
|
|
#define EXT4_MOUNT_POSIX_ACL 0x08000 /* POSIX Access Control Lists */
|
|
#define EXT4_MOUNT_NO_AUTO_DA_ALLOC 0x10000 /* No auto delalloc mapping */
|
|
#define EXT4_MOUNT_BARRIER 0x20000 /* Use block barriers */
|
|
#define EXT4_MOUNT_QUOTA 0x40000 /* Some quota option set */
|
|
#define EXT4_MOUNT_USRQUOTA 0x80000 /* "old" user quota,
|
|
* enable enforcement for hidden
|
|
* quota files */
|
|
#define EXT4_MOUNT_GRPQUOTA 0x100000 /* "old" group quota, enable
|
|
* enforcement for hidden quota
|
|
* files */
|
|
#define EXT4_MOUNT_PRJQUOTA 0x200000 /* Enable project quota
|
|
* enforcement */
|
|
#define EXT4_MOUNT_DIOREAD_NOLOCK 0x400000 /* Enable support for dio read nolocking */
|
|
#define EXT4_MOUNT_JOURNAL_CHECKSUM 0x800000 /* Journal checksums */
|
|
#define EXT4_MOUNT_JOURNAL_ASYNC_COMMIT 0x1000000 /* Journal Async Commit */
|
|
#define EXT4_MOUNT_WARN_ON_ERROR 0x2000000 /* Trigger WARN_ON on error */
|
|
#define EXT4_MOUNT_NO_PREFETCH_BLOCK_BITMAPS 0x4000000
|
|
#define EXT4_MOUNT_DELALLOC 0x8000000 /* Delalloc support */
|
|
#define EXT4_MOUNT_DATA_ERR_ABORT 0x10000000 /* Abort on file data write */
|
|
#define EXT4_MOUNT_BLOCK_VALIDITY 0x20000000 /* Block validity checking */
|
|
#define EXT4_MOUNT_DISCARD 0x40000000 /* Issue DISCARD requests */
|
|
#define EXT4_MOUNT_INIT_INODE_TABLE 0x80000000 /* Initialize uninitialized itables */
|
|
|
|
/*
|
|
* Mount flags set either automatically (could not be set by mount option)
|
|
* based on per file system feature or property or in special cases such as
|
|
* distinguishing between explicit mount option definition and default.
|
|
*/
|
|
#define EXT4_MOUNT2_EXPLICIT_DELALLOC 0x00000001 /* User explicitly
|
|
specified delalloc */
|
|
#define EXT4_MOUNT2_STD_GROUP_SIZE 0x00000002 /* We have standard group
|
|
size of blocksize * 8
|
|
blocks */
|
|
#define EXT4_MOUNT2_HURD_COMPAT 0x00000004 /* Support HURD-castrated
|
|
file systems */
|
|
#define EXT4_MOUNT2_EXPLICIT_JOURNAL_CHECKSUM 0x00000008 /* User explicitly
|
|
specified journal checksum */
|
|
|
|
#define EXT4_MOUNT2_JOURNAL_FAST_COMMIT 0x00000010 /* Journal fast commit */
|
|
#define EXT4_MOUNT2_DAX_NEVER 0x00000020 /* Do not allow Direct Access */
|
|
#define EXT4_MOUNT2_DAX_INODE 0x00000040 /* For printing options only */
|
|
#define EXT4_MOUNT2_MB_OPTIMIZE_SCAN 0x00000080 /* Optimize group
|
|
* scanning in mballoc
|
|
*/
|
|
|
|
#define clear_opt(sb, opt) EXT4_SB(sb)->s_mount_opt &= \
|
|
~EXT4_MOUNT_##opt
|
|
#define set_opt(sb, opt) EXT4_SB(sb)->s_mount_opt |= \
|
|
EXT4_MOUNT_##opt
|
|
#define test_opt(sb, opt) (EXT4_SB(sb)->s_mount_opt & \
|
|
EXT4_MOUNT_##opt)
|
|
|
|
#define clear_opt2(sb, opt) EXT4_SB(sb)->s_mount_opt2 &= \
|
|
~EXT4_MOUNT2_##opt
|
|
#define set_opt2(sb, opt) EXT4_SB(sb)->s_mount_opt2 |= \
|
|
EXT4_MOUNT2_##opt
|
|
#define test_opt2(sb, opt) (EXT4_SB(sb)->s_mount_opt2 & \
|
|
EXT4_MOUNT2_##opt)
|
|
|
|
#define ext4_test_and_set_bit __test_and_set_bit_le
|
|
#define ext4_set_bit __set_bit_le
|
|
#define ext4_set_bit_atomic ext2_set_bit_atomic
|
|
#define ext4_test_and_clear_bit __test_and_clear_bit_le
|
|
#define ext4_clear_bit __clear_bit_le
|
|
#define ext4_clear_bit_atomic ext2_clear_bit_atomic
|
|
#define ext4_test_bit test_bit_le
|
|
#define ext4_find_next_zero_bit find_next_zero_bit_le
|
|
#define ext4_find_next_bit find_next_bit_le
|
|
|
|
extern void ext4_set_bits(void *bm, int cur, int len);
|
|
|
|
/*
|
|
* Maximal mount counts between two filesystem checks
|
|
*/
|
|
#define EXT4_DFL_MAX_MNT_COUNT 20 /* Allow 20 mounts */
|
|
#define EXT4_DFL_CHECKINTERVAL 0 /* Don't use interval check */
|
|
|
|
/*
|
|
* Behaviour when detecting errors
|
|
*/
|
|
#define EXT4_ERRORS_CONTINUE 1 /* Continue execution */
|
|
#define EXT4_ERRORS_RO 2 /* Remount fs read-only */
|
|
#define EXT4_ERRORS_PANIC 3 /* Panic */
|
|
#define EXT4_ERRORS_DEFAULT EXT4_ERRORS_CONTINUE
|
|
|
|
/* Metadata checksum algorithm codes */
|
|
#define EXT4_CRC32C_CHKSUM 1
|
|
|
|
/*
|
|
* Structure of the super block
|
|
*/
|
|
struct ext4_super_block {
|
|
/*00*/ __le32 s_inodes_count; /* Inodes count */
|
|
__le32 s_blocks_count_lo; /* Blocks count */
|
|
__le32 s_r_blocks_count_lo; /* Reserved blocks count */
|
|
__le32 s_free_blocks_count_lo; /* Free blocks count */
|
|
/*10*/ __le32 s_free_inodes_count; /* Free inodes count */
|
|
__le32 s_first_data_block; /* First Data Block */
|
|
__le32 s_log_block_size; /* Block size */
|
|
__le32 s_log_cluster_size; /* Allocation cluster size */
|
|
/*20*/ __le32 s_blocks_per_group; /* # Blocks per group */
|
|
__le32 s_clusters_per_group; /* # Clusters per group */
|
|
__le32 s_inodes_per_group; /* # Inodes per group */
|
|
__le32 s_mtime; /* Mount time */
|
|
/*30*/ __le32 s_wtime; /* Write time */
|
|
__le16 s_mnt_count; /* Mount count */
|
|
__le16 s_max_mnt_count; /* Maximal mount count */
|
|
__le16 s_magic; /* Magic signature */
|
|
__le16 s_state; /* File system state */
|
|
__le16 s_errors; /* Behaviour when detecting errors */
|
|
__le16 s_minor_rev_level; /* minor revision level */
|
|
/*40*/ __le32 s_lastcheck; /* time of last check */
|
|
__le32 s_checkinterval; /* max. time between checks */
|
|
__le32 s_creator_os; /* OS */
|
|
__le32 s_rev_level; /* Revision level */
|
|
/*50*/ __le16 s_def_resuid; /* Default uid for reserved blocks */
|
|
__le16 s_def_resgid; /* Default gid for reserved blocks */
|
|
/*
|
|
* These fields are for EXT4_DYNAMIC_REV superblocks only.
|
|
*
|
|
* Note: the difference between the compatible feature set and
|
|
* the incompatible feature set is that if there is a bit set
|
|
* in the incompatible feature set that the kernel doesn't
|
|
* know about, it should refuse to mount the filesystem.
|
|
*
|
|
* e2fsck's requirements are more strict; if it doesn't know
|
|
* about a feature in either the compatible or incompatible
|
|
* feature set, it must abort and not try to meddle with
|
|
* things it doesn't understand...
|
|
*/
|
|
__le32 s_first_ino; /* First non-reserved inode */
|
|
__le16 s_inode_size; /* size of inode structure */
|
|
__le16 s_block_group_nr; /* block group # of this superblock */
|
|
__le32 s_feature_compat; /* compatible feature set */
|
|
/*60*/ __le32 s_feature_incompat; /* incompatible feature set */
|
|
__le32 s_feature_ro_compat; /* readonly-compatible feature set */
|
|
/*68*/ __u8 s_uuid[16]; /* 128-bit uuid for volume */
|
|
/*78*/ char s_volume_name[16]; /* volume name */
|
|
/*88*/ char s_last_mounted[64] __nonstring; /* directory where last mounted */
|
|
/*C8*/ __le32 s_algorithm_usage_bitmap; /* For compression */
|
|
/*
|
|
* Performance hints. Directory preallocation should only
|
|
* happen if the EXT4_FEATURE_COMPAT_DIR_PREALLOC flag is on.
|
|
*/
|
|
__u8 s_prealloc_blocks; /* Nr of blocks to try to preallocate*/
|
|
__u8 s_prealloc_dir_blocks; /* Nr to preallocate for dirs */
|
|
__le16 s_reserved_gdt_blocks; /* Per group desc for online growth */
|
|
/*
|
|
* Journaling support valid if EXT4_FEATURE_COMPAT_HAS_JOURNAL set.
|
|
*/
|
|
/*D0*/ __u8 s_journal_uuid[16]; /* uuid of journal superblock */
|
|
/*E0*/ __le32 s_journal_inum; /* inode number of journal file */
|
|
__le32 s_journal_dev; /* device number of journal file */
|
|
__le32 s_last_orphan; /* start of list of inodes to delete */
|
|
__le32 s_hash_seed[4]; /* HTREE hash seed */
|
|
__u8 s_def_hash_version; /* Default hash version to use */
|
|
__u8 s_jnl_backup_type;
|
|
__le16 s_desc_size; /* size of group descriptor */
|
|
/*100*/ __le32 s_default_mount_opts;
|
|
__le32 s_first_meta_bg; /* First metablock block group */
|
|
__le32 s_mkfs_time; /* When the filesystem was created */
|
|
__le32 s_jnl_blocks[17]; /* Backup of the journal inode */
|
|
/* 64bit support valid if EXT4_FEATURE_COMPAT_64BIT */
|
|
/*150*/ __le32 s_blocks_count_hi; /* Blocks count */
|
|
__le32 s_r_blocks_count_hi; /* Reserved blocks count */
|
|
__le32 s_free_blocks_count_hi; /* Free blocks count */
|
|
__le16 s_min_extra_isize; /* All inodes have at least # bytes */
|
|
__le16 s_want_extra_isize; /* New inodes should reserve # bytes */
|
|
__le32 s_flags; /* Miscellaneous flags */
|
|
__le16 s_raid_stride; /* RAID stride */
|
|
__le16 s_mmp_update_interval; /* # seconds to wait in MMP checking */
|
|
__le64 s_mmp_block; /* Block for multi-mount protection */
|
|
__le32 s_raid_stripe_width; /* blocks on all data disks (N*stride)*/
|
|
__u8 s_log_groups_per_flex; /* FLEX_BG group size */
|
|
__u8 s_checksum_type; /* metadata checksum algorithm used */
|
|
__u8 s_encryption_level; /* versioning level for encryption */
|
|
__u8 s_reserved_pad; /* Padding to next 32bits */
|
|
__le64 s_kbytes_written; /* nr of lifetime kilobytes written */
|
|
__le32 s_snapshot_inum; /* Inode number of active snapshot */
|
|
__le32 s_snapshot_id; /* sequential ID of active snapshot */
|
|
__le64 s_snapshot_r_blocks_count; /* reserved blocks for active
|
|
snapshot's future use */
|
|
__le32 s_snapshot_list; /* inode number of the head of the
|
|
on-disk snapshot list */
|
|
#define EXT4_S_ERR_START offsetof(struct ext4_super_block, s_error_count)
|
|
__le32 s_error_count; /* number of fs errors */
|
|
__le32 s_first_error_time; /* first time an error happened */
|
|
__le32 s_first_error_ino; /* inode involved in first error */
|
|
__le64 s_first_error_block; /* block involved of first error */
|
|
__u8 s_first_error_func[32] __nonstring; /* function where the error happened */
|
|
__le32 s_first_error_line; /* line number where error happened */
|
|
__le32 s_last_error_time; /* most recent time of an error */
|
|
__le32 s_last_error_ino; /* inode involved in last error */
|
|
__le32 s_last_error_line; /* line number where error happened */
|
|
__le64 s_last_error_block; /* block involved of last error */
|
|
__u8 s_last_error_func[32] __nonstring; /* function where the error happened */
|
|
#define EXT4_S_ERR_END offsetof(struct ext4_super_block, s_mount_opts)
|
|
__u8 s_mount_opts[64];
|
|
__le32 s_usr_quota_inum; /* inode for tracking user quota */
|
|
__le32 s_grp_quota_inum; /* inode for tracking group quota */
|
|
__le32 s_overhead_clusters; /* overhead blocks/clusters in fs */
|
|
__le32 s_backup_bgs[2]; /* groups with sparse_super2 SBs */
|
|
__u8 s_encrypt_algos[4]; /* Encryption algorithms in use */
|
|
__u8 s_encrypt_pw_salt[16]; /* Salt used for string2key algorithm */
|
|
__le32 s_lpf_ino; /* Location of the lost+found inode */
|
|
__le32 s_prj_quota_inum; /* inode for tracking project quota */
|
|
__le32 s_checksum_seed; /* crc32c(uuid) if csum_seed set */
|
|
__u8 s_wtime_hi;
|
|
__u8 s_mtime_hi;
|
|
__u8 s_mkfs_time_hi;
|
|
__u8 s_lastcheck_hi;
|
|
__u8 s_first_error_time_hi;
|
|
__u8 s_last_error_time_hi;
|
|
__u8 s_first_error_errcode;
|
|
__u8 s_last_error_errcode;
|
|
__le16 s_encoding; /* Filename charset encoding */
|
|
__le16 s_encoding_flags; /* Filename charset encoding flags */
|
|
__le32 s_orphan_file_inum; /* Inode for tracking orphan inodes */
|
|
__le32 s_reserved[94]; /* Padding to the end of the block */
|
|
__le32 s_checksum; /* crc32c(superblock) */
|
|
};
|
|
|
|
#define EXT4_S_ERR_LEN (EXT4_S_ERR_END - EXT4_S_ERR_START)
|
|
|
|
#ifdef __KERNEL__
|
|
|
|
/* Number of quota types we support */
|
|
#define EXT4_MAXQUOTAS 3
|
|
|
|
#define EXT4_ENC_UTF8_12_1 1
|
|
|
|
/* Types of ext4 journal triggers */
|
|
enum ext4_journal_trigger_type {
|
|
EXT4_JTR_ORPHAN_FILE,
|
|
EXT4_JTR_NONE /* This must be the last entry for indexing to work! */
|
|
};
|
|
|
|
#define EXT4_JOURNAL_TRIGGER_COUNT EXT4_JTR_NONE
|
|
|
|
struct ext4_journal_trigger {
|
|
struct jbd2_buffer_trigger_type tr_triggers;
|
|
struct super_block *sb;
|
|
};
|
|
|
|
static inline struct ext4_journal_trigger *EXT4_TRIGGER(
|
|
struct jbd2_buffer_trigger_type *trigger)
|
|
{
|
|
return container_of(trigger, struct ext4_journal_trigger, tr_triggers);
|
|
}
|
|
|
|
#define EXT4_ORPHAN_BLOCK_MAGIC 0x0b10ca04
|
|
|
|
/* Structure at the tail of orphan block */
|
|
struct ext4_orphan_block_tail {
|
|
__le32 ob_magic;
|
|
__le32 ob_checksum;
|
|
};
|
|
|
|
static inline int ext4_inodes_per_orphan_block(struct super_block *sb)
|
|
{
|
|
return (sb->s_blocksize - sizeof(struct ext4_orphan_block_tail)) /
|
|
sizeof(u32);
|
|
}
|
|
|
|
struct ext4_orphan_block {
|
|
atomic_t ob_free_entries; /* Number of free orphan entries in block */
|
|
struct buffer_head *ob_bh; /* Buffer for orphan block */
|
|
};
|
|
|
|
/*
|
|
* Info about orphan file.
|
|
*/
|
|
struct ext4_orphan_info {
|
|
int of_blocks; /* Number of orphan blocks in a file */
|
|
__u32 of_csum_seed; /* Checksum seed for orphan file */
|
|
struct ext4_orphan_block *of_binfo; /* Array with info about orphan
|
|
* file blocks */
|
|
};
|
|
|
|
/*
|
|
* fourth extended-fs super-block data in memory
|
|
*/
|
|
struct ext4_sb_info {
|
|
unsigned long s_desc_size; /* Size of a group descriptor in bytes */
|
|
unsigned long s_inodes_per_block;/* Number of inodes per block */
|
|
unsigned long s_blocks_per_group;/* Number of blocks in a group */
|
|
unsigned long s_clusters_per_group; /* Number of clusters in a group */
|
|
unsigned long s_inodes_per_group;/* Number of inodes in a group */
|
|
unsigned long s_itb_per_group; /* Number of inode table blocks per group */
|
|
unsigned long s_gdb_count; /* Number of group descriptor blocks */
|
|
unsigned long s_desc_per_block; /* Number of group descriptors per block */
|
|
ext4_group_t s_groups_count; /* Number of groups in the fs */
|
|
ext4_group_t s_blockfile_groups;/* Groups acceptable for non-extent files */
|
|
unsigned long s_overhead; /* # of fs overhead clusters */
|
|
unsigned int s_cluster_ratio; /* Number of blocks per cluster */
|
|
unsigned int s_cluster_bits; /* log2 of s_cluster_ratio */
|
|
loff_t s_bitmap_maxbytes; /* max bytes for bitmap files */
|
|
struct buffer_head * s_sbh; /* Buffer containing the super block */
|
|
struct ext4_super_block *s_es; /* Pointer to the super block in the buffer */
|
|
struct buffer_head * __rcu *s_group_desc;
|
|
unsigned int s_mount_opt;
|
|
unsigned int s_mount_opt2;
|
|
unsigned long s_mount_flags;
|
|
unsigned int s_def_mount_opt;
|
|
ext4_fsblk_t s_sb_block;
|
|
atomic64_t s_resv_clusters;
|
|
kuid_t s_resuid;
|
|
kgid_t s_resgid;
|
|
unsigned short s_mount_state;
|
|
unsigned short s_pad;
|
|
int s_addr_per_block_bits;
|
|
int s_desc_per_block_bits;
|
|
int s_inode_size;
|
|
int s_first_ino;
|
|
unsigned int s_inode_readahead_blks;
|
|
unsigned int s_inode_goal;
|
|
u32 s_hash_seed[4];
|
|
int s_def_hash_version;
|
|
int s_hash_unsigned; /* 3 if hash should be unsigned, 0 if not */
|
|
struct percpu_counter s_freeclusters_counter;
|
|
struct percpu_counter s_freeinodes_counter;
|
|
struct percpu_counter s_dirs_counter;
|
|
struct percpu_counter s_dirtyclusters_counter;
|
|
struct percpu_counter s_sra_exceeded_retry_limit;
|
|
struct blockgroup_lock *s_blockgroup_lock;
|
|
struct proc_dir_entry *s_proc;
|
|
struct kobject s_kobj;
|
|
struct completion s_kobj_unregister;
|
|
struct super_block *s_sb;
|
|
struct buffer_head *s_mmp_bh;
|
|
|
|
/* Journaling */
|
|
struct journal_s *s_journal;
|
|
unsigned long s_ext4_flags; /* Ext4 superblock flags */
|
|
struct mutex s_orphan_lock; /* Protects on disk list changes */
|
|
struct list_head s_orphan; /* List of orphaned inodes in on disk
|
|
list */
|
|
struct ext4_orphan_info s_orphan_info;
|
|
unsigned long s_commit_interval;
|
|
u32 s_max_batch_time;
|
|
u32 s_min_batch_time;
|
|
struct block_device *s_journal_bdev;
|
|
#ifdef CONFIG_QUOTA
|
|
/* Names of quota files with journalled quota */
|
|
char __rcu *s_qf_names[EXT4_MAXQUOTAS];
|
|
int s_jquota_fmt; /* Format of quota to use */
|
|
#endif
|
|
unsigned int s_want_extra_isize; /* New inodes should reserve # bytes */
|
|
struct ext4_system_blocks __rcu *s_system_blks;
|
|
|
|
#ifdef EXTENTS_STATS
|
|
/* ext4 extents stats */
|
|
unsigned long s_ext_min;
|
|
unsigned long s_ext_max;
|
|
unsigned long s_depth_max;
|
|
spinlock_t s_ext_stats_lock;
|
|
unsigned long s_ext_blocks;
|
|
unsigned long s_ext_extents;
|
|
#endif
|
|
|
|
/* for buddy allocator */
|
|
struct ext4_group_info ** __rcu *s_group_info;
|
|
struct inode *s_buddy_cache;
|
|
spinlock_t s_md_lock;
|
|
unsigned short *s_mb_offsets;
|
|
unsigned int *s_mb_maxs;
|
|
unsigned int s_group_info_size;
|
|
unsigned int s_mb_free_pending;
|
|
struct list_head s_freed_data_list; /* List of blocks to be freed
|
|
after commit completed */
|
|
struct list_head s_discard_list;
|
|
struct work_struct s_discard_work;
|
|
atomic_t s_retry_alloc_pending;
|
|
struct rb_root s_mb_avg_fragment_size_root;
|
|
rwlock_t s_mb_rb_lock;
|
|
struct list_head *s_mb_largest_free_orders;
|
|
rwlock_t *s_mb_largest_free_orders_locks;
|
|
|
|
/* tunables */
|
|
unsigned long s_stripe;
|
|
unsigned int s_mb_max_linear_groups;
|
|
unsigned int s_mb_stream_request;
|
|
unsigned int s_mb_max_to_scan;
|
|
unsigned int s_mb_min_to_scan;
|
|
unsigned int s_mb_stats;
|
|
unsigned int s_mb_order2_reqs;
|
|
unsigned int s_mb_group_prealloc;
|
|
unsigned int s_mb_max_inode_prealloc;
|
|
unsigned int s_max_dir_size_kb;
|
|
/* where last allocation was done - for stream allocation */
|
|
unsigned long s_mb_last_group;
|
|
unsigned long s_mb_last_start;
|
|
unsigned int s_mb_prefetch;
|
|
unsigned int s_mb_prefetch_limit;
|
|
|
|
/* stats for buddy allocator */
|
|
atomic_t s_bal_reqs; /* number of reqs with len > 1 */
|
|
atomic_t s_bal_success; /* we found long enough chunks */
|
|
atomic_t s_bal_allocated; /* in blocks */
|
|
atomic_t s_bal_ex_scanned; /* total extents scanned */
|
|
atomic_t s_bal_groups_scanned; /* number of groups scanned */
|
|
atomic_t s_bal_goals; /* goal hits */
|
|
atomic_t s_bal_breaks; /* too long searches */
|
|
atomic_t s_bal_2orders; /* 2^order hits */
|
|
atomic_t s_bal_cr0_bad_suggestions;
|
|
atomic_t s_bal_cr1_bad_suggestions;
|
|
atomic64_t s_bal_cX_groups_considered[4];
|
|
atomic64_t s_bal_cX_hits[4];
|
|
atomic64_t s_bal_cX_failed[4]; /* cX loop didn't find blocks */
|
|
atomic_t s_mb_buddies_generated; /* number of buddies generated */
|
|
atomic64_t s_mb_generation_time;
|
|
atomic_t s_mb_lost_chunks;
|
|
atomic_t s_mb_preallocated;
|
|
atomic_t s_mb_discarded;
|
|
atomic_t s_lock_busy;
|
|
|
|
/* locality groups */
|
|
struct ext4_locality_group __percpu *s_locality_groups;
|
|
|
|
/* for write statistics */
|
|
unsigned long s_sectors_written_start;
|
|
u64 s_kbytes_written;
|
|
|
|
/* the size of zero-out chunk */
|
|
unsigned int s_extent_max_zeroout_kb;
|
|
|
|
unsigned int s_log_groups_per_flex;
|
|
struct flex_groups * __rcu *s_flex_groups;
|
|
ext4_group_t s_flex_groups_allocated;
|
|
|
|
/* workqueue for reserved extent conversions (buffered io) */
|
|
struct workqueue_struct *rsv_conversion_wq;
|
|
|
|
/* timer for periodic error stats printing */
|
|
struct timer_list s_err_report;
|
|
|
|
/* Lazy inode table initialization info */
|
|
struct ext4_li_request *s_li_request;
|
|
/* Wait multiplier for lazy initialization thread */
|
|
unsigned int s_li_wait_mult;
|
|
|
|
/* Kernel thread for multiple mount protection */
|
|
struct task_struct *s_mmp_tsk;
|
|
|
|
/* record the last minlen when FITRIM is called. */
|
|
atomic_t s_last_trim_minblks;
|
|
|
|
/* Reference to checksum algorithm driver via cryptoapi */
|
|
struct crypto_shash *s_chksum_driver;
|
|
|
|
/* Precomputed FS UUID checksum for seeding other checksums */
|
|
__u32 s_csum_seed;
|
|
|
|
/* Reclaim extents from extent status tree */
|
|
struct shrinker s_es_shrinker;
|
|
struct list_head s_es_list; /* List of inodes with reclaimable extents */
|
|
long s_es_nr_inode;
|
|
struct ext4_es_stats s_es_stats;
|
|
struct mb_cache *s_ea_block_cache;
|
|
struct mb_cache *s_ea_inode_cache;
|
|
spinlock_t s_es_lock ____cacheline_aligned_in_smp;
|
|
|
|
/* Journal triggers for checksum computation */
|
|
struct ext4_journal_trigger s_journal_triggers[EXT4_JOURNAL_TRIGGER_COUNT];
|
|
|
|
/* Ratelimit ext4 messages. */
|
|
struct ratelimit_state s_err_ratelimit_state;
|
|
struct ratelimit_state s_warning_ratelimit_state;
|
|
struct ratelimit_state s_msg_ratelimit_state;
|
|
atomic_t s_warning_count;
|
|
atomic_t s_msg_count;
|
|
|
|
/* Encryption policy for '-o test_dummy_encryption' */
|
|
struct fscrypt_dummy_policy s_dummy_enc_policy;
|
|
|
|
/*
|
|
* Barrier between writepages ops and changing any inode's JOURNAL_DATA
|
|
* or EXTENTS flag.
|
|
*/
|
|
struct percpu_rw_semaphore s_writepages_rwsem;
|
|
struct dax_device *s_daxdev;
|
|
#ifdef CONFIG_EXT4_DEBUG
|
|
unsigned long s_simulate_fail;
|
|
#endif
|
|
/* Record the errseq of the backing block device */
|
|
errseq_t s_bdev_wb_err;
|
|
spinlock_t s_bdev_wb_lock;
|
|
|
|
/* Information about errors that happened during this mount */
|
|
spinlock_t s_error_lock;
|
|
int s_add_error_count;
|
|
int s_first_error_code;
|
|
__u32 s_first_error_line;
|
|
__u32 s_first_error_ino;
|
|
__u64 s_first_error_block;
|
|
const char *s_first_error_func;
|
|
time64_t s_first_error_time;
|
|
int s_last_error_code;
|
|
__u32 s_last_error_line;
|
|
__u32 s_last_error_ino;
|
|
__u64 s_last_error_block;
|
|
const char *s_last_error_func;
|
|
time64_t s_last_error_time;
|
|
/*
|
|
* If we are in a context where we cannot update error information in
|
|
* the on-disk superblock, we queue this work to do it.
|
|
*/
|
|
struct work_struct s_error_work;
|
|
|
|
/* Ext4 fast commit sub transaction ID */
|
|
atomic_t s_fc_subtid;
|
|
|
|
/*
|
|
* After commit starts, the main queue gets locked, and the further
|
|
* updates get added in the staging queue.
|
|
*/
|
|
#define FC_Q_MAIN 0
|
|
#define FC_Q_STAGING 1
|
|
struct list_head s_fc_q[2]; /* Inodes staged for fast commit
|
|
* that have data changes in them.
|
|
*/
|
|
struct list_head s_fc_dentry_q[2]; /* directory entry updates */
|
|
unsigned int s_fc_bytes;
|
|
/*
|
|
* Main fast commit lock. This lock protects accesses to the
|
|
* following fields:
|
|
* ei->i_fc_list, s_fc_dentry_q, s_fc_q, s_fc_bytes, s_fc_bh.
|
|
*/
|
|
spinlock_t s_fc_lock;
|
|
struct buffer_head *s_fc_bh;
|
|
struct ext4_fc_stats s_fc_stats;
|
|
tid_t s_fc_ineligible_tid;
|
|
#ifdef CONFIG_EXT4_DEBUG
|
|
int s_fc_debug_max_replay;
|
|
#endif
|
|
struct ext4_fc_replay_state s_fc_replay_state;
|
|
};
|
|
|
|
static inline struct ext4_sb_info *EXT4_SB(struct super_block *sb)
|
|
{
|
|
return sb->s_fs_info;
|
|
}
|
|
static inline struct ext4_inode_info *EXT4_I(struct inode *inode)
|
|
{
|
|
return container_of(inode, struct ext4_inode_info, vfs_inode);
|
|
}
|
|
|
|
static inline int ext4_valid_inum(struct super_block *sb, unsigned long ino)
|
|
{
|
|
return ino == EXT4_ROOT_INO ||
|
|
(ino >= EXT4_FIRST_INO(sb) &&
|
|
ino <= le32_to_cpu(EXT4_SB(sb)->s_es->s_inodes_count));
|
|
}
|
|
|
|
/*
|
|
* Returns: sbi->field[index]
|
|
* Used to access an array element from the following sbi fields which require
|
|
* rcu protection to avoid dereferencing an invalid pointer due to reassignment
|
|
* - s_group_desc
|
|
* - s_group_info
|
|
* - s_flex_group
|
|
*/
|
|
#define sbi_array_rcu_deref(sbi, field, index) \
|
|
({ \
|
|
typeof(*((sbi)->field)) _v; \
|
|
rcu_read_lock(); \
|
|
_v = ((typeof(_v)*)rcu_dereference((sbi)->field))[index]; \
|
|
rcu_read_unlock(); \
|
|
_v; \
|
|
})
|
|
|
|
/*
|
|
* run-time mount flags
|
|
*/
|
|
enum {
|
|
EXT4_MF_MNTDIR_SAMPLED,
|
|
EXT4_MF_FS_ABORTED, /* Fatal error detected */
|
|
EXT4_MF_FC_INELIGIBLE /* Fast commit ineligible */
|
|
};
|
|
|
|
static inline void ext4_set_mount_flag(struct super_block *sb, int bit)
|
|
{
|
|
set_bit(bit, &EXT4_SB(sb)->s_mount_flags);
|
|
}
|
|
|
|
static inline void ext4_clear_mount_flag(struct super_block *sb, int bit)
|
|
{
|
|
clear_bit(bit, &EXT4_SB(sb)->s_mount_flags);
|
|
}
|
|
|
|
static inline int ext4_test_mount_flag(struct super_block *sb, int bit)
|
|
{
|
|
return test_bit(bit, &EXT4_SB(sb)->s_mount_flags);
|
|
}
|
|
|
|
|
|
/*
|
|
* Simulate_fail codes
|
|
*/
|
|
#define EXT4_SIM_BBITMAP_EIO 1
|
|
#define EXT4_SIM_BBITMAP_CRC 2
|
|
#define EXT4_SIM_IBITMAP_EIO 3
|
|
#define EXT4_SIM_IBITMAP_CRC 4
|
|
#define EXT4_SIM_INODE_EIO 5
|
|
#define EXT4_SIM_INODE_CRC 6
|
|
#define EXT4_SIM_DIRBLOCK_EIO 7
|
|
#define EXT4_SIM_DIRBLOCK_CRC 8
|
|
|
|
static inline bool ext4_simulate_fail(struct super_block *sb,
|
|
unsigned long code)
|
|
{
|
|
#ifdef CONFIG_EXT4_DEBUG
|
|
struct ext4_sb_info *sbi = EXT4_SB(sb);
|
|
|
|
if (unlikely(sbi->s_simulate_fail == code)) {
|
|
sbi->s_simulate_fail = 0;
|
|
return true;
|
|
}
|
|
#endif
|
|
return false;
|
|
}
|
|
|
|
static inline void ext4_simulate_fail_bh(struct super_block *sb,
|
|
struct buffer_head *bh,
|
|
unsigned long code)
|
|
{
|
|
if (!IS_ERR(bh) && ext4_simulate_fail(sb, code))
|
|
clear_buffer_uptodate(bh);
|
|
}
|
|
|
|
/*
|
|
* Error number codes for s_{first,last}_error_errno
|
|
*
|
|
* Linux errno numbers are architecture specific, so we need to translate
|
|
* them into something which is architecture independent. We don't define
|
|
* codes for all errno's; just the ones which are most likely to be the cause
|
|
* of an ext4_error() call.
|
|
*/
|
|
#define EXT4_ERR_UNKNOWN 1
|
|
#define EXT4_ERR_EIO 2
|
|
#define EXT4_ERR_ENOMEM 3
|
|
#define EXT4_ERR_EFSBADCRC 4
|
|
#define EXT4_ERR_EFSCORRUPTED 5
|
|
#define EXT4_ERR_ENOSPC 6
|
|
#define EXT4_ERR_ENOKEY 7
|
|
#define EXT4_ERR_EROFS 8
|
|
#define EXT4_ERR_EFBIG 9
|
|
#define EXT4_ERR_EEXIST 10
|
|
#define EXT4_ERR_ERANGE 11
|
|
#define EXT4_ERR_EOVERFLOW 12
|
|
#define EXT4_ERR_EBUSY 13
|
|
#define EXT4_ERR_ENOTDIR 14
|
|
#define EXT4_ERR_ENOTEMPTY 15
|
|
#define EXT4_ERR_ESHUTDOWN 16
|
|
#define EXT4_ERR_EFAULT 17
|
|
|
|
/*
|
|
* Inode dynamic state flags
|
|
*/
|
|
enum {
|
|
EXT4_STATE_JDATA, /* journaled data exists */
|
|
EXT4_STATE_NEW, /* inode is newly created */
|
|
EXT4_STATE_XATTR, /* has in-inode xattrs */
|
|
EXT4_STATE_NO_EXPAND, /* No space for expansion */
|
|
EXT4_STATE_DA_ALLOC_CLOSE, /* Alloc DA blks on close */
|
|
EXT4_STATE_EXT_MIGRATE, /* Inode is migrating */
|
|
EXT4_STATE_NEWENTRY, /* File just added to dir */
|
|
EXT4_STATE_MAY_INLINE_DATA, /* may have in-inode data */
|
|
EXT4_STATE_EXT_PRECACHED, /* extents have been precached */
|
|
EXT4_STATE_LUSTRE_EA_INODE, /* Lustre-style ea_inode */
|
|
EXT4_STATE_VERITY_IN_PROGRESS, /* building fs-verity Merkle tree */
|
|
EXT4_STATE_FC_COMMITTING, /* Fast commit ongoing */
|
|
EXT4_STATE_ORPHAN_FILE, /* Inode orphaned in orphan file */
|
|
};
|
|
|
|
#define EXT4_INODE_BIT_FNS(name, field, offset) \
|
|
static inline int ext4_test_inode_##name(struct inode *inode, int bit) \
|
|
{ \
|
|
return test_bit(bit + (offset), &EXT4_I(inode)->i_##field); \
|
|
} \
|
|
static inline void ext4_set_inode_##name(struct inode *inode, int bit) \
|
|
{ \
|
|
set_bit(bit + (offset), &EXT4_I(inode)->i_##field); \
|
|
} \
|
|
static inline void ext4_clear_inode_##name(struct inode *inode, int bit) \
|
|
{ \
|
|
clear_bit(bit + (offset), &EXT4_I(inode)->i_##field); \
|
|
}
|
|
|
|
/* Add these declarations here only so that these functions can be
|
|
* found by name. Otherwise, they are very hard to locate. */
|
|
static inline int ext4_test_inode_flag(struct inode *inode, int bit);
|
|
static inline void ext4_set_inode_flag(struct inode *inode, int bit);
|
|
static inline void ext4_clear_inode_flag(struct inode *inode, int bit);
|
|
EXT4_INODE_BIT_FNS(flag, flags, 0)
|
|
|
|
/* Add these declarations here only so that these functions can be
|
|
* found by name. Otherwise, they are very hard to locate. */
|
|
static inline int ext4_test_inode_state(struct inode *inode, int bit);
|
|
static inline void ext4_set_inode_state(struct inode *inode, int bit);
|
|
static inline void ext4_clear_inode_state(struct inode *inode, int bit);
|
|
#if (BITS_PER_LONG < 64)
|
|
EXT4_INODE_BIT_FNS(state, state_flags, 0)
|
|
|
|
static inline void ext4_clear_state_flags(struct ext4_inode_info *ei)
|
|
{
|
|
(ei)->i_state_flags = 0;
|
|
}
|
|
#else
|
|
EXT4_INODE_BIT_FNS(state, flags, 32)
|
|
|
|
static inline void ext4_clear_state_flags(struct ext4_inode_info *ei)
|
|
{
|
|
/* We depend on the fact that callers will set i_flags */
|
|
}
|
|
#endif
|
|
#else
|
|
/* Assume that user mode programs are passing in an ext4fs superblock, not
|
|
* a kernel struct super_block. This will allow us to call the feature-test
|
|
* macros from user land. */
|
|
#define EXT4_SB(sb) (sb)
|
|
#endif
|
|
|
|
static inline bool ext4_verity_in_progress(struct inode *inode)
|
|
{
|
|
return IS_ENABLED(CONFIG_FS_VERITY) &&
|
|
ext4_test_inode_state(inode, EXT4_STATE_VERITY_IN_PROGRESS);
|
|
}
|
|
|
|
#define NEXT_ORPHAN(inode) EXT4_I(inode)->i_dtime
|
|
|
|
/*
|
|
* Codes for operating systems
|
|
*/
|
|
#define EXT4_OS_LINUX 0
|
|
#define EXT4_OS_HURD 1
|
|
#define EXT4_OS_MASIX 2
|
|
#define EXT4_OS_FREEBSD 3
|
|
#define EXT4_OS_LITES 4
|
|
|
|
/*
|
|
* Revision levels
|
|
*/
|
|
#define EXT4_GOOD_OLD_REV 0 /* The good old (original) format */
|
|
#define EXT4_DYNAMIC_REV 1 /* V2 format w/ dynamic inode sizes */
|
|
|
|
#define EXT4_MAX_SUPP_REV EXT4_DYNAMIC_REV
|
|
|
|
#define EXT4_GOOD_OLD_INODE_SIZE 128
|
|
|
|
#define EXT4_EXTRA_TIMESTAMP_MAX (((s64)1 << 34) - 1 + S32_MIN)
|
|
#define EXT4_NON_EXTRA_TIMESTAMP_MAX S32_MAX
|
|
#define EXT4_TIMESTAMP_MIN S32_MIN
|
|
|
|
/*
|
|
* Feature set definitions
|
|
*/
|
|
|
|
#define EXT4_FEATURE_COMPAT_DIR_PREALLOC 0x0001
|
|
#define EXT4_FEATURE_COMPAT_IMAGIC_INODES 0x0002
|
|
#define EXT4_FEATURE_COMPAT_HAS_JOURNAL 0x0004
|
|
#define EXT4_FEATURE_COMPAT_EXT_ATTR 0x0008
|
|
#define EXT4_FEATURE_COMPAT_RESIZE_INODE 0x0010
|
|
#define EXT4_FEATURE_COMPAT_DIR_INDEX 0x0020
|
|
#define EXT4_FEATURE_COMPAT_SPARSE_SUPER2 0x0200
|
|
/*
|
|
* The reason why "FAST_COMMIT" is a compat feature is that, FS becomes
|
|
* incompatible only if fast commit blocks are present in the FS. Since we
|
|
* clear the journal (and thus the fast commit blocks), we don't mark FS as
|
|
* incompatible. We also have a JBD2 incompat feature, which gets set when
|
|
* there are fast commit blocks present in the journal.
|
|
*/
|
|
#define EXT4_FEATURE_COMPAT_FAST_COMMIT 0x0400
|
|
#define EXT4_FEATURE_COMPAT_STABLE_INODES 0x0800
|
|
#define EXT4_FEATURE_COMPAT_ORPHAN_FILE 0x1000 /* Orphan file exists */
|
|
|
|
#define EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001
|
|
#define EXT4_FEATURE_RO_COMPAT_LARGE_FILE 0x0002
|
|
#define EXT4_FEATURE_RO_COMPAT_BTREE_DIR 0x0004
|
|
#define EXT4_FEATURE_RO_COMPAT_HUGE_FILE 0x0008
|
|
#define EXT4_FEATURE_RO_COMPAT_GDT_CSUM 0x0010
|
|
#define EXT4_FEATURE_RO_COMPAT_DIR_NLINK 0x0020
|
|
#define EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE 0x0040
|
|
#define EXT4_FEATURE_RO_COMPAT_QUOTA 0x0100
|
|
#define EXT4_FEATURE_RO_COMPAT_BIGALLOC 0x0200
|
|
/*
|
|
* METADATA_CSUM also enables group descriptor checksums (GDT_CSUM). When
|
|
* METADATA_CSUM is set, group descriptor checksums use the same algorithm as
|
|
* all other data structures' checksums. However, the METADATA_CSUM and
|
|
* GDT_CSUM bits are mutually exclusive.
|
|
*/
|
|
#define EXT4_FEATURE_RO_COMPAT_METADATA_CSUM 0x0400
|
|
#define EXT4_FEATURE_RO_COMPAT_READONLY 0x1000
|
|
#define EXT4_FEATURE_RO_COMPAT_PROJECT 0x2000
|
|
#define EXT4_FEATURE_RO_COMPAT_VERITY 0x8000
|
|
#define EXT4_FEATURE_RO_COMPAT_ORPHAN_PRESENT 0x10000 /* Orphan file may be
|
|
non-empty */
|
|
|
|
#define EXT4_FEATURE_INCOMPAT_COMPRESSION 0x0001
|
|
#define EXT4_FEATURE_INCOMPAT_FILETYPE 0x0002
|
|
#define EXT4_FEATURE_INCOMPAT_RECOVER 0x0004 /* Needs recovery */
|
|
#define EXT4_FEATURE_INCOMPAT_JOURNAL_DEV 0x0008 /* Journal device */
|
|
#define EXT4_FEATURE_INCOMPAT_META_BG 0x0010
|
|
#define EXT4_FEATURE_INCOMPAT_EXTENTS 0x0040 /* extents support */
|
|
#define EXT4_FEATURE_INCOMPAT_64BIT 0x0080
|
|
#define EXT4_FEATURE_INCOMPAT_MMP 0x0100
|
|
#define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200
|
|
#define EXT4_FEATURE_INCOMPAT_EA_INODE 0x0400 /* EA in inode */
|
|
#define EXT4_FEATURE_INCOMPAT_DIRDATA 0x1000 /* data in dirent */
|
|
#define EXT4_FEATURE_INCOMPAT_CSUM_SEED 0x2000
|
|
#define EXT4_FEATURE_INCOMPAT_LARGEDIR 0x4000 /* >2GB or 3-lvl htree */
|
|
#define EXT4_FEATURE_INCOMPAT_INLINE_DATA 0x8000 /* data in inode */
|
|
#define EXT4_FEATURE_INCOMPAT_ENCRYPT 0x10000
|
|
#define EXT4_FEATURE_INCOMPAT_CASEFOLD 0x20000
|
|
|
|
extern void ext4_update_dynamic_rev(struct super_block *sb);
|
|
|
|
#define EXT4_FEATURE_COMPAT_FUNCS(name, flagname) \
|
|
static inline bool ext4_has_feature_##name(struct super_block *sb) \
|
|
{ \
|
|
return ((EXT4_SB(sb)->s_es->s_feature_compat & \
|
|
cpu_to_le32(EXT4_FEATURE_COMPAT_##flagname)) != 0); \
|
|
} \
|
|
static inline void ext4_set_feature_##name(struct super_block *sb) \
|
|
{ \
|
|
ext4_update_dynamic_rev(sb); \
|
|
EXT4_SB(sb)->s_es->s_feature_compat |= \
|
|
cpu_to_le32(EXT4_FEATURE_COMPAT_##flagname); \
|
|
} \
|
|
static inline void ext4_clear_feature_##name(struct super_block *sb) \
|
|
{ \
|
|
EXT4_SB(sb)->s_es->s_feature_compat &= \
|
|
~cpu_to_le32(EXT4_FEATURE_COMPAT_##flagname); \
|
|
}
|
|
|
|
#define EXT4_FEATURE_RO_COMPAT_FUNCS(name, flagname) \
|
|
static inline bool ext4_has_feature_##name(struct super_block *sb) \
|
|
{ \
|
|
return ((EXT4_SB(sb)->s_es->s_feature_ro_compat & \
|
|
cpu_to_le32(EXT4_FEATURE_RO_COMPAT_##flagname)) != 0); \
|
|
} \
|
|
static inline void ext4_set_feature_##name(struct super_block *sb) \
|
|
{ \
|
|
ext4_update_dynamic_rev(sb); \
|
|
EXT4_SB(sb)->s_es->s_feature_ro_compat |= \
|
|
cpu_to_le32(EXT4_FEATURE_RO_COMPAT_##flagname); \
|
|
} \
|
|
static inline void ext4_clear_feature_##name(struct super_block *sb) \
|
|
{ \
|
|
EXT4_SB(sb)->s_es->s_feature_ro_compat &= \
|
|
~cpu_to_le32(EXT4_FEATURE_RO_COMPAT_##flagname); \
|
|
}
|
|
|
|
#define EXT4_FEATURE_INCOMPAT_FUNCS(name, flagname) \
|
|
static inline bool ext4_has_feature_##name(struct super_block *sb) \
|
|
{ \
|
|
return ((EXT4_SB(sb)->s_es->s_feature_incompat & \
|
|
cpu_to_le32(EXT4_FEATURE_INCOMPAT_##flagname)) != 0); \
|
|
} \
|
|
static inline void ext4_set_feature_##name(struct super_block *sb) \
|
|
{ \
|
|
ext4_update_dynamic_rev(sb); \
|
|
EXT4_SB(sb)->s_es->s_feature_incompat |= \
|
|
cpu_to_le32(EXT4_FEATURE_INCOMPAT_##flagname); \
|
|
} \
|
|
static inline void ext4_clear_feature_##name(struct super_block *sb) \
|
|
{ \
|
|
EXT4_SB(sb)->s_es->s_feature_incompat &= \
|
|
~cpu_to_le32(EXT4_FEATURE_INCOMPAT_##flagname); \
|
|
}
|
|
|
|
EXT4_FEATURE_COMPAT_FUNCS(dir_prealloc, DIR_PREALLOC)
|
|
EXT4_FEATURE_COMPAT_FUNCS(imagic_inodes, IMAGIC_INODES)
|
|
EXT4_FEATURE_COMPAT_FUNCS(journal, HAS_JOURNAL)
|
|
EXT4_FEATURE_COMPAT_FUNCS(xattr, EXT_ATTR)
|
|
EXT4_FEATURE_COMPAT_FUNCS(resize_inode, RESIZE_INODE)
|
|
EXT4_FEATURE_COMPAT_FUNCS(dir_index, DIR_INDEX)
|
|
EXT4_FEATURE_COMPAT_FUNCS(sparse_super2, SPARSE_SUPER2)
|
|
EXT4_FEATURE_COMPAT_FUNCS(fast_commit, FAST_COMMIT)
|
|
EXT4_FEATURE_COMPAT_FUNCS(stable_inodes, STABLE_INODES)
|
|
EXT4_FEATURE_COMPAT_FUNCS(orphan_file, ORPHAN_FILE)
|
|
|
|
EXT4_FEATURE_RO_COMPAT_FUNCS(sparse_super, SPARSE_SUPER)
|
|
EXT4_FEATURE_RO_COMPAT_FUNCS(large_file, LARGE_FILE)
|
|
EXT4_FEATURE_RO_COMPAT_FUNCS(btree_dir, BTREE_DIR)
|
|
EXT4_FEATURE_RO_COMPAT_FUNCS(huge_file, HUGE_FILE)
|
|
EXT4_FEATURE_RO_COMPAT_FUNCS(gdt_csum, GDT_CSUM)
|
|
EXT4_FEATURE_RO_COMPAT_FUNCS(dir_nlink, DIR_NLINK)
|
|
EXT4_FEATURE_RO_COMPAT_FUNCS(extra_isize, EXTRA_ISIZE)
|
|
EXT4_FEATURE_RO_COMPAT_FUNCS(quota, QUOTA)
|
|
EXT4_FEATURE_RO_COMPAT_FUNCS(bigalloc, BIGALLOC)
|
|
EXT4_FEATURE_RO_COMPAT_FUNCS(metadata_csum, METADATA_CSUM)
|
|
EXT4_FEATURE_RO_COMPAT_FUNCS(readonly, READONLY)
|
|
EXT4_FEATURE_RO_COMPAT_FUNCS(project, PROJECT)
|
|
EXT4_FEATURE_RO_COMPAT_FUNCS(verity, VERITY)
|
|
EXT4_FEATURE_RO_COMPAT_FUNCS(orphan_present, ORPHAN_PRESENT)
|
|
|
|
EXT4_FEATURE_INCOMPAT_FUNCS(compression, COMPRESSION)
|
|
EXT4_FEATURE_INCOMPAT_FUNCS(filetype, FILETYPE)
|
|
EXT4_FEATURE_INCOMPAT_FUNCS(journal_needs_recovery, RECOVER)
|
|
EXT4_FEATURE_INCOMPAT_FUNCS(journal_dev, JOURNAL_DEV)
|
|
EXT4_FEATURE_INCOMPAT_FUNCS(meta_bg, META_BG)
|
|
EXT4_FEATURE_INCOMPAT_FUNCS(extents, EXTENTS)
|
|
EXT4_FEATURE_INCOMPAT_FUNCS(64bit, 64BIT)
|
|
EXT4_FEATURE_INCOMPAT_FUNCS(mmp, MMP)
|
|
EXT4_FEATURE_INCOMPAT_FUNCS(flex_bg, FLEX_BG)
|
|
EXT4_FEATURE_INCOMPAT_FUNCS(ea_inode, EA_INODE)
|
|
EXT4_FEATURE_INCOMPAT_FUNCS(dirdata, DIRDATA)
|
|
EXT4_FEATURE_INCOMPAT_FUNCS(csum_seed, CSUM_SEED)
|
|
EXT4_FEATURE_INCOMPAT_FUNCS(largedir, LARGEDIR)
|
|
EXT4_FEATURE_INCOMPAT_FUNCS(inline_data, INLINE_DATA)
|
|
EXT4_FEATURE_INCOMPAT_FUNCS(encrypt, ENCRYPT)
|
|
EXT4_FEATURE_INCOMPAT_FUNCS(casefold, CASEFOLD)
|
|
|
|
#define EXT2_FEATURE_COMPAT_SUPP EXT4_FEATURE_COMPAT_EXT_ATTR
|
|
#define EXT2_FEATURE_INCOMPAT_SUPP (EXT4_FEATURE_INCOMPAT_FILETYPE| \
|
|
EXT4_FEATURE_INCOMPAT_META_BG)
|
|
#define EXT2_FEATURE_RO_COMPAT_SUPP (EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER| \
|
|
EXT4_FEATURE_RO_COMPAT_LARGE_FILE| \
|
|
EXT4_FEATURE_RO_COMPAT_BTREE_DIR)
|
|
|
|
#define EXT3_FEATURE_COMPAT_SUPP EXT4_FEATURE_COMPAT_EXT_ATTR
|
|
#define EXT3_FEATURE_INCOMPAT_SUPP (EXT4_FEATURE_INCOMPAT_FILETYPE| \
|
|
EXT4_FEATURE_INCOMPAT_RECOVER| \
|
|
EXT4_FEATURE_INCOMPAT_META_BG)
|
|
#define EXT3_FEATURE_RO_COMPAT_SUPP (EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER| \
|
|
EXT4_FEATURE_RO_COMPAT_LARGE_FILE| \
|
|
EXT4_FEATURE_RO_COMPAT_BTREE_DIR)
|
|
|
|
#define EXT4_FEATURE_COMPAT_SUPP (EXT4_FEATURE_COMPAT_EXT_ATTR| \
|
|
EXT4_FEATURE_COMPAT_ORPHAN_FILE)
|
|
#define EXT4_FEATURE_INCOMPAT_SUPP (EXT4_FEATURE_INCOMPAT_FILETYPE| \
|
|
EXT4_FEATURE_INCOMPAT_RECOVER| \
|
|
EXT4_FEATURE_INCOMPAT_META_BG| \
|
|
EXT4_FEATURE_INCOMPAT_EXTENTS| \
|
|
EXT4_FEATURE_INCOMPAT_64BIT| \
|
|
EXT4_FEATURE_INCOMPAT_FLEX_BG| \
|
|
EXT4_FEATURE_INCOMPAT_EA_INODE| \
|
|
EXT4_FEATURE_INCOMPAT_MMP | \
|
|
EXT4_FEATURE_INCOMPAT_INLINE_DATA | \
|
|
EXT4_FEATURE_INCOMPAT_ENCRYPT | \
|
|
EXT4_FEATURE_INCOMPAT_CASEFOLD | \
|
|
EXT4_FEATURE_INCOMPAT_CSUM_SEED | \
|
|
EXT4_FEATURE_INCOMPAT_LARGEDIR)
|
|
#define EXT4_FEATURE_RO_COMPAT_SUPP (EXT4_FEATURE_RO_COMPAT_SPARSE_SUPER| \
|
|
EXT4_FEATURE_RO_COMPAT_LARGE_FILE| \
|
|
EXT4_FEATURE_RO_COMPAT_GDT_CSUM| \
|
|
EXT4_FEATURE_RO_COMPAT_DIR_NLINK | \
|
|
EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE | \
|
|
EXT4_FEATURE_RO_COMPAT_BTREE_DIR |\
|
|
EXT4_FEATURE_RO_COMPAT_HUGE_FILE |\
|
|
EXT4_FEATURE_RO_COMPAT_BIGALLOC |\
|
|
EXT4_FEATURE_RO_COMPAT_METADATA_CSUM|\
|
|
EXT4_FEATURE_RO_COMPAT_QUOTA |\
|
|
EXT4_FEATURE_RO_COMPAT_PROJECT |\
|
|
EXT4_FEATURE_RO_COMPAT_VERITY |\
|
|
EXT4_FEATURE_RO_COMPAT_ORPHAN_PRESENT)
|
|
|
|
#define EXTN_FEATURE_FUNCS(ver) \
|
|
static inline bool ext4_has_unknown_ext##ver##_compat_features(struct super_block *sb) \
|
|
{ \
|
|
return ((EXT4_SB(sb)->s_es->s_feature_compat & \
|
|
cpu_to_le32(~EXT##ver##_FEATURE_COMPAT_SUPP)) != 0); \
|
|
} \
|
|
static inline bool ext4_has_unknown_ext##ver##_ro_compat_features(struct super_block *sb) \
|
|
{ \
|
|
return ((EXT4_SB(sb)->s_es->s_feature_ro_compat & \
|
|
cpu_to_le32(~EXT##ver##_FEATURE_RO_COMPAT_SUPP)) != 0); \
|
|
} \
|
|
static inline bool ext4_has_unknown_ext##ver##_incompat_features(struct super_block *sb) \
|
|
{ \
|
|
return ((EXT4_SB(sb)->s_es->s_feature_incompat & \
|
|
cpu_to_le32(~EXT##ver##_FEATURE_INCOMPAT_SUPP)) != 0); \
|
|
}
|
|
|
|
EXTN_FEATURE_FUNCS(2)
|
|
EXTN_FEATURE_FUNCS(3)
|
|
EXTN_FEATURE_FUNCS(4)
|
|
|
|
static inline bool ext4_has_compat_features(struct super_block *sb)
|
|
{
|
|
return (EXT4_SB(sb)->s_es->s_feature_compat != 0);
|
|
}
|
|
static inline bool ext4_has_ro_compat_features(struct super_block *sb)
|
|
{
|
|
return (EXT4_SB(sb)->s_es->s_feature_ro_compat != 0);
|
|
}
|
|
static inline bool ext4_has_incompat_features(struct super_block *sb)
|
|
{
|
|
return (EXT4_SB(sb)->s_es->s_feature_incompat != 0);
|
|
}
|
|
|
|
extern int ext4_feature_set_ok(struct super_block *sb, int readonly);
|
|
|
|
/*
|
|
* Superblock flags
|
|
*/
|
|
#define EXT4_FLAGS_RESIZING 0
|
|
#define EXT4_FLAGS_SHUTDOWN 1
|
|
#define EXT4_FLAGS_BDEV_IS_DAX 2
|
|
|
|
static inline int ext4_forced_shutdown(struct ext4_sb_info *sbi)
|
|
{
|
|
return test_bit(EXT4_FLAGS_SHUTDOWN, &sbi->s_ext4_flags);
|
|
}
|
|
|
|
/*
|
|
* Default values for user and/or group using reserved blocks
|
|
*/
|
|
#define EXT4_DEF_RESUID 0
|
|
#define EXT4_DEF_RESGID 0
|
|
|
|
/*
|
|
* Default project ID
|
|
*/
|
|
#define EXT4_DEF_PROJID 0
|
|
|
|
#define EXT4_DEF_INODE_READAHEAD_BLKS 32
|
|
|
|
/*
|
|
* Default mount options
|
|
*/
|
|
#define EXT4_DEFM_DEBUG 0x0001
|
|
#define EXT4_DEFM_BSDGROUPS 0x0002
|
|
#define EXT4_DEFM_XATTR_USER 0x0004
|
|
#define EXT4_DEFM_ACL 0x0008
|
|
#define EXT4_DEFM_UID16 0x0010
|
|
#define EXT4_DEFM_JMODE 0x0060
|
|
#define EXT4_DEFM_JMODE_DATA 0x0020
|
|
#define EXT4_DEFM_JMODE_ORDERED 0x0040
|
|
#define EXT4_DEFM_JMODE_WBACK 0x0060
|
|
#define EXT4_DEFM_NOBARRIER 0x0100
|
|
#define EXT4_DEFM_BLOCK_VALIDITY 0x0200
|
|
#define EXT4_DEFM_DISCARD 0x0400
|
|
#define EXT4_DEFM_NODELALLOC 0x0800
|
|
|
|
/*
|
|
* Default journal batch times
|
|
*/
|
|
#define EXT4_DEF_MIN_BATCH_TIME 0
|
|
#define EXT4_DEF_MAX_BATCH_TIME 15000 /* 15ms */
|
|
|
|
/*
|
|
* Minimum number of groups in a flexgroup before we separate out
|
|
* directories into the first block group of a flexgroup
|
|
*/
|
|
#define EXT4_FLEX_SIZE_DIR_ALLOC_SCHEME 4
|
|
|
|
/*
|
|
* Structure of a directory entry
|
|
*/
|
|
#define EXT4_NAME_LEN 255
|
|
/*
|
|
* Base length of the ext4 directory entry excluding the name length
|
|
*/
|
|
#define EXT4_BASE_DIR_LEN (sizeof(struct ext4_dir_entry_2) - EXT4_NAME_LEN)
|
|
|
|
struct ext4_dir_entry {
|
|
__le32 inode; /* Inode number */
|
|
__le16 rec_len; /* Directory entry length */
|
|
__le16 name_len; /* Name length */
|
|
char name[EXT4_NAME_LEN]; /* File name */
|
|
};
|
|
|
|
|
|
/*
|
|
* Encrypted Casefolded entries require saving the hash on disk. This structure
|
|
* followed ext4_dir_entry_2's name[name_len] at the next 4 byte aligned
|
|
* boundary.
|
|
*/
|
|
struct ext4_dir_entry_hash {
|
|
__le32 hash;
|
|
__le32 minor_hash;
|
|
};
|
|
|
|
/*
|
|
* The new version of the directory entry. Since EXT4 structures are
|
|
* stored in intel byte order, and the name_len field could never be
|
|
* bigger than 255 chars, it's safe to reclaim the extra byte for the
|
|
* file_type field.
|
|
*/
|
|
struct ext4_dir_entry_2 {
|
|
__le32 inode; /* Inode number */
|
|
__le16 rec_len; /* Directory entry length */
|
|
__u8 name_len; /* Name length */
|
|
__u8 file_type; /* See file type macros EXT4_FT_* below */
|
|
char name[EXT4_NAME_LEN]; /* File name */
|
|
};
|
|
|
|
/*
|
|
* Access the hashes at the end of ext4_dir_entry_2
|
|
*/
|
|
#define EXT4_DIRENT_HASHES(entry) \
|
|
((struct ext4_dir_entry_hash *) \
|
|
(((void *)(entry)) + \
|
|
((8 + (entry)->name_len + EXT4_DIR_ROUND) & ~EXT4_DIR_ROUND)))
|
|
#define EXT4_DIRENT_HASH(entry) le32_to_cpu(EXT4_DIRENT_HASHES(de)->hash)
|
|
#define EXT4_DIRENT_MINOR_HASH(entry) \
|
|
le32_to_cpu(EXT4_DIRENT_HASHES(de)->minor_hash)
|
|
|
|
static inline bool ext4_hash_in_dirent(const struct inode *inode)
|
|
{
|
|
return IS_CASEFOLDED(inode) && IS_ENCRYPTED(inode);
|
|
}
|
|
|
|
/*
|
|
* This is a bogus directory entry at the end of each leaf block that
|
|
* records checksums.
|
|
*/
|
|
struct ext4_dir_entry_tail {
|
|
__le32 det_reserved_zero1; /* Pretend to be unused */
|
|
__le16 det_rec_len; /* 12 */
|
|
__u8 det_reserved_zero2; /* Zero name length */
|
|
__u8 det_reserved_ft; /* 0xDE, fake file type */
|
|
__le32 det_checksum; /* crc32c(uuid+inum+dirblock) */
|
|
};
|
|
|
|
#define EXT4_DIRENT_TAIL(block, blocksize) \
|
|
((struct ext4_dir_entry_tail *)(((void *)(block)) + \
|
|
((blocksize) - \
|
|
sizeof(struct ext4_dir_entry_tail))))
|
|
|
|
/*
|
|
* Ext4 directory file types. Only the low 3 bits are used. The
|
|
* other bits are reserved for now.
|
|
*/
|
|
#define EXT4_FT_UNKNOWN 0
|
|
#define EXT4_FT_REG_FILE 1
|
|
#define EXT4_FT_DIR 2
|
|
#define EXT4_FT_CHRDEV 3
|
|
#define EXT4_FT_BLKDEV 4
|
|
#define EXT4_FT_FIFO 5
|
|
#define EXT4_FT_SOCK 6
|
|
#define EXT4_FT_SYMLINK 7
|
|
|
|
#define EXT4_FT_MAX 8
|
|
|
|
#define EXT4_FT_DIR_CSUM 0xDE
|
|
|
|
/*
|
|
* EXT4_DIR_PAD defines the directory entries boundaries
|
|
*
|
|
* NOTE: It must be a multiple of 4
|
|
*/
|
|
#define EXT4_DIR_PAD 4
|
|
#define EXT4_DIR_ROUND (EXT4_DIR_PAD - 1)
|
|
#define EXT4_MAX_REC_LEN ((1<<16)-1)
|
|
|
|
/*
|
|
* The rec_len is dependent on the type of directory. Directories that are
|
|
* casefolded and encrypted need to store the hash as well, so we add room for
|
|
* ext4_extended_dir_entry_2. For all entries related to '.' or '..' you should
|
|
* pass NULL for dir, as those entries do not use the extra fields.
|
|
*/
|
|
static inline unsigned int ext4_dir_rec_len(__u8 name_len,
|
|
const struct inode *dir)
|
|
{
|
|
int rec_len = (name_len + 8 + EXT4_DIR_ROUND);
|
|
|
|
if (dir && ext4_hash_in_dirent(dir))
|
|
rec_len += sizeof(struct ext4_dir_entry_hash);
|
|
return (rec_len & ~EXT4_DIR_ROUND);
|
|
}
|
|
|
|
/*
|
|
* If we ever get support for fs block sizes > page_size, we'll need
|
|
* to remove the #if statements in the next two functions...
|
|
*/
|
|
static inline unsigned int
|
|
ext4_rec_len_from_disk(__le16 dlen, unsigned blocksize)
|
|
{
|
|
unsigned len = le16_to_cpu(dlen);
|
|
|
|
#if (PAGE_SIZE >= 65536)
|
|
if (len == EXT4_MAX_REC_LEN || len == 0)
|
|
return blocksize;
|
|
return (len & 65532) | ((len & 3) << 16);
|
|
#else
|
|
return len;
|
|
#endif
|
|
}
|
|
|
|
static inline __le16 ext4_rec_len_to_disk(unsigned len, unsigned blocksize)
|
|
{
|
|
if ((len > blocksize) || (blocksize > (1 << 18)) || (len & 3))
|
|
BUG();
|
|
#if (PAGE_SIZE >= 65536)
|
|
if (len < 65536)
|
|
return cpu_to_le16(len);
|
|
if (len == blocksize) {
|
|
if (blocksize == 65536)
|
|
return cpu_to_le16(EXT4_MAX_REC_LEN);
|
|
else
|
|
return cpu_to_le16(0);
|
|
}
|
|
return cpu_to_le16((len & 65532) | ((len >> 16) & 3));
|
|
#else
|
|
return cpu_to_le16(len);
|
|
#endif
|
|
}
|
|
|
|
/*
|
|
* Hash Tree Directory indexing
|
|
* (c) Daniel Phillips, 2001
|
|
*/
|
|
|
|
#define is_dx(dir) (ext4_has_feature_dir_index((dir)->i_sb) && \
|
|
ext4_test_inode_flag((dir), EXT4_INODE_INDEX))
|
|
#define EXT4_DIR_LINK_MAX(dir) unlikely((dir)->i_nlink >= EXT4_LINK_MAX && \
|
|
!(ext4_has_feature_dir_nlink((dir)->i_sb) && is_dx(dir)))
|
|
#define EXT4_DIR_LINK_EMPTY(dir) ((dir)->i_nlink == 2 || (dir)->i_nlink == 1)
|
|
|
|
/* Legal values for the dx_root hash_version field: */
|
|
|
|
#define DX_HASH_LEGACY 0
|
|
#define DX_HASH_HALF_MD4 1
|
|
#define DX_HASH_TEA 2
|
|
#define DX_HASH_LEGACY_UNSIGNED 3
|
|
#define DX_HASH_HALF_MD4_UNSIGNED 4
|
|
#define DX_HASH_TEA_UNSIGNED 5
|
|
#define DX_HASH_SIPHASH 6
|
|
|
|
static inline u32 ext4_chksum(struct ext4_sb_info *sbi, u32 crc,
|
|
const void *address, unsigned int length)
|
|
{
|
|
struct {
|
|
struct shash_desc shash;
|
|
char ctx[4];
|
|
} desc;
|
|
|
|
BUG_ON(crypto_shash_descsize(sbi->s_chksum_driver)!=sizeof(desc.ctx));
|
|
|
|
desc.shash.tfm = sbi->s_chksum_driver;
|
|
*(u32 *)desc.ctx = crc;
|
|
|
|
BUG_ON(crypto_shash_update(&desc.shash, address, length));
|
|
|
|
return *(u32 *)desc.ctx;
|
|
}
|
|
|
|
#ifdef __KERNEL__
|
|
|
|
/* hash info structure used by the directory hash */
|
|
struct dx_hash_info
|
|
{
|
|
u32 hash;
|
|
u32 minor_hash;
|
|
int hash_version;
|
|
u32 *seed;
|
|
};
|
|
|
|
|
|
/* 32 and 64 bit signed EOF for dx directories */
|
|
#define EXT4_HTREE_EOF_32BIT ((1UL << (32 - 1)) - 1)
|
|
#define EXT4_HTREE_EOF_64BIT ((1ULL << (64 - 1)) - 1)
|
|
|
|
|
|
/*
|
|
* Control parameters used by ext4_htree_next_block
|
|
*/
|
|
#define HASH_NB_ALWAYS 1
|
|
|
|
struct ext4_filename {
|
|
const struct qstr *usr_fname;
|
|
struct fscrypt_str disk_name;
|
|
struct dx_hash_info hinfo;
|
|
#ifdef CONFIG_FS_ENCRYPTION
|
|
struct fscrypt_str crypto_buf;
|
|
#endif
|
|
#ifdef CONFIG_UNICODE
|
|
struct fscrypt_str cf_name;
|
|
#endif
|
|
};
|
|
|
|
#define fname_name(p) ((p)->disk_name.name)
|
|
#define fname_usr_name(p) ((p)->usr_fname->name)
|
|
#define fname_len(p) ((p)->disk_name.len)
|
|
|
|
/*
|
|
* Describe an inode's exact location on disk and in memory
|
|
*/
|
|
struct ext4_iloc
|
|
{
|
|
struct buffer_head *bh;
|
|
unsigned long offset;
|
|
ext4_group_t block_group;
|
|
};
|
|
|
|
static inline struct ext4_inode *ext4_raw_inode(struct ext4_iloc *iloc)
|
|
{
|
|
return (struct ext4_inode *) (iloc->bh->b_data + iloc->offset);
|
|
}
|
|
|
|
static inline bool ext4_is_quota_file(struct inode *inode)
|
|
{
|
|
return IS_NOQUOTA(inode) &&
|
|
!(EXT4_I(inode)->i_flags & EXT4_EA_INODE_FL);
|
|
}
|
|
|
|
/*
|
|
* This structure is stuffed into the struct file's private_data field
|
|
* for directories. It is where we put information so that we can do
|
|
* readdir operations in hash tree order.
|
|
*/
|
|
struct dir_private_info {
|
|
struct rb_root root;
|
|
struct rb_node *curr_node;
|
|
struct fname *extra_fname;
|
|
loff_t last_pos;
|
|
__u32 curr_hash;
|
|
__u32 curr_minor_hash;
|
|
__u32 next_hash;
|
|
};
|
|
|
|
/* calculate the first block number of the group */
|
|
static inline ext4_fsblk_t
|
|
ext4_group_first_block_no(struct super_block *sb, ext4_group_t group_no)
|
|
{
|
|
return group_no * (ext4_fsblk_t)EXT4_BLOCKS_PER_GROUP(sb) +
|
|
le32_to_cpu(EXT4_SB(sb)->s_es->s_first_data_block);
|
|
}
|
|
|
|
/*
|
|
* Special error return code only used by dx_probe() and its callers.
|
|
*/
|
|
#define ERR_BAD_DX_DIR (-(MAX_ERRNO - 1))
|
|
|
|
/* htree levels for ext4 */
|
|
#define EXT4_HTREE_LEVEL_COMPAT 2
|
|
#define EXT4_HTREE_LEVEL 3
|
|
|
|
static inline int ext4_dir_htree_level(struct super_block *sb)
|
|
{
|
|
return ext4_has_feature_largedir(sb) ?
|
|
EXT4_HTREE_LEVEL : EXT4_HTREE_LEVEL_COMPAT;
|
|
}
|
|
|
|
/*
|
|
* Timeout and state flag for lazy initialization inode thread.
|
|
*/
|
|
#define EXT4_DEF_LI_WAIT_MULT 10
|
|
#define EXT4_DEF_LI_MAX_START_DELAY 5
|
|
#define EXT4_LAZYINIT_QUIT 0x0001
|
|
#define EXT4_LAZYINIT_RUNNING 0x0002
|
|
|
|
/*
|
|
* Lazy inode table initialization info
|
|
*/
|
|
struct ext4_lazy_init {
|
|
unsigned long li_state;
|
|
struct list_head li_request_list;
|
|
struct mutex li_list_mtx;
|
|
};
|
|
|
|
enum ext4_li_mode {
|
|
EXT4_LI_MODE_PREFETCH_BBITMAP,
|
|
EXT4_LI_MODE_ITABLE,
|
|
};
|
|
|
|
struct ext4_li_request {
|
|
struct super_block *lr_super;
|
|
enum ext4_li_mode lr_mode;
|
|
ext4_group_t lr_first_not_zeroed;
|
|
ext4_group_t lr_next_group;
|
|
struct list_head lr_request;
|
|
unsigned long lr_next_sched;
|
|
unsigned long lr_timeout;
|
|
};
|
|
|
|
struct ext4_features {
|
|
struct kobject f_kobj;
|
|
struct completion f_kobj_unregister;
|
|
};
|
|
|
|
/*
|
|
* This structure will be used for multiple mount protection. It will be
|
|
* written into the block number saved in the s_mmp_block field in the
|
|
* superblock. Programs that check MMP should assume that if
|
|
* SEQ_FSCK (or any unknown code above SEQ_MAX) is present then it is NOT safe
|
|
* to use the filesystem, regardless of how old the timestamp is.
|
|
*/
|
|
#define EXT4_MMP_MAGIC 0x004D4D50U /* ASCII for MMP */
|
|
#define EXT4_MMP_SEQ_CLEAN 0xFF4D4D50U /* mmp_seq value for clean unmount */
|
|
#define EXT4_MMP_SEQ_FSCK 0xE24D4D50U /* mmp_seq value when being fscked */
|
|
#define EXT4_MMP_SEQ_MAX 0xE24D4D4FU /* maximum valid mmp_seq value */
|
|
|
|
struct mmp_struct {
|
|
__le32 mmp_magic; /* Magic number for MMP */
|
|
__le32 mmp_seq; /* Sequence no. updated periodically */
|
|
|
|
/*
|
|
* mmp_time, mmp_nodename & mmp_bdevname are only used for information
|
|
* purposes and do not affect the correctness of the algorithm
|
|
*/
|
|
__le64 mmp_time; /* Time last updated */
|
|
char mmp_nodename[64]; /* Node which last updated MMP block */
|
|
char mmp_bdevname[32]; /* Bdev which last updated MMP block */
|
|
|
|
/*
|
|
* mmp_check_interval is used to verify if the MMP block has been
|
|
* updated on the block device. The value is updated based on the
|
|
* maximum time to write the MMP block during an update cycle.
|
|
*/
|
|
__le16 mmp_check_interval;
|
|
|
|
__le16 mmp_pad1;
|
|
__le32 mmp_pad2[226];
|
|
__le32 mmp_checksum; /* crc32c(uuid+mmp_block) */
|
|
};
|
|
|
|
/* arguments passed to the mmp thread */
|
|
struct mmpd_data {
|
|
struct buffer_head *bh; /* bh from initial read_mmp_block() */
|
|
struct super_block *sb; /* super block of the fs */
|
|
};
|
|
|
|
/*
|
|
* Check interval multiplier
|
|
* The MMP block is written every update interval and initially checked every
|
|
* update interval x the multiplier (the value is then adapted based on the
|
|
* write latency). The reason is that writes can be delayed under load and we
|
|
* don't want readers to incorrectly assume that the filesystem is no longer
|
|
* in use.
|
|
*/
|
|
#define EXT4_MMP_CHECK_MULT 2UL
|
|
|
|
/*
|
|
* Minimum interval for MMP checking in seconds.
|
|
*/
|
|
#define EXT4_MMP_MIN_CHECK_INTERVAL 5UL
|
|
|
|
/*
|
|
* Maximum interval for MMP checking in seconds.
|
|
*/
|
|
#define EXT4_MMP_MAX_CHECK_INTERVAL 300UL
|
|
|
|
/*
|
|
* Function prototypes
|
|
*/
|
|
|
|
/*
|
|
* Ok, these declarations are also in <linux/kernel.h> but none of the
|
|
* ext4 source programs needs to include it so they are duplicated here.
|
|
*/
|
|
# define NORET_TYPE /**/
|
|
# define ATTRIB_NORET __attribute__((noreturn))
|
|
# define NORET_AND noreturn,
|
|
|
|
/* bitmap.c */
|
|
extern unsigned int ext4_count_free(char *bitmap, unsigned numchars);
|
|
void ext4_inode_bitmap_csum_set(struct super_block *sb, ext4_group_t group,
|
|
struct ext4_group_desc *gdp,
|
|
struct buffer_head *bh, int sz);
|
|
int ext4_inode_bitmap_csum_verify(struct super_block *sb, ext4_group_t group,
|
|
struct ext4_group_desc *gdp,
|
|
struct buffer_head *bh, int sz);
|
|
void ext4_block_bitmap_csum_set(struct super_block *sb, ext4_group_t group,
|
|
struct ext4_group_desc *gdp,
|
|
struct buffer_head *bh);
|
|
int ext4_block_bitmap_csum_verify(struct super_block *sb, ext4_group_t group,
|
|
struct ext4_group_desc *gdp,
|
|
struct buffer_head *bh);
|
|
|
|
/* balloc.c */
|
|
extern void ext4_get_group_no_and_offset(struct super_block *sb,
|
|
ext4_fsblk_t blocknr,
|
|
ext4_group_t *blockgrpp,
|
|
ext4_grpblk_t *offsetp);
|
|
extern ext4_group_t ext4_get_group_number(struct super_block *sb,
|
|
ext4_fsblk_t block);
|
|
|
|
extern unsigned int ext4_block_group(struct super_block *sb,
|
|
ext4_fsblk_t blocknr);
|
|
extern ext4_grpblk_t ext4_block_group_offset(struct super_block *sb,
|
|
ext4_fsblk_t blocknr);
|
|
extern int ext4_bg_has_super(struct super_block *sb, ext4_group_t group);
|
|
extern unsigned long ext4_bg_num_gdb(struct super_block *sb,
|
|
ext4_group_t group);
|
|
extern ext4_fsblk_t ext4_new_meta_blocks(handle_t *handle, struct inode *inode,
|
|
ext4_fsblk_t goal,
|
|
unsigned int flags,
|
|
unsigned long *count,
|
|
int *errp);
|
|
extern int ext4_claim_free_clusters(struct ext4_sb_info *sbi,
|
|
s64 nclusters, unsigned int flags);
|
|
extern ext4_fsblk_t ext4_count_free_clusters(struct super_block *);
|
|
extern void ext4_check_blocks_bitmap(struct super_block *);
|
|
extern struct ext4_group_desc * ext4_get_group_desc(struct super_block * sb,
|
|
ext4_group_t block_group,
|
|
struct buffer_head ** bh);
|
|
extern int ext4_should_retry_alloc(struct super_block *sb, int *retries);
|
|
|
|
extern struct buffer_head *ext4_read_block_bitmap_nowait(struct super_block *sb,
|
|
ext4_group_t block_group,
|
|
bool ignore_locked);
|
|
extern int ext4_wait_block_bitmap(struct super_block *sb,
|
|
ext4_group_t block_group,
|
|
struct buffer_head *bh);
|
|
extern struct buffer_head *ext4_read_block_bitmap(struct super_block *sb,
|
|
ext4_group_t block_group);
|
|
extern unsigned ext4_free_clusters_after_init(struct super_block *sb,
|
|
ext4_group_t block_group,
|
|
struct ext4_group_desc *gdp);
|
|
ext4_fsblk_t ext4_inode_to_goal_block(struct inode *);
|
|
|
|
#ifdef CONFIG_UNICODE
|
|
extern int ext4_fname_setup_ci_filename(struct inode *dir,
|
|
const struct qstr *iname,
|
|
struct ext4_filename *fname);
|
|
#endif
|
|
|
|
#ifdef CONFIG_FS_ENCRYPTION
|
|
static inline void ext4_fname_from_fscrypt_name(struct ext4_filename *dst,
|
|
const struct fscrypt_name *src)
|
|
{
|
|
memset(dst, 0, sizeof(*dst));
|
|
|
|
dst->usr_fname = src->usr_fname;
|
|
dst->disk_name = src->disk_name;
|
|
dst->hinfo.hash = src->hash;
|
|
dst->hinfo.minor_hash = src->minor_hash;
|
|
dst->crypto_buf = src->crypto_buf;
|
|
}
|
|
|
|
static inline int ext4_fname_setup_filename(struct inode *dir,
|
|
const struct qstr *iname,
|
|
int lookup,
|
|
struct ext4_filename *fname)
|
|
{
|
|
struct fscrypt_name name;
|
|
int err;
|
|
|
|
err = fscrypt_setup_filename(dir, iname, lookup, &name);
|
|
if (err)
|
|
return err;
|
|
|
|
ext4_fname_from_fscrypt_name(fname, &name);
|
|
|
|
#ifdef CONFIG_UNICODE
|
|
err = ext4_fname_setup_ci_filename(dir, iname, fname);
|
|
#endif
|
|
return err;
|
|
}
|
|
|
|
static inline int ext4_fname_prepare_lookup(struct inode *dir,
|
|
struct dentry *dentry,
|
|
struct ext4_filename *fname)
|
|
{
|
|
struct fscrypt_name name;
|
|
int err;
|
|
|
|
err = fscrypt_prepare_lookup(dir, dentry, &name);
|
|
if (err)
|
|
return err;
|
|
|
|
ext4_fname_from_fscrypt_name(fname, &name);
|
|
|
|
#ifdef CONFIG_UNICODE
|
|
err = ext4_fname_setup_ci_filename(dir, &dentry->d_name, fname);
|
|
#endif
|
|
return err;
|
|
}
|
|
|
|
static inline void ext4_fname_free_filename(struct ext4_filename *fname)
|
|
{
|
|
struct fscrypt_name name;
|
|
|
|
name.crypto_buf = fname->crypto_buf;
|
|
fscrypt_free_filename(&name);
|
|
|
|
fname->crypto_buf.name = NULL;
|
|
fname->usr_fname = NULL;
|
|
fname->disk_name.name = NULL;
|
|
|
|
#ifdef CONFIG_UNICODE
|
|
kfree(fname->cf_name.name);
|
|
fname->cf_name.name = NULL;
|
|
#endif
|
|
}
|
|
#else /* !CONFIG_FS_ENCRYPTION */
|
|
static inline int ext4_fname_setup_filename(struct inode *dir,
|
|
const struct qstr *iname,
|
|
int lookup,
|
|
struct ext4_filename *fname)
|
|
{
|
|
int err = 0;
|
|
fname->usr_fname = iname;
|
|
fname->disk_name.name = (unsigned char *) iname->name;
|
|
fname->disk_name.len = iname->len;
|
|
|
|
#ifdef CONFIG_UNICODE
|
|
err = ext4_fname_setup_ci_filename(dir, iname, fname);
|
|
#endif
|
|
|
|
return err;
|
|
}
|
|
|
|
static inline int ext4_fname_prepare_lookup(struct inode *dir,
|
|
struct dentry *dentry,
|
|
struct ext4_filename *fname)
|
|
{
|
|
return ext4_fname_setup_filename(dir, &dentry->d_name, 1, fname);
|
|
}
|
|
|
|
static inline void ext4_fname_free_filename(struct ext4_filename *fname)
|
|
{
|
|
#ifdef CONFIG_UNICODE
|
|
kfree(fname->cf_name.name);
|
|
fname->cf_name.name = NULL;
|
|
#endif
|
|
}
|
|
#endif /* !CONFIG_FS_ENCRYPTION */
|
|
|
|
/* dir.c */
|
|
extern int __ext4_check_dir_entry(const char *, unsigned int, struct inode *,
|
|
struct file *,
|
|
struct ext4_dir_entry_2 *,
|
|
struct buffer_head *, char *, int,
|
|
unsigned int);
|
|
#define ext4_check_dir_entry(dir, filp, de, bh, buf, size, offset) \
|
|
unlikely(__ext4_check_dir_entry(__func__, __LINE__, (dir), (filp), \
|
|
(de), (bh), (buf), (size), (offset)))
|
|
extern int ext4_htree_store_dirent(struct file *dir_file, __u32 hash,
|
|
__u32 minor_hash,
|
|
struct ext4_dir_entry_2 *dirent,
|
|
struct fscrypt_str *ent_name);
|
|
extern void ext4_htree_free_dir_info(struct dir_private_info *p);
|
|
extern int ext4_find_dest_de(struct inode *dir, struct inode *inode,
|
|
struct buffer_head *bh,
|
|
void *buf, int buf_size,
|
|
struct ext4_filename *fname,
|
|
struct ext4_dir_entry_2 **dest_de);
|
|
void ext4_insert_dentry(struct inode *dir, struct inode *inode,
|
|
struct ext4_dir_entry_2 *de,
|
|
int buf_size,
|
|
struct ext4_filename *fname);
|
|
static inline void ext4_update_dx_flag(struct inode *inode)
|
|
{
|
|
if (!ext4_has_feature_dir_index(inode->i_sb) &&
|
|
ext4_test_inode_flag(inode, EXT4_INODE_INDEX)) {
|
|
/* ext4_iget() should have caught this... */
|
|
WARN_ON_ONCE(ext4_has_feature_metadata_csum(inode->i_sb));
|
|
ext4_clear_inode_flag(inode, EXT4_INODE_INDEX);
|
|
}
|
|
}
|
|
static const unsigned char ext4_filetype_table[] = {
|
|
DT_UNKNOWN, DT_REG, DT_DIR, DT_CHR, DT_BLK, DT_FIFO, DT_SOCK, DT_LNK
|
|
};
|
|
|
|
static inline unsigned char get_dtype(struct super_block *sb, int filetype)
|
|
{
|
|
if (!ext4_has_feature_filetype(sb) || filetype >= EXT4_FT_MAX)
|
|
return DT_UNKNOWN;
|
|
|
|
return ext4_filetype_table[filetype];
|
|
}
|
|
extern int ext4_check_all_de(struct inode *dir, struct buffer_head *bh,
|
|
void *buf, int buf_size);
|
|
|
|
/* fsync.c */
|
|
extern int ext4_sync_file(struct file *, loff_t, loff_t, int);
|
|
|
|
/* hash.c */
|
|
extern int ext4fs_dirhash(const struct inode *dir, const char *name, int len,
|
|
struct dx_hash_info *hinfo);
|
|
|
|
/* ialloc.c */
|
|
extern int ext4_mark_inode_used(struct super_block *sb, int ino);
|
|
extern struct inode *__ext4_new_inode(struct user_namespace *, handle_t *,
|
|
struct inode *, umode_t,
|
|
const struct qstr *qstr, __u32 goal,
|
|
uid_t *owner, __u32 i_flags,
|
|
int handle_type, unsigned int line_no,
|
|
int nblocks);
|
|
|
|
#define ext4_new_inode(handle, dir, mode, qstr, goal, owner, i_flags) \
|
|
__ext4_new_inode(&init_user_ns, (handle), (dir), (mode), (qstr), \
|
|
(goal), (owner), i_flags, 0, 0, 0)
|
|
#define ext4_new_inode_start_handle(mnt_userns, dir, mode, qstr, goal, owner, \
|
|
type, nblocks) \
|
|
__ext4_new_inode((mnt_userns), NULL, (dir), (mode), (qstr), (goal), (owner), \
|
|
0, (type), __LINE__, (nblocks))
|
|
|
|
|
|
extern void ext4_free_inode(handle_t *, struct inode *);
|
|
extern struct inode * ext4_orphan_get(struct super_block *, unsigned long);
|
|
extern unsigned long ext4_count_free_inodes(struct super_block *);
|
|
extern unsigned long ext4_count_dirs(struct super_block *);
|
|
extern void ext4_check_inodes_bitmap(struct super_block *);
|
|
extern void ext4_mark_bitmap_end(int start_bit, int end_bit, char *bitmap);
|
|
extern int ext4_init_inode_table(struct super_block *sb,
|
|
ext4_group_t group, int barrier);
|
|
extern void ext4_end_bitmap_read(struct buffer_head *bh, int uptodate);
|
|
|
|
/* fast_commit.c */
|
|
int ext4_fc_info_show(struct seq_file *seq, void *v);
|
|
void ext4_fc_init(struct super_block *sb, journal_t *journal);
|
|
void ext4_fc_init_inode(struct inode *inode);
|
|
void ext4_fc_track_range(handle_t *handle, struct inode *inode, ext4_lblk_t start,
|
|
ext4_lblk_t end);
|
|
void __ext4_fc_track_unlink(handle_t *handle, struct inode *inode,
|
|
struct dentry *dentry);
|
|
void __ext4_fc_track_link(handle_t *handle, struct inode *inode,
|
|
struct dentry *dentry);
|
|
void ext4_fc_track_unlink(handle_t *handle, struct dentry *dentry);
|
|
void ext4_fc_track_link(handle_t *handle, struct dentry *dentry);
|
|
void __ext4_fc_track_create(handle_t *handle, struct inode *inode,
|
|
struct dentry *dentry);
|
|
void ext4_fc_track_create(handle_t *handle, struct dentry *dentry);
|
|
void ext4_fc_track_inode(handle_t *handle, struct inode *inode);
|
|
void ext4_fc_mark_ineligible(struct super_block *sb, int reason, handle_t *handle);
|
|
void ext4_fc_start_update(struct inode *inode);
|
|
void ext4_fc_stop_update(struct inode *inode);
|
|
void ext4_fc_del(struct inode *inode);
|
|
bool ext4_fc_replay_check_excluded(struct super_block *sb, ext4_fsblk_t block);
|
|
void ext4_fc_replay_cleanup(struct super_block *sb);
|
|
int ext4_fc_commit(journal_t *journal, tid_t commit_tid);
|
|
int __init ext4_fc_init_dentry_cache(void);
|
|
void ext4_fc_destroy_dentry_cache(void);
|
|
int ext4_fc_record_regions(struct super_block *sb, int ino,
|
|
ext4_lblk_t lblk, ext4_fsblk_t pblk,
|
|
int len, int replay);
|
|
|
|
/* mballoc.c */
|
|
extern const struct seq_operations ext4_mb_seq_groups_ops;
|
|
extern const struct seq_operations ext4_mb_seq_structs_summary_ops;
|
|
extern long ext4_mb_stats;
|
|
extern long ext4_mb_max_to_scan;
|
|
extern int ext4_seq_mb_stats_show(struct seq_file *seq, void *offset);
|
|
extern int ext4_mb_init(struct super_block *);
|
|
extern int ext4_mb_release(struct super_block *);
|
|
extern ext4_fsblk_t ext4_mb_new_blocks(handle_t *,
|
|
struct ext4_allocation_request *, int *);
|
|
extern int ext4_mb_reserve_blocks(struct super_block *, int);
|
|
extern void ext4_discard_preallocations(struct inode *, unsigned int);
|
|
extern int __init ext4_init_mballoc(void);
|
|
extern void ext4_exit_mballoc(void);
|
|
extern ext4_group_t ext4_mb_prefetch(struct super_block *sb,
|
|
ext4_group_t group,
|
|
unsigned int nr, int *cnt);
|
|
extern void ext4_mb_prefetch_fini(struct super_block *sb, ext4_group_t group,
|
|
unsigned int nr);
|
|
|
|
extern void ext4_free_blocks(handle_t *handle, struct inode *inode,
|
|
struct buffer_head *bh, ext4_fsblk_t block,
|
|
unsigned long count, int flags);
|
|
extern int ext4_mb_alloc_groupinfo(struct super_block *sb,
|
|
ext4_group_t ngroups);
|
|
extern int ext4_mb_add_groupinfo(struct super_block *sb,
|
|
ext4_group_t i, struct ext4_group_desc *desc);
|
|
extern int ext4_group_add_blocks(handle_t *handle, struct super_block *sb,
|
|
ext4_fsblk_t block, unsigned long count);
|
|
extern int ext4_trim_fs(struct super_block *, struct fstrim_range *);
|
|
extern void ext4_process_freed_data(struct super_block *sb, tid_t commit_tid);
|
|
extern void ext4_mb_mark_bb(struct super_block *sb, ext4_fsblk_t block,
|
|
int len, int state);
|
|
|
|
/* inode.c */
|
|
void ext4_inode_csum_set(struct inode *inode, struct ext4_inode *raw,
|
|
struct ext4_inode_info *ei);
|
|
int ext4_inode_is_fast_symlink(struct inode *inode);
|
|
struct buffer_head *ext4_getblk(handle_t *, struct inode *, ext4_lblk_t, int);
|
|
struct buffer_head *ext4_bread(handle_t *, struct inode *, ext4_lblk_t, int);
|
|
int ext4_bread_batch(struct inode *inode, ext4_lblk_t block, int bh_count,
|
|
bool wait, struct buffer_head **bhs);
|
|
int ext4_get_block_unwritten(struct inode *inode, sector_t iblock,
|
|
struct buffer_head *bh_result, int create);
|
|
int ext4_get_block(struct inode *inode, sector_t iblock,
|
|
struct buffer_head *bh_result, int create);
|
|
int ext4_da_get_block_prep(struct inode *inode, sector_t iblock,
|
|
struct buffer_head *bh, int create);
|
|
int ext4_walk_page_buffers(handle_t *handle,
|
|
struct inode *inode,
|
|
struct buffer_head *head,
|
|
unsigned from,
|
|
unsigned to,
|
|
int *partial,
|
|
int (*fn)(handle_t *handle, struct inode *inode,
|
|
struct buffer_head *bh));
|
|
int do_journal_get_write_access(handle_t *handle, struct inode *inode,
|
|
struct buffer_head *bh);
|
|
#define FALL_BACK_TO_NONDELALLOC 1
|
|
#define CONVERT_INLINE_DATA 2
|
|
|
|
typedef enum {
|
|
EXT4_IGET_NORMAL = 0,
|
|
EXT4_IGET_SPECIAL = 0x0001, /* OK to iget a system inode */
|
|
EXT4_IGET_HANDLE = 0x0002, /* Inode # is from a handle */
|
|
EXT4_IGET_BAD = 0x0004 /* Allow to iget a bad inode */
|
|
} ext4_iget_flags;
|
|
|
|
extern struct inode *__ext4_iget(struct super_block *sb, unsigned long ino,
|
|
ext4_iget_flags flags, const char *function,
|
|
unsigned int line);
|
|
|
|
#define ext4_iget(sb, ino, flags) \
|
|
__ext4_iget((sb), (ino), (flags), __func__, __LINE__)
|
|
|
|
extern int ext4_write_inode(struct inode *, struct writeback_control *);
|
|
extern int ext4_setattr(struct user_namespace *, struct dentry *,
|
|
struct iattr *);
|
|
extern int ext4_getattr(struct user_namespace *, const struct path *,
|
|
struct kstat *, u32, unsigned int);
|
|
extern void ext4_evict_inode(struct inode *);
|
|
extern void ext4_clear_inode(struct inode *);
|
|
extern int ext4_file_getattr(struct user_namespace *, const struct path *,
|
|
struct kstat *, u32, unsigned int);
|
|
extern int ext4_sync_inode(handle_t *, struct inode *);
|
|
extern void ext4_dirty_inode(struct inode *, int);
|
|
extern int ext4_change_inode_journal_flag(struct inode *, int);
|
|
extern int ext4_get_inode_loc(struct inode *, struct ext4_iloc *);
|
|
extern int ext4_get_fc_inode_loc(struct super_block *sb, unsigned long ino,
|
|
struct ext4_iloc *iloc);
|
|
extern int ext4_inode_attach_jinode(struct inode *inode);
|
|
extern int ext4_can_truncate(struct inode *inode);
|
|
extern int ext4_truncate(struct inode *);
|
|
extern int ext4_break_layouts(struct inode *);
|
|
extern int ext4_punch_hole(struct file *file, loff_t offset, loff_t length);
|
|
extern void ext4_set_inode_flags(struct inode *, bool init);
|
|
extern int ext4_alloc_da_blocks(struct inode *inode);
|
|
extern void ext4_set_aops(struct inode *inode);
|
|
extern int ext4_writepage_trans_blocks(struct inode *);
|
|
extern int ext4_chunk_trans_blocks(struct inode *, int nrblocks);
|
|
extern int ext4_zero_partial_blocks(handle_t *handle, struct inode *inode,
|
|
loff_t lstart, loff_t lend);
|
|
extern vm_fault_t ext4_page_mkwrite(struct vm_fault *vmf);
|
|
extern qsize_t *ext4_get_reserved_space(struct inode *inode);
|
|
extern int ext4_get_projid(struct inode *inode, kprojid_t *projid);
|
|
extern void ext4_da_release_space(struct inode *inode, int to_free);
|
|
extern void ext4_da_update_reserve_space(struct inode *inode,
|
|
int used, int quota_claim);
|
|
extern int ext4_issue_zeroout(struct inode *inode, ext4_lblk_t lblk,
|
|
ext4_fsblk_t pblk, ext4_lblk_t len);
|
|
|
|
/* indirect.c */
|
|
extern int ext4_ind_map_blocks(handle_t *handle, struct inode *inode,
|
|
struct ext4_map_blocks *map, int flags);
|
|
extern int ext4_ind_trans_blocks(struct inode *inode, int nrblocks);
|
|
extern void ext4_ind_truncate(handle_t *, struct inode *inode);
|
|
extern int ext4_ind_remove_space(handle_t *handle, struct inode *inode,
|
|
ext4_lblk_t start, ext4_lblk_t end);
|
|
|
|
/* ioctl.c */
|
|
extern long ext4_ioctl(struct file *, unsigned int, unsigned long);
|
|
extern long ext4_compat_ioctl(struct file *, unsigned int, unsigned long);
|
|
int ext4_fileattr_set(struct user_namespace *mnt_userns,
|
|
struct dentry *dentry, struct fileattr *fa);
|
|
int ext4_fileattr_get(struct dentry *dentry, struct fileattr *fa);
|
|
extern void ext4_reset_inode_seed(struct inode *inode);
|
|
|
|
/* migrate.c */
|
|
extern int ext4_ext_migrate(struct inode *);
|
|
extern int ext4_ind_migrate(struct inode *inode);
|
|
|
|
/* namei.c */
|
|
extern int ext4_init_new_dir(handle_t *handle, struct inode *dir,
|
|
struct inode *inode);
|
|
extern int ext4_dirblock_csum_verify(struct inode *inode,
|
|
struct buffer_head *bh);
|
|
extern int ext4_htree_fill_tree(struct file *dir_file, __u32 start_hash,
|
|
__u32 start_minor_hash, __u32 *next_hash);
|
|
extern int ext4_search_dir(struct buffer_head *bh,
|
|
char *search_buf,
|
|
int buf_size,
|
|
struct inode *dir,
|
|
struct ext4_filename *fname,
|
|
unsigned int offset,
|
|
struct ext4_dir_entry_2 **res_dir);
|
|
extern int ext4_generic_delete_entry(struct inode *dir,
|
|
struct ext4_dir_entry_2 *de_del,
|
|
struct buffer_head *bh,
|
|
void *entry_buf,
|
|
int buf_size,
|
|
int csum_size);
|
|
extern bool ext4_empty_dir(struct inode *inode);
|
|
|
|
/* resize.c */
|
|
extern void ext4_kvfree_array_rcu(void *to_free);
|
|
extern int ext4_group_add(struct super_block *sb,
|
|
struct ext4_new_group_data *input);
|
|
extern int ext4_group_extend(struct super_block *sb,
|
|
struct ext4_super_block *es,
|
|
ext4_fsblk_t n_blocks_count);
|
|
extern int ext4_resize_fs(struct super_block *sb, ext4_fsblk_t n_blocks_count);
|
|
|
|
/* super.c */
|
|
extern struct buffer_head *ext4_sb_bread(struct super_block *sb,
|
|
sector_t block, int op_flags);
|
|
extern struct buffer_head *ext4_sb_bread_unmovable(struct super_block *sb,
|
|
sector_t block);
|
|
extern void ext4_read_bh_nowait(struct buffer_head *bh, int op_flags,
|
|
bh_end_io_t *end_io);
|
|
extern int ext4_read_bh(struct buffer_head *bh, int op_flags,
|
|
bh_end_io_t *end_io);
|
|
extern int ext4_read_bh_lock(struct buffer_head *bh, int op_flags, bool wait);
|
|
extern void ext4_sb_breadahead_unmovable(struct super_block *sb, sector_t block);
|
|
extern int ext4_seq_options_show(struct seq_file *seq, void *offset);
|
|
extern int ext4_calculate_overhead(struct super_block *sb);
|
|
extern void ext4_superblock_csum_set(struct super_block *sb);
|
|
extern int ext4_alloc_flex_bg_array(struct super_block *sb,
|
|
ext4_group_t ngroup);
|
|
extern const char *ext4_decode_error(struct super_block *sb, int errno,
|
|
char nbuf[16]);
|
|
extern void ext4_mark_group_bitmap_corrupted(struct super_block *sb,
|
|
ext4_group_t block_group,
|
|
unsigned int flags);
|
|
|
|
extern __printf(7, 8)
|
|
void __ext4_error(struct super_block *, const char *, unsigned int, bool,
|
|
int, __u64, const char *, ...);
|
|
extern __printf(6, 7)
|
|
void __ext4_error_inode(struct inode *, const char *, unsigned int,
|
|
ext4_fsblk_t, int, const char *, ...);
|
|
extern __printf(5, 6)
|
|
void __ext4_error_file(struct file *, const char *, unsigned int, ext4_fsblk_t,
|
|
const char *, ...);
|
|
extern void __ext4_std_error(struct super_block *, const char *,
|
|
unsigned int, int);
|
|
extern __printf(4, 5)
|
|
void __ext4_warning(struct super_block *, const char *, unsigned int,
|
|
const char *, ...);
|
|
extern __printf(4, 5)
|
|
void __ext4_warning_inode(const struct inode *inode, const char *function,
|
|
unsigned int line, const char *fmt, ...);
|
|
extern __printf(3, 4)
|
|
void __ext4_msg(struct super_block *, const char *, const char *, ...);
|
|
extern void __dump_mmp_msg(struct super_block *, struct mmp_struct *mmp,
|
|
const char *, unsigned int, const char *);
|
|
extern __printf(7, 8)
|
|
void __ext4_grp_locked_error(const char *, unsigned int,
|
|
struct super_block *, ext4_group_t,
|
|
unsigned long, ext4_fsblk_t,
|
|
const char *, ...);
|
|
|
|
#define EXT4_ERROR_INODE(inode, fmt, a...) \
|
|
ext4_error_inode((inode), __func__, __LINE__, 0, (fmt), ## a)
|
|
|
|
#define EXT4_ERROR_INODE_ERR(inode, err, fmt, a...) \
|
|
__ext4_error_inode((inode), __func__, __LINE__, 0, (err), (fmt), ## a)
|
|
|
|
#define ext4_error_inode_block(inode, block, err, fmt, a...) \
|
|
__ext4_error_inode((inode), __func__, __LINE__, (block), (err), \
|
|
(fmt), ## a)
|
|
|
|
#define EXT4_ERROR_FILE(file, block, fmt, a...) \
|
|
ext4_error_file((file), __func__, __LINE__, (block), (fmt), ## a)
|
|
|
|
#define ext4_abort(sb, err, fmt, a...) \
|
|
__ext4_error((sb), __func__, __LINE__, true, (err), 0, (fmt), ## a)
|
|
|
|
#ifdef CONFIG_PRINTK
|
|
|
|
#define ext4_error_inode(inode, func, line, block, fmt, ...) \
|
|
__ext4_error_inode(inode, func, line, block, 0, fmt, ##__VA_ARGS__)
|
|
#define ext4_error_inode_err(inode, func, line, block, err, fmt, ...) \
|
|
__ext4_error_inode((inode), (func), (line), (block), \
|
|
(err), (fmt), ##__VA_ARGS__)
|
|
#define ext4_error_file(file, func, line, block, fmt, ...) \
|
|
__ext4_error_file(file, func, line, block, fmt, ##__VA_ARGS__)
|
|
#define ext4_error(sb, fmt, ...) \
|
|
__ext4_error((sb), __func__, __LINE__, false, 0, 0, (fmt), \
|
|
##__VA_ARGS__)
|
|
#define ext4_error_err(sb, err, fmt, ...) \
|
|
__ext4_error((sb), __func__, __LINE__, false, (err), 0, (fmt), \
|
|
##__VA_ARGS__)
|
|
#define ext4_warning(sb, fmt, ...) \
|
|
__ext4_warning(sb, __func__, __LINE__, fmt, ##__VA_ARGS__)
|
|
#define ext4_warning_inode(inode, fmt, ...) \
|
|
__ext4_warning_inode(inode, __func__, __LINE__, fmt, ##__VA_ARGS__)
|
|
#define ext4_msg(sb, level, fmt, ...) \
|
|
__ext4_msg(sb, level, fmt, ##__VA_ARGS__)
|
|
#define dump_mmp_msg(sb, mmp, msg) \
|
|
__dump_mmp_msg(sb, mmp, __func__, __LINE__, msg)
|
|
#define ext4_grp_locked_error(sb, grp, ino, block, fmt, ...) \
|
|
__ext4_grp_locked_error(__func__, __LINE__, sb, grp, ino, block, \
|
|
fmt, ##__VA_ARGS__)
|
|
|
|
#else
|
|
|
|
#define ext4_error_inode(inode, func, line, block, fmt, ...) \
|
|
do { \
|
|
no_printk(fmt, ##__VA_ARGS__); \
|
|
__ext4_error_inode(inode, "", 0, block, 0, " "); \
|
|
} while (0)
|
|
#define ext4_error_inode_err(inode, func, line, block, err, fmt, ...) \
|
|
do { \
|
|
no_printk(fmt, ##__VA_ARGS__); \
|
|
__ext4_error_inode(inode, "", 0, block, err, " "); \
|
|
} while (0)
|
|
#define ext4_error_file(file, func, line, block, fmt, ...) \
|
|
do { \
|
|
no_printk(fmt, ##__VA_ARGS__); \
|
|
__ext4_error_file(file, "", 0, block, " "); \
|
|
} while (0)
|
|
#define ext4_error(sb, fmt, ...) \
|
|
do { \
|
|
no_printk(fmt, ##__VA_ARGS__); \
|
|
__ext4_error(sb, "", 0, false, 0, 0, " "); \
|
|
} while (0)
|
|
#define ext4_error_err(sb, err, fmt, ...) \
|
|
do { \
|
|
no_printk(fmt, ##__VA_ARGS__); \
|
|
__ext4_error(sb, "", 0, false, err, 0, " "); \
|
|
} while (0)
|
|
#define ext4_warning(sb, fmt, ...) \
|
|
do { \
|
|
no_printk(fmt, ##__VA_ARGS__); \
|
|
__ext4_warning(sb, "", 0, " "); \
|
|
} while (0)
|
|
#define ext4_warning_inode(inode, fmt, ...) \
|
|
do { \
|
|
no_printk(fmt, ##__VA_ARGS__); \
|
|
__ext4_warning_inode(inode, "", 0, " "); \
|
|
} while (0)
|
|
#define ext4_msg(sb, level, fmt, ...) \
|
|
do { \
|
|
no_printk(fmt, ##__VA_ARGS__); \
|
|
__ext4_msg(sb, "", " "); \
|
|
} while (0)
|
|
#define dump_mmp_msg(sb, mmp, msg) \
|
|
__dump_mmp_msg(sb, mmp, "", 0, "")
|
|
#define ext4_grp_locked_error(sb, grp, ino, block, fmt, ...) \
|
|
do { \
|
|
no_printk(fmt, ##__VA_ARGS__); \
|
|
__ext4_grp_locked_error("", 0, sb, grp, ino, block, " "); \
|
|
} while (0)
|
|
|
|
#endif
|
|
|
|
extern ext4_fsblk_t ext4_block_bitmap(struct super_block *sb,
|
|
struct ext4_group_desc *bg);
|
|
extern ext4_fsblk_t ext4_inode_bitmap(struct super_block *sb,
|
|
struct ext4_group_desc *bg);
|
|
extern ext4_fsblk_t ext4_inode_table(struct super_block *sb,
|
|
struct ext4_group_desc *bg);
|
|
extern __u32 ext4_free_group_clusters(struct super_block *sb,
|
|
struct ext4_group_desc *bg);
|
|
extern __u32 ext4_free_inodes_count(struct super_block *sb,
|
|
struct ext4_group_desc *bg);
|
|
extern __u32 ext4_used_dirs_count(struct super_block *sb,
|
|
struct ext4_group_desc *bg);
|
|
extern __u32 ext4_itable_unused_count(struct super_block *sb,
|
|
struct ext4_group_desc *bg);
|
|
extern void ext4_block_bitmap_set(struct super_block *sb,
|
|
struct ext4_group_desc *bg, ext4_fsblk_t blk);
|
|
extern void ext4_inode_bitmap_set(struct super_block *sb,
|
|
struct ext4_group_desc *bg, ext4_fsblk_t blk);
|
|
extern void ext4_inode_table_set(struct super_block *sb,
|
|
struct ext4_group_desc *bg, ext4_fsblk_t blk);
|
|
extern void ext4_free_group_clusters_set(struct super_block *sb,
|
|
struct ext4_group_desc *bg,
|
|
__u32 count);
|
|
extern void ext4_free_inodes_set(struct super_block *sb,
|
|
struct ext4_group_desc *bg, __u32 count);
|
|
extern void ext4_used_dirs_set(struct super_block *sb,
|
|
struct ext4_group_desc *bg, __u32 count);
|
|
extern void ext4_itable_unused_set(struct super_block *sb,
|
|
struct ext4_group_desc *bg, __u32 count);
|
|
extern int ext4_group_desc_csum_verify(struct super_block *sb, __u32 group,
|
|
struct ext4_group_desc *gdp);
|
|
extern void ext4_group_desc_csum_set(struct super_block *sb, __u32 group,
|
|
struct ext4_group_desc *gdp);
|
|
extern int ext4_register_li_request(struct super_block *sb,
|
|
ext4_group_t first_not_zeroed);
|
|
|
|
static inline int ext4_has_metadata_csum(struct super_block *sb)
|
|
{
|
|
WARN_ON_ONCE(ext4_has_feature_metadata_csum(sb) &&
|
|
!EXT4_SB(sb)->s_chksum_driver);
|
|
|
|
return ext4_has_feature_metadata_csum(sb) &&
|
|
(EXT4_SB(sb)->s_chksum_driver != NULL);
|
|
}
|
|
|
|
static inline int ext4_has_group_desc_csum(struct super_block *sb)
|
|
{
|
|
return ext4_has_feature_gdt_csum(sb) || ext4_has_metadata_csum(sb);
|
|
}
|
|
|
|
#define ext4_read_incompat_64bit_val(es, name) \
|
|
(((es)->s_feature_incompat & cpu_to_le32(EXT4_FEATURE_INCOMPAT_64BIT) \
|
|
? (ext4_fsblk_t)le32_to_cpu(es->name##_hi) << 32 : 0) | \
|
|
le32_to_cpu(es->name##_lo))
|
|
|
|
static inline ext4_fsblk_t ext4_blocks_count(struct ext4_super_block *es)
|
|
{
|
|
return ext4_read_incompat_64bit_val(es, s_blocks_count);
|
|
}
|
|
|
|
static inline ext4_fsblk_t ext4_r_blocks_count(struct ext4_super_block *es)
|
|
{
|
|
return ext4_read_incompat_64bit_val(es, s_r_blocks_count);
|
|
}
|
|
|
|
static inline ext4_fsblk_t ext4_free_blocks_count(struct ext4_super_block *es)
|
|
{
|
|
return ext4_read_incompat_64bit_val(es, s_free_blocks_count);
|
|
}
|
|
|
|
static inline void ext4_blocks_count_set(struct ext4_super_block *es,
|
|
ext4_fsblk_t blk)
|
|
{
|
|
es->s_blocks_count_lo = cpu_to_le32((u32)blk);
|
|
es->s_blocks_count_hi = cpu_to_le32(blk >> 32);
|
|
}
|
|
|
|
static inline void ext4_free_blocks_count_set(struct ext4_super_block *es,
|
|
ext4_fsblk_t blk)
|
|
{
|
|
es->s_free_blocks_count_lo = cpu_to_le32((u32)blk);
|
|
es->s_free_blocks_count_hi = cpu_to_le32(blk >> 32);
|
|
}
|
|
|
|
static inline void ext4_r_blocks_count_set(struct ext4_super_block *es,
|
|
ext4_fsblk_t blk)
|
|
{
|
|
es->s_r_blocks_count_lo = cpu_to_le32((u32)blk);
|
|
es->s_r_blocks_count_hi = cpu_to_le32(blk >> 32);
|
|
}
|
|
|
|
static inline loff_t ext4_isize(struct super_block *sb,
|
|
struct ext4_inode *raw_inode)
|
|
{
|
|
if (ext4_has_feature_largedir(sb) ||
|
|
S_ISREG(le16_to_cpu(raw_inode->i_mode)))
|
|
return ((loff_t)le32_to_cpu(raw_inode->i_size_high) << 32) |
|
|
le32_to_cpu(raw_inode->i_size_lo);
|
|
|
|
return (loff_t) le32_to_cpu(raw_inode->i_size_lo);
|
|
}
|
|
|
|
static inline void ext4_isize_set(struct ext4_inode *raw_inode, loff_t i_size)
|
|
{
|
|
raw_inode->i_size_lo = cpu_to_le32(i_size);
|
|
raw_inode->i_size_high = cpu_to_le32(i_size >> 32);
|
|
}
|
|
|
|
static inline
|
|
struct ext4_group_info *ext4_get_group_info(struct super_block *sb,
|
|
ext4_group_t group)
|
|
{
|
|
struct ext4_group_info **grp_info;
|
|
long indexv, indexh;
|
|
BUG_ON(group >= EXT4_SB(sb)->s_groups_count);
|
|
indexv = group >> (EXT4_DESC_PER_BLOCK_BITS(sb));
|
|
indexh = group & ((EXT4_DESC_PER_BLOCK(sb)) - 1);
|
|
grp_info = sbi_array_rcu_deref(EXT4_SB(sb), s_group_info, indexv);
|
|
return grp_info[indexh];
|
|
}
|
|
|
|
/*
|
|
* Reading s_groups_count requires using smp_rmb() afterwards. See
|
|
* the locking protocol documented in the comments of ext4_group_add()
|
|
* in resize.c
|
|
*/
|
|
static inline ext4_group_t ext4_get_groups_count(struct super_block *sb)
|
|
{
|
|
ext4_group_t ngroups = EXT4_SB(sb)->s_groups_count;
|
|
|
|
smp_rmb();
|
|
return ngroups;
|
|
}
|
|
|
|
static inline ext4_group_t ext4_flex_group(struct ext4_sb_info *sbi,
|
|
ext4_group_t block_group)
|
|
{
|
|
return block_group >> sbi->s_log_groups_per_flex;
|
|
}
|
|
|
|
static inline unsigned int ext4_flex_bg_size(struct ext4_sb_info *sbi)
|
|
{
|
|
return 1 << sbi->s_log_groups_per_flex;
|
|
}
|
|
|
|
#define ext4_std_error(sb, errno) \
|
|
do { \
|
|
if ((errno)) \
|
|
__ext4_std_error((sb), __func__, __LINE__, (errno)); \
|
|
} while (0)
|
|
|
|
#ifdef CONFIG_SMP
|
|
/* Each CPU can accumulate percpu_counter_batch clusters in their local
|
|
* counters. So we need to make sure we have free clusters more
|
|
* than percpu_counter_batch * nr_cpu_ids. Also add a window of 4 times.
|
|
*/
|
|
#define EXT4_FREECLUSTERS_WATERMARK (4 * (percpu_counter_batch * nr_cpu_ids))
|
|
#else
|
|
#define EXT4_FREECLUSTERS_WATERMARK 0
|
|
#endif
|
|
|
|
/* Update i_disksize. Requires i_mutex to avoid races with truncate */
|
|
static inline void ext4_update_i_disksize(struct inode *inode, loff_t newsize)
|
|
{
|
|
WARN_ON_ONCE(S_ISREG(inode->i_mode) &&
|
|
!inode_is_locked(inode));
|
|
down_write(&EXT4_I(inode)->i_data_sem);
|
|
if (newsize > EXT4_I(inode)->i_disksize)
|
|
WRITE_ONCE(EXT4_I(inode)->i_disksize, newsize);
|
|
up_write(&EXT4_I(inode)->i_data_sem);
|
|
}
|
|
|
|
/* Update i_size, i_disksize. Requires i_mutex to avoid races with truncate */
|
|
static inline int ext4_update_inode_size(struct inode *inode, loff_t newsize)
|
|
{
|
|
int changed = 0;
|
|
|
|
if (newsize > inode->i_size) {
|
|
i_size_write(inode, newsize);
|
|
changed = 1;
|
|
}
|
|
if (newsize > EXT4_I(inode)->i_disksize) {
|
|
ext4_update_i_disksize(inode, newsize);
|
|
changed |= 2;
|
|
}
|
|
return changed;
|
|
}
|
|
|
|
int ext4_update_disksize_before_punch(struct inode *inode, loff_t offset,
|
|
loff_t len);
|
|
|
|
struct ext4_group_info {
|
|
unsigned long bb_state;
|
|
#ifdef AGGRESSIVE_CHECK
|
|
unsigned long bb_check_counter;
|
|
#endif
|
|
struct rb_root bb_free_root;
|
|
ext4_grpblk_t bb_first_free; /* first free block */
|
|
ext4_grpblk_t bb_free; /* total free blocks */
|
|
ext4_grpblk_t bb_fragments; /* nr of freespace fragments */
|
|
ext4_grpblk_t bb_largest_free_order;/* order of largest frag in BG */
|
|
ext4_group_t bb_group; /* Group number */
|
|
struct list_head bb_prealloc_list;
|
|
#ifdef DOUBLE_CHECK
|
|
void *bb_bitmap;
|
|
#endif
|
|
struct rw_semaphore alloc_sem;
|
|
struct rb_node bb_avg_fragment_size_rb;
|
|
struct list_head bb_largest_free_order_node;
|
|
ext4_grpblk_t bb_counters[]; /* Nr of free power-of-two-block
|
|
* regions, index is order.
|
|
* bb_counters[3] = 5 means
|
|
* 5 free 8-block regions. */
|
|
};
|
|
|
|
#define EXT4_GROUP_INFO_NEED_INIT_BIT 0
|
|
#define EXT4_GROUP_INFO_WAS_TRIMMED_BIT 1
|
|
#define EXT4_GROUP_INFO_BBITMAP_CORRUPT_BIT 2
|
|
#define EXT4_GROUP_INFO_IBITMAP_CORRUPT_BIT 3
|
|
#define EXT4_GROUP_INFO_BBITMAP_CORRUPT \
|
|
(1 << EXT4_GROUP_INFO_BBITMAP_CORRUPT_BIT)
|
|
#define EXT4_GROUP_INFO_IBITMAP_CORRUPT \
|
|
(1 << EXT4_GROUP_INFO_IBITMAP_CORRUPT_BIT)
|
|
#define EXT4_GROUP_INFO_BBITMAP_READ_BIT 4
|
|
|
|
#define EXT4_MB_GRP_NEED_INIT(grp) \
|
|
(test_bit(EXT4_GROUP_INFO_NEED_INIT_BIT, &((grp)->bb_state)))
|
|
#define EXT4_MB_GRP_BBITMAP_CORRUPT(grp) \
|
|
(test_bit(EXT4_GROUP_INFO_BBITMAP_CORRUPT_BIT, &((grp)->bb_state)))
|
|
#define EXT4_MB_GRP_IBITMAP_CORRUPT(grp) \
|
|
(test_bit(EXT4_GROUP_INFO_IBITMAP_CORRUPT_BIT, &((grp)->bb_state)))
|
|
|
|
#define EXT4_MB_GRP_WAS_TRIMMED(grp) \
|
|
(test_bit(EXT4_GROUP_INFO_WAS_TRIMMED_BIT, &((grp)->bb_state)))
|
|
#define EXT4_MB_GRP_SET_TRIMMED(grp) \
|
|
(set_bit(EXT4_GROUP_INFO_WAS_TRIMMED_BIT, &((grp)->bb_state)))
|
|
#define EXT4_MB_GRP_CLEAR_TRIMMED(grp) \
|
|
(clear_bit(EXT4_GROUP_INFO_WAS_TRIMMED_BIT, &((grp)->bb_state)))
|
|
#define EXT4_MB_GRP_TEST_AND_SET_READ(grp) \
|
|
(test_and_set_bit(EXT4_GROUP_INFO_BBITMAP_READ_BIT, &((grp)->bb_state)))
|
|
|
|
#define EXT4_MAX_CONTENTION 8
|
|
#define EXT4_CONTENTION_THRESHOLD 2
|
|
|
|
static inline spinlock_t *ext4_group_lock_ptr(struct super_block *sb,
|
|
ext4_group_t group)
|
|
{
|
|
return bgl_lock_ptr(EXT4_SB(sb)->s_blockgroup_lock, group);
|
|
}
|
|
|
|
/*
|
|
* Returns true if the filesystem is busy enough that attempts to
|
|
* access the block group locks has run into contention.
|
|
*/
|
|
static inline int ext4_fs_is_busy(struct ext4_sb_info *sbi)
|
|
{
|
|
return (atomic_read(&sbi->s_lock_busy) > EXT4_CONTENTION_THRESHOLD);
|
|
}
|
|
|
|
static inline void ext4_lock_group(struct super_block *sb, ext4_group_t group)
|
|
{
|
|
spinlock_t *lock = ext4_group_lock_ptr(sb, group);
|
|
if (spin_trylock(lock))
|
|
/*
|
|
* We're able to grab the lock right away, so drop the
|
|
* lock contention counter.
|
|
*/
|
|
atomic_add_unless(&EXT4_SB(sb)->s_lock_busy, -1, 0);
|
|
else {
|
|
/*
|
|
* The lock is busy, so bump the contention counter,
|
|
* and then wait on the spin lock.
|
|
*/
|
|
atomic_add_unless(&EXT4_SB(sb)->s_lock_busy, 1,
|
|
EXT4_MAX_CONTENTION);
|
|
spin_lock(lock);
|
|
}
|
|
}
|
|
|
|
static inline void ext4_unlock_group(struct super_block *sb,
|
|
ext4_group_t group)
|
|
{
|
|
spin_unlock(ext4_group_lock_ptr(sb, group));
|
|
}
|
|
|
|
#ifdef CONFIG_QUOTA
|
|
static inline bool ext4_quota_capable(struct super_block *sb)
|
|
{
|
|
return (test_opt(sb, QUOTA) || ext4_has_feature_quota(sb));
|
|
}
|
|
|
|
static inline bool ext4_is_quota_journalled(struct super_block *sb)
|
|
{
|
|
struct ext4_sb_info *sbi = EXT4_SB(sb);
|
|
|
|
return (ext4_has_feature_quota(sb) ||
|
|
sbi->s_qf_names[USRQUOTA] || sbi->s_qf_names[GRPQUOTA]);
|
|
}
|
|
int ext4_enable_quotas(struct super_block *sb);
|
|
#endif
|
|
|
|
/*
|
|
* Block validity checking
|
|
*/
|
|
#define ext4_check_indirect_blockref(inode, bh) \
|
|
ext4_check_blockref(__func__, __LINE__, inode, \
|
|
(__le32 *)(bh)->b_data, \
|
|
EXT4_ADDR_PER_BLOCK((inode)->i_sb))
|
|
|
|
#define ext4_ind_check_inode(inode) \
|
|
ext4_check_blockref(__func__, __LINE__, inode, \
|
|
EXT4_I(inode)->i_data, \
|
|
EXT4_NDIR_BLOCKS)
|
|
|
|
/*
|
|
* Inodes and files operations
|
|
*/
|
|
|
|
/* dir.c */
|
|
extern const struct file_operations ext4_dir_operations;
|
|
|
|
/* file.c */
|
|
extern const struct inode_operations ext4_file_inode_operations;
|
|
extern const struct file_operations ext4_file_operations;
|
|
extern loff_t ext4_llseek(struct file *file, loff_t offset, int origin);
|
|
|
|
/* inline.c */
|
|
extern int ext4_get_max_inline_size(struct inode *inode);
|
|
extern int ext4_find_inline_data_nolock(struct inode *inode);
|
|
extern int ext4_init_inline_data(handle_t *handle, struct inode *inode,
|
|
unsigned int len);
|
|
extern int ext4_destroy_inline_data(handle_t *handle, struct inode *inode);
|
|
|
|
extern int ext4_readpage_inline(struct inode *inode, struct page *page);
|
|
extern int ext4_try_to_write_inline_data(struct address_space *mapping,
|
|
struct inode *inode,
|
|
loff_t pos, unsigned len,
|
|
unsigned flags,
|
|
struct page **pagep);
|
|
extern int ext4_write_inline_data_end(struct inode *inode,
|
|
loff_t pos, unsigned len,
|
|
unsigned copied,
|
|
struct page *page);
|
|
extern struct buffer_head *
|
|
ext4_journalled_write_inline_data(struct inode *inode,
|
|
unsigned len,
|
|
struct page *page);
|
|
extern int ext4_da_write_inline_data_begin(struct address_space *mapping,
|
|
struct inode *inode,
|
|
loff_t pos, unsigned len,
|
|
unsigned flags,
|
|
struct page **pagep,
|
|
void **fsdata);
|
|
extern int ext4_try_add_inline_entry(handle_t *handle,
|
|
struct ext4_filename *fname,
|
|
struct inode *dir, struct inode *inode);
|
|
extern int ext4_try_create_inline_dir(handle_t *handle,
|
|
struct inode *parent,
|
|
struct inode *inode);
|
|
extern int ext4_read_inline_dir(struct file *filp,
|
|
struct dir_context *ctx,
|
|
int *has_inline_data);
|
|
extern int ext4_inlinedir_to_tree(struct file *dir_file,
|
|
struct inode *dir, ext4_lblk_t block,
|
|
struct dx_hash_info *hinfo,
|
|
__u32 start_hash, __u32 start_minor_hash,
|
|
int *has_inline_data);
|
|
extern struct buffer_head *ext4_find_inline_entry(struct inode *dir,
|
|
struct ext4_filename *fname,
|
|
struct ext4_dir_entry_2 **res_dir,
|
|
int *has_inline_data);
|
|
extern int ext4_delete_inline_entry(handle_t *handle,
|
|
struct inode *dir,
|
|
struct ext4_dir_entry_2 *de_del,
|
|
struct buffer_head *bh,
|
|
int *has_inline_data);
|
|
extern bool empty_inline_dir(struct inode *dir, int *has_inline_data);
|
|
extern struct buffer_head *ext4_get_first_inline_block(struct inode *inode,
|
|
struct ext4_dir_entry_2 **parent_de,
|
|
int *retval);
|
|
extern int ext4_inline_data_fiemap(struct inode *inode,
|
|
struct fiemap_extent_info *fieinfo,
|
|
int *has_inline, __u64 start, __u64 len);
|
|
|
|
struct iomap;
|
|
extern int ext4_inline_data_iomap(struct inode *inode, struct iomap *iomap);
|
|
|
|
extern int ext4_inline_data_truncate(struct inode *inode, int *has_inline);
|
|
|
|
extern int ext4_convert_inline_data(struct inode *inode);
|
|
|
|
static inline int ext4_has_inline_data(struct inode *inode)
|
|
{
|
|
return ext4_test_inode_flag(inode, EXT4_INODE_INLINE_DATA) &&
|
|
EXT4_I(inode)->i_inline_off;
|
|
}
|
|
|
|
/* namei.c */
|
|
extern const struct inode_operations ext4_dir_inode_operations;
|
|
extern const struct inode_operations ext4_special_inode_operations;
|
|
extern struct dentry *ext4_get_parent(struct dentry *child);
|
|
extern struct ext4_dir_entry_2 *ext4_init_dot_dotdot(struct inode *inode,
|
|
struct ext4_dir_entry_2 *de,
|
|
int blocksize, int csum_size,
|
|
unsigned int parent_ino, int dotdot_real_len);
|
|
extern void ext4_initialize_dirent_tail(struct buffer_head *bh,
|
|
unsigned int blocksize);
|
|
extern int ext4_handle_dirty_dirblock(handle_t *handle, struct inode *inode,
|
|
struct buffer_head *bh);
|
|
extern int __ext4_unlink(struct inode *dir, const struct qstr *d_name,
|
|
struct inode *inode, struct dentry *dentry);
|
|
extern int __ext4_link(struct inode *dir, struct inode *inode,
|
|
struct dentry *dentry);
|
|
|
|
#define S_SHIFT 12
|
|
static const unsigned char ext4_type_by_mode[(S_IFMT >> S_SHIFT) + 1] = {
|
|
[S_IFREG >> S_SHIFT] = EXT4_FT_REG_FILE,
|
|
[S_IFDIR >> S_SHIFT] = EXT4_FT_DIR,
|
|
[S_IFCHR >> S_SHIFT] = EXT4_FT_CHRDEV,
|
|
[S_IFBLK >> S_SHIFT] = EXT4_FT_BLKDEV,
|
|
[S_IFIFO >> S_SHIFT] = EXT4_FT_FIFO,
|
|
[S_IFSOCK >> S_SHIFT] = EXT4_FT_SOCK,
|
|
[S_IFLNK >> S_SHIFT] = EXT4_FT_SYMLINK,
|
|
};
|
|
|
|
static inline void ext4_set_de_type(struct super_block *sb,
|
|
struct ext4_dir_entry_2 *de,
|
|
umode_t mode) {
|
|
if (ext4_has_feature_filetype(sb))
|
|
de->file_type = ext4_type_by_mode[(mode & S_IFMT)>>S_SHIFT];
|
|
}
|
|
|
|
/* readpages.c */
|
|
extern int ext4_mpage_readpages(struct inode *inode,
|
|
struct readahead_control *rac, struct page *page);
|
|
extern int __init ext4_init_post_read_processing(void);
|
|
extern void ext4_exit_post_read_processing(void);
|
|
|
|
/* symlink.c */
|
|
extern const struct inode_operations ext4_encrypted_symlink_inode_operations;
|
|
extern const struct inode_operations ext4_symlink_inode_operations;
|
|
extern const struct inode_operations ext4_fast_symlink_inode_operations;
|
|
|
|
/* sysfs.c */
|
|
extern void ext4_notify_error_sysfs(struct ext4_sb_info *sbi);
|
|
extern int ext4_register_sysfs(struct super_block *sb);
|
|
extern void ext4_unregister_sysfs(struct super_block *sb);
|
|
extern int __init ext4_init_sysfs(void);
|
|
extern void ext4_exit_sysfs(void);
|
|
|
|
/* block_validity */
|
|
extern void ext4_release_system_zone(struct super_block *sb);
|
|
extern int ext4_setup_system_zone(struct super_block *sb);
|
|
extern int __init ext4_init_system_zone(void);
|
|
extern void ext4_exit_system_zone(void);
|
|
extern int ext4_inode_block_valid(struct inode *inode,
|
|
ext4_fsblk_t start_blk,
|
|
unsigned int count);
|
|
extern int ext4_check_blockref(const char *, unsigned int,
|
|
struct inode *, __le32 *, unsigned int);
|
|
extern int ext4_sb_block_valid(struct super_block *sb, struct inode *inode,
|
|
ext4_fsblk_t start_blk, unsigned int count);
|
|
|
|
|
|
/* extents.c */
|
|
struct ext4_ext_path;
|
|
struct ext4_extent;
|
|
|
|
/*
|
|
* Maximum number of logical blocks in a file; ext4_extent's ee_block is
|
|
* __le32.
|
|
*/
|
|
#define EXT_MAX_BLOCKS 0xffffffff
|
|
|
|
extern void ext4_ext_tree_init(handle_t *handle, struct inode *inode);
|
|
extern int ext4_ext_index_trans_blocks(struct inode *inode, int extents);
|
|
extern int ext4_ext_map_blocks(handle_t *handle, struct inode *inode,
|
|
struct ext4_map_blocks *map, int flags);
|
|
extern int ext4_ext_truncate(handle_t *, struct inode *);
|
|
extern int ext4_ext_remove_space(struct inode *inode, ext4_lblk_t start,
|
|
ext4_lblk_t end);
|
|
extern void ext4_ext_init(struct super_block *);
|
|
extern void ext4_ext_release(struct super_block *);
|
|
extern long ext4_fallocate(struct file *file, int mode, loff_t offset,
|
|
loff_t len);
|
|
extern int ext4_convert_unwritten_extents(handle_t *handle, struct inode *inode,
|
|
loff_t offset, ssize_t len);
|
|
extern int ext4_convert_unwritten_io_end_vec(handle_t *handle,
|
|
ext4_io_end_t *io_end);
|
|
extern int ext4_map_blocks(handle_t *handle, struct inode *inode,
|
|
struct ext4_map_blocks *map, int flags);
|
|
extern int ext4_ext_calc_credits_for_single_extent(struct inode *inode,
|
|
int num,
|
|
struct ext4_ext_path *path);
|
|
extern int ext4_ext_insert_extent(handle_t *, struct inode *,
|
|
struct ext4_ext_path **,
|
|
struct ext4_extent *, int);
|
|
extern struct ext4_ext_path *ext4_find_extent(struct inode *, ext4_lblk_t,
|
|
struct ext4_ext_path **,
|
|
int flags);
|
|
extern void ext4_ext_drop_refs(struct ext4_ext_path *);
|
|
extern int ext4_ext_check_inode(struct inode *inode);
|
|
extern ext4_lblk_t ext4_ext_next_allocated_block(struct ext4_ext_path *path);
|
|
extern int ext4_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
|
|
__u64 start, __u64 len);
|
|
extern int ext4_get_es_cache(struct inode *inode,
|
|
struct fiemap_extent_info *fieinfo,
|
|
__u64 start, __u64 len);
|
|
extern int ext4_ext_precache(struct inode *inode);
|
|
extern int ext4_swap_extents(handle_t *handle, struct inode *inode1,
|
|
struct inode *inode2, ext4_lblk_t lblk1,
|
|
ext4_lblk_t lblk2, ext4_lblk_t count,
|
|
int mark_unwritten,int *err);
|
|
extern int ext4_clu_mapped(struct inode *inode, ext4_lblk_t lclu);
|
|
extern int ext4_datasem_ensure_credits(handle_t *handle, struct inode *inode,
|
|
int check_cred, int restart_cred,
|
|
int revoke_cred);
|
|
extern void ext4_ext_replay_shrink_inode(struct inode *inode, ext4_lblk_t end);
|
|
extern int ext4_ext_replay_set_iblocks(struct inode *inode);
|
|
extern int ext4_ext_replay_update_ex(struct inode *inode, ext4_lblk_t start,
|
|
int len, int unwritten, ext4_fsblk_t pblk);
|
|
extern int ext4_ext_clear_bb(struct inode *inode);
|
|
|
|
|
|
/* move_extent.c */
|
|
extern void ext4_double_down_write_data_sem(struct inode *first,
|
|
struct inode *second);
|
|
extern void ext4_double_up_write_data_sem(struct inode *orig_inode,
|
|
struct inode *donor_inode);
|
|
extern int ext4_move_extents(struct file *o_filp, struct file *d_filp,
|
|
__u64 start_orig, __u64 start_donor,
|
|
__u64 len, __u64 *moved_len);
|
|
|
|
/* page-io.c */
|
|
extern int __init ext4_init_pageio(void);
|
|
extern void ext4_exit_pageio(void);
|
|
extern ext4_io_end_t *ext4_init_io_end(struct inode *inode, gfp_t flags);
|
|
extern ext4_io_end_t *ext4_get_io_end(ext4_io_end_t *io_end);
|
|
extern int ext4_put_io_end(ext4_io_end_t *io_end);
|
|
extern void ext4_put_io_end_defer(ext4_io_end_t *io_end);
|
|
extern void ext4_io_submit_init(struct ext4_io_submit *io,
|
|
struct writeback_control *wbc);
|
|
extern void ext4_end_io_rsv_work(struct work_struct *work);
|
|
extern void ext4_io_submit(struct ext4_io_submit *io);
|
|
extern int ext4_bio_write_page(struct ext4_io_submit *io,
|
|
struct page *page,
|
|
int len,
|
|
bool keep_towrite);
|
|
extern struct ext4_io_end_vec *ext4_alloc_io_end_vec(ext4_io_end_t *io_end);
|
|
extern struct ext4_io_end_vec *ext4_last_io_end_vec(ext4_io_end_t *io_end);
|
|
|
|
/* mmp.c */
|
|
extern int ext4_multi_mount_protect(struct super_block *, ext4_fsblk_t);
|
|
|
|
/* mmp.c */
|
|
extern void ext4_stop_mmpd(struct ext4_sb_info *sbi);
|
|
|
|
/* verity.c */
|
|
extern const struct fsverity_operations ext4_verityops;
|
|
|
|
/* orphan.c */
|
|
extern int ext4_orphan_add(handle_t *, struct inode *);
|
|
extern int ext4_orphan_del(handle_t *, struct inode *);
|
|
extern void ext4_orphan_cleanup(struct super_block *sb,
|
|
struct ext4_super_block *es);
|
|
extern void ext4_release_orphan_info(struct super_block *sb);
|
|
extern int ext4_init_orphan_info(struct super_block *sb);
|
|
extern int ext4_orphan_file_empty(struct super_block *sb);
|
|
extern void ext4_orphan_file_block_trigger(
|
|
struct jbd2_buffer_trigger_type *triggers,
|
|
struct buffer_head *bh,
|
|
void *data, size_t size);
|
|
|
|
/*
|
|
* Add new method to test whether block and inode bitmaps are properly
|
|
* initialized. With uninit_bg reading the block from disk is not enough
|
|
* to mark the bitmap uptodate. We need to also zero-out the bitmap
|
|
*/
|
|
#define BH_BITMAP_UPTODATE BH_JBDPrivateStart
|
|
|
|
static inline int bitmap_uptodate(struct buffer_head *bh)
|
|
{
|
|
return (buffer_uptodate(bh) &&
|
|
test_bit(BH_BITMAP_UPTODATE, &(bh)->b_state));
|
|
}
|
|
static inline void set_bitmap_uptodate(struct buffer_head *bh)
|
|
{
|
|
set_bit(BH_BITMAP_UPTODATE, &(bh)->b_state);
|
|
}
|
|
|
|
#define in_range(b, first, len) ((b) >= (first) && (b) <= (first) + (len) - 1)
|
|
|
|
/* For ioend & aio unwritten conversion wait queues */
|
|
#define EXT4_WQ_HASH_SZ 37
|
|
#define ext4_ioend_wq(v) (&ext4__ioend_wq[((unsigned long)(v)) %\
|
|
EXT4_WQ_HASH_SZ])
|
|
extern wait_queue_head_t ext4__ioend_wq[EXT4_WQ_HASH_SZ];
|
|
|
|
extern int ext4_resize_begin(struct super_block *sb);
|
|
extern void ext4_resize_end(struct super_block *sb);
|
|
|
|
static inline void ext4_set_io_unwritten_flag(struct inode *inode,
|
|
struct ext4_io_end *io_end)
|
|
{
|
|
if (!(io_end->flag & EXT4_IO_END_UNWRITTEN)) {
|
|
io_end->flag |= EXT4_IO_END_UNWRITTEN;
|
|
atomic_inc(&EXT4_I(inode)->i_unwritten);
|
|
}
|
|
}
|
|
|
|
static inline void ext4_clear_io_unwritten_flag(ext4_io_end_t *io_end)
|
|
{
|
|
struct inode *inode = io_end->inode;
|
|
|
|
if (io_end->flag & EXT4_IO_END_UNWRITTEN) {
|
|
io_end->flag &= ~EXT4_IO_END_UNWRITTEN;
|
|
/* Wake up anyone waiting on unwritten extent conversion */
|
|
if (atomic_dec_and_test(&EXT4_I(inode)->i_unwritten))
|
|
wake_up_all(ext4_ioend_wq(inode));
|
|
}
|
|
}
|
|
|
|
extern const struct iomap_ops ext4_iomap_ops;
|
|
extern const struct iomap_ops ext4_iomap_overwrite_ops;
|
|
extern const struct iomap_ops ext4_iomap_report_ops;
|
|
|
|
static inline int ext4_buffer_uptodate(struct buffer_head *bh)
|
|
{
|
|
/*
|
|
* If the buffer has the write error flag, we have failed
|
|
* to write out data in the block. In this case, we don't
|
|
* have to read the block because we may read the old data
|
|
* successfully.
|
|
*/
|
|
if (buffer_write_io_error(bh))
|
|
set_buffer_uptodate(bh);
|
|
return buffer_uptodate(bh);
|
|
}
|
|
|
|
#endif /* __KERNEL__ */
|
|
|
|
#define EFSBADCRC EBADMSG /* Bad CRC detected */
|
|
#define EFSCORRUPTED EUCLEAN /* Filesystem is corrupted */
|
|
|
|
#endif /* _EXT4_H */
|