Skip to contentSkip to conversation

FAILED: patch "[PATCH] io-wq: add support for inheriting ->fs" failed to apply to 5.5-stable tree

PATCH [email protected] 2 participants 2 messages Feb 17, 2020 – Feb 18, 2020

Subsystems (2)
lore
Share & tools
lore

[email protected]

author maintainer
#0 lore raw

The patch below does not apply to the 5.5-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.

thanks,

greg k-h

------------------ original commit in Linus's tree ------------------

From 9392a27d88b9707145d713654eb26f0c29789e50 Mon Sep 17 00:00:00 2001
From: Jens Axboe <[email protected]>
Date: Thu, 6 Feb 2020 21:42:51 -0700
Subject: [PATCH] io-wq: add support for inheriting ->fs

Some work items need this for relative path lookup, make it available like the other inherited credentials/mm/etc.

fs/io-wq.c +8 -0
index cb60a42b9fdf..7ac4a8876a50 100644
@@ -16,6 +16,7 @@
 #include <linux/slab.h>
 #include <linux/kthread.h>
 #include <linux/rculist_nulls.h>
+#include <linux/fs_struct.h>
 
 #include "io-wq.h"
 
@@ -59,6 +60,7 @@ struct io_worker {
 	const struct cred *cur_creds;
 	const struct cred *saved_creds;
 	struct files_struct *restore_files;
+	struct fs_struct *restore_fs;
 };
 
 #if BITS_PER_LONG == 64
@@ -151,6 +153,9 @@ static bool __io_worker_unuse(struct io_wqe *wqe, struct io_worker *worker)
 		task_unlock(current);
 	}
 
+	if (current->fs != worker->restore_fs)
+		current->fs = worker->restore_fs;
+
 	/*
 	 * If we have an active mm, we need to drop the wq lock before unusing
 	 * it. If we do, return true and let the caller retry the idle loop.
@@ -311,6 +316,7 @@ static void io_worker_start(struct io_wqe *wqe, struct io_worker *worker)
 
 	worker->flags |= (IO_WORKER_F_UP | IO_WORKER_F_RUNNING);
 	worker->restore_files = current->files;
+	worker->restore_fs = current->fs;
 	io_wqe_inc_running(wqe, worker);
 }
 
@@ -481,6 +487,8 @@ static void io_worker_handle_work(struct io_worker *worker)
 			current->files = work->files;
 			task_unlock(current);
 		}
+		if (work->fs && current->fs != work->fs)
+			current->fs = work->fs;
 		if (work->mm != worker->mm)
 			io_wq_switch_mm(worker, work);
 		if (worker->cur_creds != work->creds)
fs/io-wq.h +3 -1
index 50b3378febf2..f152ba677d8f 100644
@@ -74,6 +74,7 @@ struct io_wq_work {
 	struct files_struct *files;
 	struct mm_struct *mm;
 	const struct cred *creds;
+	struct fs_struct *fs;
 	unsigned flags;
 };
 
@@ -81,10 +82,11 @@ struct io_wq_work {
 	do {						\
 		(work)->list.next = NULL;		\
 		(work)->func = _func;			\
-		(work)->flags = 0;			\
 		(work)->files = NULL;			\
 		(work)->mm = NULL;			\
 		(work)->creds = NULL;			\
+		(work)->fs = NULL;			\
+		(work)->flags = 0;			\
 	} while (0)					\
 
 typedef void (get_work_fn)(struct io_wq_work *);
maintainer
#1 lore raw
Quoted 17 lines · On Mon, Feb 17, 2020 at 08:12:06PM +0100, [email protected] wrote:

The patch below does not apply to the 5.5-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.

thanks,

greg k-h

------------------ original commit in Linus's tree ------------------

From 9392a27d88b9707145d713654eb26f0c29789e50 Mon Sep 17 00:00:00 2001
From: Jens Axboe <[email protected]>
Date: Thu, 6 Feb 2020 21:42:51 -0700
Subject: [PATCH] io-wq: add support for inheriting ->fs

Quoted 5 lines

Some work items need this for relative path lookup, make it available like the other inherited credentials/mm/etc.

It needed some context adjustment going back to 5.5 due to cccf0ee83455 ("io_uring/io-wq: don't use static creds/mm assignments").

Do we actually need this on 5.4? I thought io-wq was a 5.5 thing?

Signature · 2 lines
Thanks,
Sasha