mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
Merge tag 'mm-nonmm-stable-2025-10-02-15-29' of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm
Pull non-MM updates from Andrew Morton: - "ida: Remove the ida_simple_xxx() API" from Christophe Jaillet completes the removal of this legacy IDR API - "panic: introduce panic status function family" from Jinchao Wang provides a number of cleanups to the panic code and its various helpers, which were rather ad-hoc and scattered all over the place - "tools/delaytop: implement real-time keyboard interaction support" from Fan Yu adds a few nice user-facing usability changes to the delaytop monitoring tool - "efi: Fix EFI boot with kexec handover (KHO)" from Evangelos Petrongonas fixes a panic which was happening with the combination of EFI and KHO - "Squashfs: performance improvement and a sanity check" from Phillip Lougher teaches squashfs's lseek() about SEEK_DATA/SEEK_HOLE. A mere 150x speedup was measured for a well-chosen microbenchmark - plus another 50-odd singleton patches all over the place * tag 'mm-nonmm-stable-2025-10-02-15-29' of git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm: (75 commits) Squashfs: reject negative file sizes in squashfs_read_inode() kallsyms: use kmalloc_array() instead of kmalloc() MAINTAINERS: update Sibi Sankar's email address Squashfs: add SEEK_DATA/SEEK_HOLE support Squashfs: add additional inode sanity checking lib/genalloc: fix device leak in of_gen_pool_get() panic: remove CONFIG_PANIC_ON_OOPS_VALUE ocfs2: fix double free in user_cluster_connect() checkpatch: suppress strscpy warnings for userspace tools cramfs: fix incorrect physical page address calculation kernel: prevent prctl(PR_SET_PDEATHSIG) from racing with parent process exit Squashfs: fix uninit-value in squashfs_get_parent kho: only fill kimage if KHO is finalized ocfs2: avoid extra calls to strlen() after ocfs2_sprintf_system_inode_name() kernel/sys.c: fix the racy usage of task_lock(tsk->group_leader) in sys_prlimit64() paths sched/task.h: fix the wrong comment on task_lock() nesting with tasklist_lock coccinelle: platform_no_drv_owner: handle also built-in drivers coccinelle: of_table: handle SPI device ID tables lib/decompress: use designated initializers for struct compress_format efi: support booting with kexec handover (KHO) ...
This commit is contained in:
@@ -721,7 +721,8 @@ Shuah Khan <shuah@kernel.org> <shuahkhan@gmail.com>
|
||||
Shuah Khan <shuah@kernel.org> <shuah.khan@hp.com>
|
||||
Shuah Khan <shuah@kernel.org> <shuahkh@osg.samsung.com>
|
||||
Shuah Khan <shuah@kernel.org> <shuah.kh@samsung.com>
|
||||
Sibi Sankar <quic_sibis@quicinc.com> <sibis@codeaurora.org>
|
||||
Sibi Sankar <sibi.sankar@oss.qualcomm.com> <sibis@codeaurora.org>
|
||||
Sibi Sankar <sibi.sankar@oss.qualcomm.com> <quic_sibis@quicinc.com>
|
||||
Sid Manning <quic_sidneym@quicinc.com> <sidneym@codeaurora.org>
|
||||
Simon Arlott <simon@octiron.net> <simon@fire.lp0.eu>
|
||||
Simona Vetter <simona.vetter@ffwll.ch> <daniel.vetter@ffwll.ch>
|
||||
|
||||
@@ -134,47 +134,72 @@ The above command can be used with -v to get more debug information.
|
||||
|
||||
After the system starts, use `delaytop` to get the system-wide delay information,
|
||||
which includes system-wide PSI information and Top-N high-latency tasks.
|
||||
Note: PSI support requires `CONFIG_PSI=y` and `psi=1` for full functionality.
|
||||
|
||||
`delaytop` supports sorting by CPU latency in descending order by default,
|
||||
displays the top 20 high-latency tasks by default, and refreshes the latency
|
||||
data every 2 seconds by default.
|
||||
`delaytop` is an interactive tool for monitoring system pressure and task delays.
|
||||
It supports multiple sorting options, display modes, and real-time keyboard controls.
|
||||
|
||||
Get PSI information and Top-N tasks delay, since system boot::
|
||||
Basic usage with default settings (sorts by CPU delay, shows top 20 tasks, refreshes every 2 seconds)::
|
||||
|
||||
bash# ./delaytop
|
||||
System Pressure Information: (avg10/avg60/avg300/total)
|
||||
CPU some: 0.0%/ 0.0%/ 0.0%/ 345(ms)
|
||||
System Pressure Information: (avg10/avg60vg300/total)
|
||||
CPU some: 0.0%/ 0.0%/ 0.0%/ 106137(ms)
|
||||
CPU full: 0.0%/ 0.0%/ 0.0%/ 0(ms)
|
||||
Memory full: 0.0%/ 0.0%/ 0.0%/ 0(ms)
|
||||
Memory some: 0.0%/ 0.0%/ 0.0%/ 0(ms)
|
||||
IO full: 0.0%/ 0.0%/ 0.0%/ 65(ms)
|
||||
IO some: 0.0%/ 0.0%/ 0.0%/ 79(ms)
|
||||
IO full: 0.0%/ 0.0%/ 0.0%/ 2240(ms)
|
||||
IO some: 0.0%/ 0.0%/ 0.0%/ 2783(ms)
|
||||
IRQ full: 0.0%/ 0.0%/ 0.0%/ 0(ms)
|
||||
Top 20 processes (sorted by CPU delay):
|
||||
PID TGID COMMAND CPU(ms) IO(ms) SWAP(ms) RCL(ms) THR(ms) CMP(ms) WP(ms) IRQ(ms)
|
||||
----------------------------------------------------------------------------------------------
|
||||
161 161 zombie_memcg_re 1.40 0.00 0.00 0.00 0.00 0.00 0.00 0.00
|
||||
130 130 blkcg_punt_bio 1.37 0.00 0.00 0.00 0.00 0.00 0.00 0.00
|
||||
444 444 scsi_tmf_0 0.73 0.00 0.00 0.00 0.00 0.00 0.00 0.00
|
||||
1280 1280 rsyslogd 0.53 0.04 0.00 0.00 0.00 0.00 0.00 0.00
|
||||
12 12 ksoftirqd/0 0.47 0.00 0.00 0.00 0.00 0.00 0.00 0.00
|
||||
1277 1277 nbd-server 0.44 0.00 0.00 0.00 0.00 0.00 0.00 0.00
|
||||
308 308 kworker/2:2-sys 0.41 0.00 0.00 0.00 0.00 0.00 0.00 0.00
|
||||
55 55 netns 0.36 0.00 0.00 0.00 0.00 0.00 0.00 0.00
|
||||
1187 1187 acpid 0.31 0.03 0.00 0.00 0.00 0.00 0.00 0.00
|
||||
6184 6184 kworker/1:2-sys 0.24 0.00 0.00 0.00 0.00 0.00 0.00 0.00
|
||||
186 186 kaluad 0.24 0.00 0.00 0.00 0.00 0.00 0.00 0.00
|
||||
18 18 ksoftirqd/1 0.24 0.00 0.00 0.00 0.00 0.00 0.00 0.00
|
||||
185 185 kmpath_rdacd 0.23 0.00 0.00 0.00 0.00 0.00 0.00 0.00
|
||||
190 190 kstrp 0.23 0.00 0.00 0.00 0.00 0.00 0.00 0.00
|
||||
2759 2759 agetty 0.20 0.03 0.00 0.00 0.00 0.00 0.00 0.00
|
||||
1190 1190 kworker/0:3-sys 0.19 0.00 0.00 0.00 0.00 0.00 0.00 0.00
|
||||
1272 1272 sshd 0.15 0.04 0.00 0.00 0.00 0.00 0.00 0.00
|
||||
1156 1156 license 0.15 0.11 0.00 0.00 0.00 0.00 0.00 0.00
|
||||
134 134 md 0.13 0.00 0.00 0.00 0.00 0.00 0.00 0.00
|
||||
6142 6142 kworker/3:2-xfs 0.13 0.00 0.00 0.00 0.00 0.00 0.00 0.00
|
||||
[o]sort [M]memverbose [q]quit
|
||||
Top 20 processes (sorted by cpu delay):
|
||||
PID TGID COMMAND CPU(ms) IO(ms) IRQ(ms) MEM(ms)
|
||||
------------------------------------------------------------------------
|
||||
110 110 kworker/15:0H-s 27.91 0.00 0.00 0.00
|
||||
57 57 cpuhp/7 3.18 0.00 0.00 0.00
|
||||
99 99 cpuhp/14 2.97 0.00 0.00 0.00
|
||||
51 51 cpuhp/6 0.90 0.00 0.00 0.00
|
||||
44 44 kworker/4:0H-sy 0.80 0.00 0.00 0.00
|
||||
60 60 ksoftirqd/7 0.74 0.00 0.00 0.00
|
||||
76 76 idle_inject/10 0.31 0.00 0.00 0.00
|
||||
100 100 idle_inject/14 0.30 0.00 0.00 0.00
|
||||
1309 1309 systemsettings 0.29 0.00 0.00 0.00
|
||||
45 45 cpuhp/5 0.22 0.00 0.00 0.00
|
||||
63 63 cpuhp/8 0.20 0.00 0.00 0.00
|
||||
87 87 cpuhp/12 0.18 0.00 0.00 0.00
|
||||
93 93 cpuhp/13 0.17 0.00 0.00 0.00
|
||||
1265 1265 acpid 0.17 0.00 0.00 0.00
|
||||
1552 1552 sshd 0.17 0.00 0.00 0.00
|
||||
2584 2584 sddm-helper 0.16 0.00 0.00 0.00
|
||||
1284 1284 rtkit-daemon 0.15 0.00 0.00 0.00
|
||||
1326 1326 nde-netfilter 0.14 0.00 0.00 0.00
|
||||
27 27 cpuhp/2 0.13 0.00 0.00 0.00
|
||||
631 631 kworker/11:2-rc 0.11 0.00 0.00 0.00
|
||||
|
||||
Dynamic interactive interface of delaytop::
|
||||
Interactive keyboard controls during runtime::
|
||||
|
||||
o - Select sort field (CPU, IO, IRQ, Memory, etc.)
|
||||
M - Toggle display mode (Default/Memory Verbose)
|
||||
q - Quit
|
||||
|
||||
Available sort fields(use -s/--sort or interactive command)::
|
||||
|
||||
cpu(c) - CPU delay
|
||||
blkio(i) - I/O delay
|
||||
irq(q) - IRQ delay
|
||||
mem(m) - Total memory delay
|
||||
swapin(s) - Swapin delay (memory verbose mode only)
|
||||
freepages(r) - Freepages reclaim delay (memory verbose mode only)
|
||||
thrashing(t) - Thrashing delay (memory verbose mode only)
|
||||
compact(p) - Compaction delay (memory verbose mode only)
|
||||
wpcopy(w) - Write page copy delay (memory verbose mode only)
|
||||
|
||||
Advanced usage examples::
|
||||
|
||||
# ./delaytop -s blkio
|
||||
Sorted by IO delay
|
||||
|
||||
# ./delaytop -s mem -M
|
||||
Sorted by memory delay in memory verbose mode
|
||||
|
||||
# ./delaytop -p pid
|
||||
Print delayacct stats
|
||||
|
||||
@@ -4603,7 +4603,7 @@
|
||||
bit 2: print timer info
|
||||
bit 3: print locks info if CONFIG_LOCKDEP is on
|
||||
bit 4: print ftrace buffer
|
||||
bit 5: replay all messages on consoles at the end of panic
|
||||
bit 5: replay all kernel messages on consoles at the end of panic
|
||||
bit 6: print all CPUs backtrace (if available in the arch)
|
||||
bit 7: print only tasks in uninterruptible (blocked) state
|
||||
*Be aware* that this option may print a _lot_ of lines,
|
||||
|
||||
@@ -890,7 +890,7 @@ bit 1 print system memory info
|
||||
bit 2 print timer info
|
||||
bit 3 print locks info if ``CONFIG_LOCKDEP`` is on
|
||||
bit 4 print ftrace buffer
|
||||
bit 5 replay all messages on consoles at the end of panic
|
||||
bit 5 replay all kernel messages on consoles at the end of panic
|
||||
bit 6 print all CPUs backtrace (if available in the arch)
|
||||
bit 7 print only tasks in uninterruptible (blocked) state
|
||||
===== ============================================
|
||||
|
||||
@@ -361,7 +361,12 @@ local tasks spawned by the process and the global task that handles USB bus #1:
|
||||
*/
|
||||
sleep(2);
|
||||
|
||||
n = __atomic_load_n(&cover[0], __ATOMIC_RELAXED);
|
||||
/*
|
||||
* The load to the coverage count should be an acquire to pair with
|
||||
* pair with the corresponding write memory barrier (smp_wmb()) on
|
||||
* the kernel-side in kcov_move_area().
|
||||
*/
|
||||
n = __atomic_load_n(&cover[0], __ATOMIC_ACQUIRE);
|
||||
for (i = 0; i < n; i++)
|
||||
printf("0x%lx\n", cover[i + 1]);
|
||||
if (ioctl(fd, KCOV_DISABLE, 0))
|
||||
|
||||
+1
-1
@@ -20987,7 +20987,7 @@ F: Documentation/devicetree/bindings/power/avs/qcom,cpr.yaml
|
||||
F: drivers/pmdomain/qcom/cpr.c
|
||||
|
||||
QUALCOMM CPUCP MAILBOX DRIVER
|
||||
M: Sibi Sankar <quic_sibis@quicinc.com>
|
||||
M: Sibi Sankar <sibi.sankar@oss.qualcomm.com>
|
||||
L: linux-arm-msm@vger.kernel.org
|
||||
S: Supported
|
||||
F: Documentation/devicetree/bindings/mailbox/qcom,cpucp-mbox.yaml
|
||||
|
||||
+19
-6
@@ -165,14 +165,23 @@ static struct crash_mem *fill_up_crash_elf_data(void)
|
||||
/*
|
||||
* Exclusion of crash region, crashk_low_res and/or crashk_cma_ranges
|
||||
* may cause range splits. So add extra slots here.
|
||||
*
|
||||
* Exclusion of low 1M may not cause another range split, because the
|
||||
* range of exclude is [0, 1M] and the condition for splitting a new
|
||||
* region is that the start, end parameters are both in a certain
|
||||
* existing region in cmem and cannot be equal to existing region's
|
||||
* start or end. Obviously, the start of [0, 1M] cannot meet this
|
||||
* condition.
|
||||
*
|
||||
* But in order to lest the low 1M could be changed in the future,
|
||||
* (e.g. [start, 1M]), add a extra slot.
|
||||
*/
|
||||
nr_ranges += 2 + crashk_cma_cnt;
|
||||
nr_ranges += 3 + crashk_cma_cnt;
|
||||
cmem = vzalloc(struct_size(cmem, ranges, nr_ranges));
|
||||
if (!cmem)
|
||||
return NULL;
|
||||
|
||||
cmem->max_nr_ranges = nr_ranges;
|
||||
cmem->nr_ranges = 0;
|
||||
|
||||
return cmem;
|
||||
}
|
||||
@@ -323,16 +332,20 @@ int crash_setup_memmap_entries(struct kimage *image, struct boot_params *params)
|
||||
struct crash_mem *cmem;
|
||||
|
||||
/*
|
||||
* Using random kexec_buf for passing dm crypt keys may cause a range
|
||||
* split. So use two slots here.
|
||||
* In the current x86 architecture code, the elfheader is always
|
||||
* allocated at crashk_res.start. But it depends on the allocation
|
||||
* position of elfheader in crashk_res. To avoid potential out of
|
||||
* bounds in future, add an extra slot.
|
||||
*
|
||||
* And using random kexec_buf for passing dm crypt keys may cause a
|
||||
* range split too, add another extra slot here.
|
||||
*/
|
||||
nr_ranges = 2;
|
||||
nr_ranges = 3;
|
||||
cmem = vzalloc(struct_size(cmem, ranges, nr_ranges));
|
||||
if (!cmem)
|
||||
return -ENOMEM;
|
||||
|
||||
cmem->max_nr_ranges = nr_ranges;
|
||||
cmem->nr_ranges = 0;
|
||||
|
||||
memset(&cmd, 0, sizeof(struct crash_memmap_data));
|
||||
cmd.params = params;
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
#include <linux/kexec.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/mm.h>
|
||||
#include <linux/libfdt.h>
|
||||
#include <linux/of_fdt.h>
|
||||
#include <linux/efi.h>
|
||||
#include <linux/random.h>
|
||||
|
||||
@@ -212,6 +214,28 @@ setup_efi_state(struct boot_params *params, unsigned long params_load_addr,
|
||||
}
|
||||
#endif /* CONFIG_EFI */
|
||||
|
||||
#ifdef CONFIG_OF_FLATTREE
|
||||
static void setup_dtb(struct boot_params *params,
|
||||
unsigned long params_load_addr,
|
||||
unsigned int dtb_setup_data_offset)
|
||||
{
|
||||
struct setup_data *sd = (void *)params + dtb_setup_data_offset;
|
||||
unsigned long setup_data_phys, dtb_len;
|
||||
|
||||
dtb_len = fdt_totalsize(initial_boot_params);
|
||||
sd->type = SETUP_DTB;
|
||||
sd->len = dtb_len;
|
||||
|
||||
/* Carry over current boot DTB with setup_data */
|
||||
memcpy(sd->data, initial_boot_params, dtb_len);
|
||||
|
||||
/* Add setup data */
|
||||
setup_data_phys = params_load_addr + dtb_setup_data_offset;
|
||||
sd->next = params->hdr.setup_data;
|
||||
params->hdr.setup_data = setup_data_phys;
|
||||
}
|
||||
#endif /* CONFIG_OF_FLATTREE */
|
||||
|
||||
static void
|
||||
setup_ima_state(const struct kimage *image, struct boot_params *params,
|
||||
unsigned long params_load_addr,
|
||||
@@ -336,6 +360,17 @@ setup_boot_parameters(struct kimage *image, struct boot_params *params,
|
||||
sizeof(struct efi_setup_data);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_OF_FLATTREE
|
||||
if (image->force_dtb && initial_boot_params) {
|
||||
setup_dtb(params, params_load_addr, setup_data_offset);
|
||||
setup_data_offset += sizeof(struct setup_data) +
|
||||
fdt_totalsize(initial_boot_params);
|
||||
} else {
|
||||
pr_debug("Not carrying over DTB, force_dtb = %d\n",
|
||||
image->force_dtb);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (IS_ENABLED(CONFIG_IMA_KEXEC)) {
|
||||
/* Setup IMA log buffer state */
|
||||
setup_ima_state(image, params, params_load_addr,
|
||||
@@ -529,6 +564,12 @@ static void *bzImage64_load(struct kimage *image, char *kernel,
|
||||
sizeof(struct setup_data) +
|
||||
RNG_SEED_LENGTH;
|
||||
|
||||
#ifdef CONFIG_OF_FLATTREE
|
||||
if (image->force_dtb && initial_boot_params)
|
||||
kbuf.bufsz += sizeof(struct setup_data) +
|
||||
fdt_totalsize(initial_boot_params);
|
||||
#endif
|
||||
|
||||
if (IS_ENABLED(CONFIG_IMA_KEXEC))
|
||||
kbuf.bufsz += sizeof(struct setup_data) +
|
||||
sizeof(struct ima_setup_data);
|
||||
@@ -537,7 +578,7 @@ static void *bzImage64_load(struct kimage *image, char *kernel,
|
||||
kbuf.bufsz += sizeof(struct setup_data) +
|
||||
sizeof(struct kho_data);
|
||||
|
||||
params = kzalloc(kbuf.bufsz, GFP_KERNEL);
|
||||
params = kvzalloc(kbuf.bufsz, GFP_KERNEL);
|
||||
if (!params)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
efi_map_offset = params_cmdline_sz;
|
||||
@@ -647,7 +688,7 @@ static void *bzImage64_load(struct kimage *image, char *kernel,
|
||||
return ldata;
|
||||
|
||||
out_free_params:
|
||||
kfree(params);
|
||||
kvfree(params);
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
@@ -659,7 +700,7 @@ static int bzImage64_cleanup(void *loader_data)
|
||||
if (!ldata)
|
||||
return 0;
|
||||
|
||||
kfree(ldata->bootparams_buf);
|
||||
kvfree(ldata->bootparams_buf);
|
||||
ldata->bootparams_buf = NULL;
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#include <linux/efi.h>
|
||||
#include <linux/fwnode.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/kexec_handover.h>
|
||||
#include <linux/memblock.h>
|
||||
#include <linux/mm_types.h>
|
||||
#include <linux/of.h>
|
||||
@@ -164,12 +165,32 @@ static __init void reserve_regions(void)
|
||||
pr_info("Processing EFI memory map:\n");
|
||||
|
||||
/*
|
||||
* Discard memblocks discovered so far: if there are any at this
|
||||
* point, they originate from memory nodes in the DT, and UEFI
|
||||
* uses its own memory map instead.
|
||||
* Discard memblocks discovered so far except for KHO scratch
|
||||
* regions. Most memblocks at this point originate from memory nodes
|
||||
* in the DT and UEFI uses its own memory map instead. However, if
|
||||
* KHO is enabled, scratch regions, which are good known memory
|
||||
* must be preserved.
|
||||
*/
|
||||
memblock_dump_all();
|
||||
memblock_remove(0, PHYS_ADDR_MAX);
|
||||
|
||||
if (is_kho_boot()) {
|
||||
struct memblock_region *r;
|
||||
|
||||
/* Remove all non-KHO regions */
|
||||
for_each_mem_region(r) {
|
||||
if (!memblock_is_kho_scratch(r)) {
|
||||
memblock_remove(r->base, r->size);
|
||||
r--;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
/*
|
||||
* KHO is disabled. Discard memblocks discovered so far:
|
||||
* if there are any at this point, they originate from memory
|
||||
* nodes in the DT, and UEFI uses its own memory map instead.
|
||||
*/
|
||||
memblock_remove(0, PHYS_ADDR_MAX);
|
||||
}
|
||||
|
||||
for_each_efi_memory_desc(md) {
|
||||
paddr = md->phys_addr;
|
||||
|
||||
@@ -279,14 +279,7 @@ static int fbcon_get_rotate(struct fb_info *info)
|
||||
|
||||
static bool fbcon_skip_panic(struct fb_info *info)
|
||||
{
|
||||
/* panic_cpu is not exported, and can't be used if built as module. Use
|
||||
* oops_in_progress instead, but non-fatal oops won't be printed.
|
||||
*/
|
||||
#if defined(MODULE)
|
||||
return (info->skip_panic && unlikely(oops_in_progress));
|
||||
#else
|
||||
return (info->skip_panic && unlikely(atomic_read(&panic_cpu) != PANIC_CPU_INVALID));
|
||||
#endif
|
||||
return (info->skip_panic && unlikely(panic_in_progress()));
|
||||
}
|
||||
|
||||
static inline bool fbcon_is_active(struct vc_data *vc, struct fb_info *info)
|
||||
|
||||
+1
-1
@@ -421,7 +421,7 @@ static int cramfs_physmem_mmap(struct file *file, struct vm_area_struct *vma)
|
||||
vm_fault_t vmf;
|
||||
unsigned long off = i * PAGE_SIZE;
|
||||
vmf = vmf_insert_mixed(vma, vma->vm_start + off,
|
||||
address + off);
|
||||
PHYS_PFN(address + off));
|
||||
if (vmf & VM_FAULT_ERROR)
|
||||
ret = vm_fault_to_errno(vmf, 0);
|
||||
}
|
||||
|
||||
+3
-4
@@ -1209,7 +1209,7 @@ EXPORT_SYMBOL_GPL(fat_alloc_new_dir);
|
||||
|
||||
static int fat_add_new_entries(struct inode *dir, void *slots, int nr_slots,
|
||||
int *nr_cluster, struct msdos_dir_entry **de,
|
||||
struct buffer_head **bh, loff_t *i_pos)
|
||||
struct buffer_head **bh)
|
||||
{
|
||||
struct super_block *sb = dir->i_sb;
|
||||
struct msdos_sb_info *sbi = MSDOS_SB(sb);
|
||||
@@ -1269,7 +1269,6 @@ static int fat_add_new_entries(struct inode *dir, void *slots, int nr_slots,
|
||||
get_bh(bhs[n]);
|
||||
*bh = bhs[n];
|
||||
*de = (struct msdos_dir_entry *)((*bh)->b_data + offset);
|
||||
*i_pos = fat_make_i_pos(sb, *bh, *de);
|
||||
|
||||
/* Second stage: clear the rest of cluster, and write outs */
|
||||
err = fat_zeroed_cluster(dir, start_blknr, ++n, bhs, MAX_BUF_PER_PAGE);
|
||||
@@ -1298,7 +1297,7 @@ int fat_add_entries(struct inode *dir, void *slots, int nr_slots,
|
||||
struct buffer_head *bh, *prev, *bhs[3]; /* 32*slots (672bytes) */
|
||||
struct msdos_dir_entry *de;
|
||||
int err, free_slots, i, nr_bhs;
|
||||
loff_t pos, i_pos;
|
||||
loff_t pos;
|
||||
|
||||
sinfo->nr_slots = nr_slots;
|
||||
|
||||
@@ -1386,7 +1385,7 @@ found:
|
||||
* add the cluster to dir.
|
||||
*/
|
||||
cluster = fat_add_new_entries(dir, slots, nr_slots, &nr_cluster,
|
||||
&de, &bh, &i_pos);
|
||||
&de, &bh);
|
||||
if (cluster < 0) {
|
||||
err = cluster;
|
||||
goto error_remove;
|
||||
|
||||
+1
-2
@@ -6928,8 +6928,7 @@ static int ocfs2_grab_folios(struct inode *inode, loff_t start, loff_t end,
|
||||
|
||||
out:
|
||||
if (ret != 0) {
|
||||
if (folios)
|
||||
ocfs2_unlock_and_free_folios(folios, numfolios);
|
||||
ocfs2_unlock_and_free_folios(folios, numfolios);
|
||||
numfolios = 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -1477,7 +1477,6 @@ way_up_top:
|
||||
goto send_response;
|
||||
} else if (res->owner != DLM_LOCK_RES_OWNER_UNKNOWN) {
|
||||
spin_unlock(&res->spinlock);
|
||||
// mlog(0, "node %u is the master\n", res->owner);
|
||||
response = DLM_MASTER_RESP_NO;
|
||||
if (mle)
|
||||
kmem_cache_free(dlm_mle_cache, mle);
|
||||
@@ -1493,7 +1492,6 @@ way_up_top:
|
||||
BUG();
|
||||
}
|
||||
|
||||
// mlog(0, "lockres is in progress...\n");
|
||||
spin_lock(&dlm->master_lock);
|
||||
found = dlm_find_mle(dlm, &tmpmle, name, namelen);
|
||||
if (!found) {
|
||||
@@ -1503,8 +1501,6 @@ way_up_top:
|
||||
set_maybe = 1;
|
||||
spin_lock(&tmpmle->spinlock);
|
||||
if (tmpmle->type == DLM_MLE_BLOCK) {
|
||||
// mlog(0, "this node is waiting for "
|
||||
// "lockres to be mastered\n");
|
||||
response = DLM_MASTER_RESP_NO;
|
||||
} else if (tmpmle->type == DLM_MLE_MIGRATION) {
|
||||
mlog(0, "node %u is master, but trying to migrate to "
|
||||
@@ -1531,8 +1527,6 @@ way_up_top:
|
||||
} else
|
||||
response = DLM_MASTER_RESP_NO;
|
||||
} else {
|
||||
// mlog(0, "this node is attempting to "
|
||||
// "master lockres\n");
|
||||
response = DLM_MASTER_RESP_MAYBE;
|
||||
}
|
||||
if (set_maybe)
|
||||
@@ -1559,7 +1553,6 @@ way_up_top:
|
||||
found = dlm_find_mle(dlm, &tmpmle, name, namelen);
|
||||
if (!found) {
|
||||
/* this lockid has never been seen on this node yet */
|
||||
// mlog(0, "no mle found\n");
|
||||
if (!mle) {
|
||||
spin_unlock(&dlm->master_lock);
|
||||
spin_unlock(&dlm->spinlock);
|
||||
@@ -1573,8 +1566,6 @@ way_up_top:
|
||||
goto way_up_top;
|
||||
}
|
||||
|
||||
// mlog(0, "this is second time thru, already allocated, "
|
||||
// "add the block.\n");
|
||||
dlm_init_mle(mle, DLM_MLE_BLOCK, dlm, NULL, name, namelen);
|
||||
set_bit(request->node_idx, mle->maybe_map);
|
||||
__dlm_insert_mle(dlm, mle);
|
||||
@@ -1897,8 +1888,6 @@ ok:
|
||||
spin_unlock(&res->spinlock);
|
||||
}
|
||||
|
||||
// mlog(0, "woo! got an assert_master from node %u!\n",
|
||||
// assert->node_idx);
|
||||
if (mle) {
|
||||
int extra_ref = 0;
|
||||
int nn = -1;
|
||||
|
||||
@@ -464,7 +464,6 @@ static int dlm_do_recovery(struct dlm_ctxt *dlm)
|
||||
}
|
||||
|
||||
if (dlm->reco.dead_node == O2NM_INVALID_NODE_NUM) {
|
||||
// mlog(0, "nothing to recover! sleeping now!\n");
|
||||
spin_unlock(&dlm->spinlock);
|
||||
/* return to main thread loop and sleep. */
|
||||
return 0;
|
||||
|
||||
@@ -1495,6 +1495,14 @@ int ocfs2_validate_inode_block(struct super_block *sb,
|
||||
goto bail;
|
||||
}
|
||||
|
||||
if (le16_to_cpu(di->i_suballoc_slot) != (u16)OCFS2_INVALID_SLOT &&
|
||||
(u32)le16_to_cpu(di->i_suballoc_slot) > OCFS2_SB(sb)->max_slots - 1) {
|
||||
rc = ocfs2_error(sb, "Invalid dinode %llu: suballoc slot %u\n",
|
||||
(unsigned long long)bh->b_blocknr,
|
||||
le16_to_cpu(di->i_suballoc_slot));
|
||||
goto bail;
|
||||
}
|
||||
|
||||
rc = 0;
|
||||
|
||||
bail:
|
||||
|
||||
+7
-11
@@ -358,13 +358,11 @@ static int ocfs2_info_handle_freeinode(struct inode *inode,
|
||||
goto bail;
|
||||
}
|
||||
} else {
|
||||
ocfs2_sprintf_system_inode_name(namebuf,
|
||||
sizeof(namebuf),
|
||||
type, i);
|
||||
int len = ocfs2_sprintf_system_inode_name(namebuf,
|
||||
sizeof(namebuf),
|
||||
type, i);
|
||||
status = ocfs2_lookup_ino_from_name(osb->sys_root_inode,
|
||||
namebuf,
|
||||
strlen(namebuf),
|
||||
&blkno);
|
||||
namebuf, len, &blkno);
|
||||
if (status < 0) {
|
||||
status = -ENOENT;
|
||||
goto bail;
|
||||
@@ -651,12 +649,10 @@ static int ocfs2_info_handle_freefrag(struct inode *inode,
|
||||
goto bail;
|
||||
}
|
||||
} else {
|
||||
ocfs2_sprintf_system_inode_name(namebuf, sizeof(namebuf), type,
|
||||
OCFS2_INVALID_SLOT);
|
||||
int len = ocfs2_sprintf_system_inode_name(namebuf, sizeof(namebuf),
|
||||
type, OCFS2_INVALID_SLOT);
|
||||
status = ocfs2_lookup_ino_from_name(osb->sys_root_inode,
|
||||
namebuf,
|
||||
strlen(namebuf),
|
||||
&blkno);
|
||||
namebuf, len, &blkno);
|
||||
if (status < 0) {
|
||||
status = -ENOENT;
|
||||
goto bail;
|
||||
|
||||
@@ -364,7 +364,7 @@ static int ocfs2_find_victim_alloc_group(struct inode *inode,
|
||||
int *vict_bit,
|
||||
struct buffer_head **ret_bh)
|
||||
{
|
||||
int ret, i, bits_per_unit = 0;
|
||||
int ret, i, len, bits_per_unit = 0;
|
||||
u64 blkno;
|
||||
char namebuf[40];
|
||||
|
||||
@@ -375,9 +375,9 @@ static int ocfs2_find_victim_alloc_group(struct inode *inode,
|
||||
struct ocfs2_dinode *ac_dinode;
|
||||
struct ocfs2_group_desc *bg;
|
||||
|
||||
ocfs2_sprintf_system_inode_name(namebuf, sizeof(namebuf), type, slot);
|
||||
ret = ocfs2_lookup_ino_from_name(osb->sys_root_inode, namebuf,
|
||||
strlen(namebuf), &blkno);
|
||||
len = ocfs2_sprintf_system_inode_name(namebuf, sizeof(namebuf), type, slot);
|
||||
ret = ocfs2_lookup_ino_from_name(osb->sys_root_inode, namebuf, len, &blkno);
|
||||
|
||||
if (ret) {
|
||||
ret = -ENOENT;
|
||||
goto out;
|
||||
|
||||
+1
-1
@@ -614,7 +614,7 @@ struct ocfs2_super_block {
|
||||
__le16 s_reserved0;
|
||||
__le32 s_dx_seed[3]; /* seed[0-2] for dx dir hash.
|
||||
* s_uuid_hash serves as seed[3]. */
|
||||
/*C0*/ __le64 s_reserved2[15]; /* Fill out superblock */
|
||||
/*C8*/ __le64 s_reserved2[15]; /* Fill out superblock */
|
||||
/*140*/
|
||||
|
||||
/*
|
||||
|
||||
@@ -1011,6 +1011,7 @@ static int user_cluster_connect(struct ocfs2_cluster_connection *conn)
|
||||
printk(KERN_ERR "ocfs2: Could not determine"
|
||||
" locking version\n");
|
||||
user_cluster_disconnect(conn);
|
||||
lc = NULL;
|
||||
goto out;
|
||||
}
|
||||
wait_event(lc->oc_wait, (atomic_read(&lc->oc_this_node) > 0));
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user