From 21dac118b553f9ebfb6b3a809dbe1794dfa9fb0b Mon Sep 17 00:00:00 2001
From: hc <hc@nodka.com>
Date: Mon, 20 Nov 2023 07:59:49 +0000
Subject: [PATCH] r8169 led
---
kernel/fs/squashfs/decompressor_multi_percpu.c | 16 ++++++++++++----
1 files changed, 12 insertions(+), 4 deletions(-)
diff --git a/kernel/fs/squashfs/decompressor_multi_percpu.c b/kernel/fs/squashfs/decompressor_multi_percpu.c
index 23a9c28..6a73c4f 100644
--- a/kernel/fs/squashfs/decompressor_multi_percpu.c
+++ b/kernel/fs/squashfs/decompressor_multi_percpu.c
@@ -10,6 +10,7 @@
#include <linux/slab.h>
#include <linux/percpu.h>
#include <linux/buffer_head.h>
+#include <linux/locallock.h>
#include "squashfs_fs.h"
#include "squashfs_fs_sb.h"
@@ -24,6 +25,8 @@
struct squashfs_stream {
void *stream;
};
+
+static DEFINE_LOCAL_IRQ_LOCK(stream_lock);
void *squashfs_decompressor_create(struct squashfs_sb_info *msblk,
void *comp_opts)
@@ -79,10 +82,15 @@
{
struct squashfs_stream __percpu *percpu =
(struct squashfs_stream __percpu *) msblk->stream;
- struct squashfs_stream *stream = get_cpu_ptr(percpu);
- int res = msblk->decompressor->decompress(msblk, stream->stream, bh, b,
- offset, length, output);
- put_cpu_ptr(stream);
+ struct squashfs_stream *stream;
+ int res;
+
+ stream = get_locked_ptr(stream_lock, percpu);
+
+ res = msblk->decompressor->decompress(msblk, stream->stream, bh, b,
+ offset, length, output);
+
+ put_locked_ptr(stream_lock, stream);
if (res < 0)
ERROR("%s decompression failed, data probably corrupt\n",
--
Gitblit v1.6.2