From: Greg Kroah-Hartman Date: Wed, 19 Jun 2024 11:17:54 +0000 (+0200) Subject: drop some unneeded 6.9 patches X-Git-Tag: v6.1.95~31 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f0ccc141a3fd4ab7c98941449ebd8e30c92748c9;p=thirdparty%2Fkernel%2Fstable-queue.git drop some unneeded 6.9 patches --- diff --git a/queue-6.9/af_unix-allocate-struct-unix_vertex-for-each-infligh.patch b/queue-6.9/af_unix-allocate-struct-unix_vertex-for-each-infligh.patch deleted file mode 100644 index 9112511e871..00000000000 --- a/queue-6.9/af_unix-allocate-struct-unix_vertex-for-each-infligh.patch +++ /dev/null @@ -1,212 +0,0 @@ -From 2c81612444e1e204161559f10885b1e9de76e20c Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 25 Mar 2024 13:24:11 -0700 -Subject: af_unix: Allocate struct unix_vertex for each inflight AF_UNIX fd. - -From: Kuniyuki Iwashima - -[ Upstream commit 1fbfdfaa590248c1d86407f578e40e5c65136330 ] - -We will replace the garbage collection algorithm for AF_UNIX, where -we will consider each inflight AF_UNIX socket as a vertex and its file -descriptor as an edge in a directed graph. - -This patch introduces a new struct unix_vertex representing a vertex -in the graph and adds its pointer to struct unix_sock. - -When we send a fd using the SCM_RIGHTS message, we allocate struct -scm_fp_list to struct scm_cookie in scm_fp_copy(). Then, we bump -each refcount of the inflight fds' struct file and save them in -scm_fp_list.fp. - -After that, unix_attach_fds() inexplicably clones scm_fp_list of -scm_cookie and sets it to skb. (We will remove this part after -replacing GC.) - -Here, we add a new function call in unix_attach_fds() to preallocate -struct unix_vertex per inflight AF_UNIX fd and link each vertex to -skb's scm_fp_list.vertices. - -When sendmsg() succeeds later, if the socket of the inflight fd is -still not inflight yet, we will set the preallocated vertex to struct -unix_sock.vertex and link it to a global list unix_unvisited_vertices -under spin_lock(&unix_gc_lock). - -If the socket is already inflight, we free the preallocated vertex. -This is to avoid taking the lock unnecessarily when sendmsg() could -fail later. - -In the following patch, we will similarly allocate another struct -per edge, which will finally be linked to the inflight socket's -unix_vertex.edges. - -And then, we will count the number of edges as unix_vertex.out_degree. - -Signed-off-by: Kuniyuki Iwashima -Acked-by: Paolo Abeni -Link: https://lore.kernel.org/r/20240325202425.60930-2-kuniyu@amazon.com -Signed-off-by: Jakub Kicinski -Stable-dep-of: 1b536948e805 ("af_unix: Annotate data-race of sk->sk_state in unix_accept().") -Signed-off-by: Sasha Levin ---- - include/net/af_unix.h | 9 +++++++++ - include/net/scm.h | 3 +++ - net/core/scm.c | 7 +++++++ - net/unix/af_unix.c | 6 ++++++ - net/unix/garbage.c | 38 ++++++++++++++++++++++++++++++++++++++ - 5 files changed, 63 insertions(+) - -diff --git a/include/net/af_unix.h b/include/net/af_unix.h -index 3dee0b2721aa4..07f0f698c9490 100644 ---- a/include/net/af_unix.h -+++ b/include/net/af_unix.h -@@ -22,9 +22,17 @@ extern unsigned int unix_tot_inflight; - - void unix_inflight(struct user_struct *user, struct file *fp); - void unix_notinflight(struct user_struct *user, struct file *fp); -+int unix_prepare_fpl(struct scm_fp_list *fpl); -+void unix_destroy_fpl(struct scm_fp_list *fpl); - void unix_gc(void); - void wait_for_unix_gc(struct scm_fp_list *fpl); - -+struct unix_vertex { -+ struct list_head edges; -+ struct list_head entry; -+ unsigned long out_degree; -+}; -+ - struct sock *unix_peer_get(struct sock *sk); - - #define UNIX_HASH_MOD (256 - 1) -@@ -62,6 +70,7 @@ struct unix_sock { - struct path path; - struct mutex iolock, bindlock; - struct sock *peer; -+ struct unix_vertex *vertex; - struct list_head link; - unsigned long inflight; - spinlock_t lock; -diff --git a/include/net/scm.h b/include/net/scm.h -index 92276a2c55436..e34321b6e204b 100644 ---- a/include/net/scm.h -+++ b/include/net/scm.h -@@ -27,6 +27,9 @@ struct scm_fp_list { - short count; - short count_unix; - short max; -+#ifdef CONFIG_UNIX -+ struct list_head vertices; -+#endif - struct user_struct *user; - struct file *fp[SCM_MAX_FD]; - }; -diff --git a/net/core/scm.c b/net/core/scm.c -index 9cd4b0a01cd60..87dfec1c33787 100644 ---- a/net/core/scm.c -+++ b/net/core/scm.c -@@ -89,6 +89,9 @@ static int scm_fp_copy(struct cmsghdr *cmsg, struct scm_fp_list **fplp) - fpl->count_unix = 0; - fpl->max = SCM_MAX_FD; - fpl->user = NULL; -+#if IS_ENABLED(CONFIG_UNIX) -+ INIT_LIST_HEAD(&fpl->vertices); -+#endif - } - fpp = &fpl->fp[fpl->count]; - -@@ -376,8 +379,12 @@ struct scm_fp_list *scm_fp_dup(struct scm_fp_list *fpl) - if (new_fpl) { - for (i = 0; i < fpl->count; i++) - get_file(fpl->fp[i]); -+ - new_fpl->max = new_fpl->count; - new_fpl->user = get_uid(fpl->user); -+#if IS_ENABLED(CONFIG_UNIX) -+ INIT_LIST_HEAD(&new_fpl->vertices); -+#endif - } - return new_fpl; - } -diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c -index cbc011ceb89b4..4100541c8c00f 100644 ---- a/net/unix/af_unix.c -+++ b/net/unix/af_unix.c -@@ -974,6 +974,7 @@ static struct sock *unix_create1(struct net *net, struct socket *sock, int kern, - sk->sk_destruct = unix_sock_destructor; - u = unix_sk(sk); - u->inflight = 0; -+ u->vertex = NULL; - u->path.dentry = NULL; - u->path.mnt = NULL; - spin_lock_init(&u->lock); -@@ -1808,6 +1809,9 @@ static int unix_attach_fds(struct scm_cookie *scm, struct sk_buff *skb) - for (i = scm->fp->count - 1; i >= 0; i--) - unix_inflight(scm->fp->user, scm->fp->fp[i]); - -+ if (unix_prepare_fpl(UNIXCB(skb).fp)) -+ return -ENOMEM; -+ - return 0; - } - -@@ -1818,6 +1822,8 @@ static void unix_detach_fds(struct scm_cookie *scm, struct sk_buff *skb) - scm->fp = UNIXCB(skb).fp; - UNIXCB(skb).fp = NULL; - -+ unix_destroy_fpl(scm->fp); -+ - for (i = scm->fp->count - 1; i >= 0; i--) - unix_notinflight(scm->fp->user, scm->fp->fp[i]); - } -diff --git a/net/unix/garbage.c b/net/unix/garbage.c -index 0104be9d47045..8ea7640e032e8 100644 ---- a/net/unix/garbage.c -+++ b/net/unix/garbage.c -@@ -101,6 +101,44 @@ struct unix_sock *unix_get_socket(struct file *filp) - return NULL; - } - -+static void unix_free_vertices(struct scm_fp_list *fpl) -+{ -+ struct unix_vertex *vertex, *next_vertex; -+ -+ list_for_each_entry_safe(vertex, next_vertex, &fpl->vertices, entry) { -+ list_del(&vertex->entry); -+ kfree(vertex); -+ } -+} -+ -+int unix_prepare_fpl(struct scm_fp_list *fpl) -+{ -+ struct unix_vertex *vertex; -+ int i; -+ -+ if (!fpl->count_unix) -+ return 0; -+ -+ for (i = 0; i < fpl->count_unix; i++) { -+ vertex = kmalloc(sizeof(*vertex), GFP_KERNEL); -+ if (!vertex) -+ goto err; -+ -+ list_add(&vertex->entry, &fpl->vertices); -+ } -+ -+ return 0; -+ -+err: -+ unix_free_vertices(fpl); -+ return -ENOMEM; -+} -+ -+void unix_destroy_fpl(struct scm_fp_list *fpl) -+{ -+ unix_free_vertices(fpl); -+} -+ - DEFINE_SPINLOCK(unix_gc_lock); - unsigned int unix_tot_inflight; - static LIST_HEAD(gc_candidates); --- -2.43.0 - diff --git a/queue-6.9/af_unix-annotate-data-race-of-sk-sk_state-in-unix_ac.patch b/queue-6.9/af_unix-annotate-data-race-of-sk-sk_state-in-unix_ac.patch index 7a544911124..52733342ee1 100644 --- a/queue-6.9/af_unix-annotate-data-race-of-sk-sk_state-in-unix_ac.patch +++ b/queue-6.9/af_unix-annotate-data-race-of-sk-sk_state-in-unix_ac.patch @@ -19,22 +19,17 @@ Signed-off-by: Kuniyuki Iwashima Signed-off-by: Paolo Abeni Signed-off-by: Sasha Levin --- - net/unix/af_unix.c | 2 +- + net/unix/af_unix.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) -diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c -index 417cf4adb4e04..23f9efa8c008b 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c -@@ -1706,7 +1706,7 @@ static int unix_accept(struct socket *sock, struct socket *newsock, +@@ -1704,7 +1704,7 @@ static int unix_accept(struct socket *so goto out; - arg->err = -EINVAL; + err = -EINVAL; - if (sk->sk_state != TCP_LISTEN) + if (READ_ONCE(sk->sk_state) != TCP_LISTEN) goto out; /* If socket state is TCP_LISTEN it cannot change (for now...), --- -2.43.0 - diff --git a/queue-6.9/af_unix-read-with-msg_peek-loops-if-the-first-unread.patch b/queue-6.9/af_unix-read-with-msg_peek-loops-if-the-first-unread.patch index a7be8d7c5dd..599093b90c7 100644 --- a/queue-6.9/af_unix-read-with-msg_peek-loops-if-the-first-unread.patch +++ b/queue-6.9/af_unix-read-with-msg_peek-loops-if-the-first-unread.patch @@ -45,14 +45,12 @@ Link: https://lore.kernel.org/r/20240611084639.2248934-1-Rao.Shoaib@oracle.com Signed-off-by: Jakub Kicinski Signed-off-by: Sasha Levin --- - net/unix/af_unix.c | 18 +++++++++--------- + net/unix/af_unix.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) -diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c -index 23f9efa8c008b..bbafe293ef6a1 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c -@@ -2680,18 +2680,18 @@ static struct sk_buff *manage_oob(struct sk_buff *skb, struct sock *sk, +@@ -2672,18 +2672,18 @@ static struct sk_buff *manage_oob(struct if (skb == u->oob_skb) { if (copied) { skb = NULL; @@ -80,6 +78,3 @@ index 23f9efa8c008b..bbafe293ef6a1 100644 } } --- -2.43.0 - diff --git a/queue-6.9/af_unix-save-listener-for-embryo-socket.patch b/queue-6.9/af_unix-save-listener-for-embryo-socket.patch deleted file mode 100644 index 2fb3d1c4d16..00000000000 --- a/queue-6.9/af_unix-save-listener-for-embryo-socket.patch +++ /dev/null @@ -1,83 +0,0 @@ -From ba5c6a7c20e9109378e787b954a8f3efeb0dade3 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Mon, 25 Mar 2024 13:24:17 -0700 -Subject: af_unix: Save listener for embryo socket. - -From: Kuniyuki Iwashima - -[ Upstream commit aed6ecef55d70de3762ce41c561b7f547dbaf107 ] - -This is a prep patch for the following change, where we need to -fetch the listening socket from the successor embryo socket -during GC. - -We add a new field to struct unix_sock to save a pointer to a -listening socket. - -We set it when connect() creates a new socket, and clear it when -accept() is called. - -Signed-off-by: Kuniyuki Iwashima -Acked-by: Paolo Abeni -Link: https://lore.kernel.org/r/20240325202425.60930-8-kuniyu@amazon.com -Signed-off-by: Jakub Kicinski -Stable-dep-of: 1b536948e805 ("af_unix: Annotate data-race of sk->sk_state in unix_accept().") -Signed-off-by: Sasha Levin ---- - include/net/af_unix.h | 1 + - net/unix/af_unix.c | 5 ++++- - 2 files changed, 5 insertions(+), 1 deletion(-) - -diff --git a/include/net/af_unix.h b/include/net/af_unix.h -index 07f0f698c9490..ba863dfc95e1f 100644 ---- a/include/net/af_unix.h -+++ b/include/net/af_unix.h -@@ -70,6 +70,7 @@ struct unix_sock { - struct path path; - struct mutex iolock, bindlock; - struct sock *peer; -+ struct sock *listener; - struct unix_vertex *vertex; - struct list_head link; - unsigned long inflight; -diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c -index 4100541c8c00f..a1938ba24a696 100644 ---- a/net/unix/af_unix.c -+++ b/net/unix/af_unix.c -@@ -973,6 +973,7 @@ static struct sock *unix_create1(struct net *net, struct socket *sock, int kern, - sk->sk_max_ack_backlog = READ_ONCE(net->unx.sysctl_max_dgram_qlen); - sk->sk_destruct = unix_sock_destructor; - u = unix_sk(sk); -+ u->listener = NULL; - u->inflight = 0; - u->vertex = NULL; - u->path.dentry = NULL; -@@ -1601,6 +1602,7 @@ static int unix_stream_connect(struct socket *sock, struct sockaddr *uaddr, - newsk->sk_type = sk->sk_type; - init_peercred(newsk); - newu = unix_sk(newsk); -+ newu->listener = other; - RCU_INIT_POINTER(newsk->sk_wq, &newu->peer_wq); - otheru = unix_sk(other); - -@@ -1696,8 +1698,8 @@ static int unix_accept(struct socket *sock, struct socket *newsock, int flags, - bool kern) - { - struct sock *sk = sock->sk; -- struct sock *tsk; - struct sk_buff *skb; -+ struct sock *tsk; - int err; - - err = -EOPNOTSUPP; -@@ -1722,6 +1724,7 @@ static int unix_accept(struct socket *sock, struct socket *newsock, int flags, - } - - tsk = skb->sk; -+ unix_sk(tsk)->listener = NULL; - skb_free_datagram(sk, skb); - wake_up_interruptible(&unix_sk(sk)->peer_wait); - --- -2.43.0 - diff --git a/queue-6.9/ext4-avoid-overflow-when-setting-values-via-sysfs.patch b/queue-6.9/ext4-avoid-overflow-when-setting-values-via-sysfs.patch deleted file mode 100644 index 1b9a218abcb..00000000000 --- a/queue-6.9/ext4-avoid-overflow-when-setting-values-via-sysfs.patch +++ /dev/null @@ -1,80 +0,0 @@ -From b00bc71eed63b7e71284b41100d766fcd1285162 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 19 Mar 2024 19:33:17 +0800 -Subject: ext4: avoid overflow when setting values via sysfs - -From: Baokun Li - -[ Upstream commit 9e8e819f8f272c4e5dcd0bd6c7450e36481ed139 ] - -When setting values of type unsigned int through sysfs, we use kstrtoul() -to parse it and then truncate part of it as the final set value, when the -set value is greater than UINT_MAX, the set value will not match what we -see because of the truncation. As follows: - - $ echo 4294967296 > /sys/fs/ext4/sda/mb_max_linear_groups - $ cat /sys/fs/ext4/sda/mb_max_linear_groups - 0 - -So we use kstrtouint() to parse the attr_pointer_ui type to avoid the -inconsistency described above. In addition, a judgment is added to avoid -setting s_resv_clusters less than 0. - -Signed-off-by: Baokun Li -Reviewed-by: Jan Kara -Link: https://lore.kernel.org/r/20240319113325.3110393-2-libaokun1@huawei.com -Signed-off-by: Theodore Ts'o -Stable-dep-of: 13df4d44a3aa ("ext4: fix slab-out-of-bounds in ext4_mb_find_good_group_avg_frag_lists()") -Signed-off-by: Sasha Levin ---- - fs/ext4/sysfs.c | 11 ++++++----- - 1 file changed, 6 insertions(+), 5 deletions(-) - -diff --git a/fs/ext4/sysfs.c b/fs/ext4/sysfs.c -index 6d332dff79ddc..ca820620b9742 100644 ---- a/fs/ext4/sysfs.c -+++ b/fs/ext4/sysfs.c -@@ -104,7 +104,7 @@ static ssize_t reserved_clusters_store(struct ext4_sb_info *sbi, - int ret; - - ret = kstrtoull(skip_spaces(buf), 0, &val); -- if (ret || val >= clusters) -+ if (ret || val >= clusters || (s64)val < 0) - return -EINVAL; - - atomic64_set(&sbi->s_resv_clusters, val); -@@ -451,7 +451,8 @@ static ssize_t ext4_attr_store(struct kobject *kobj, - s_kobj); - struct ext4_attr *a = container_of(attr, struct ext4_attr, attr); - void *ptr = calc_ptr(a, sbi); -- unsigned long t; -+ unsigned int t; -+ unsigned long lt; - int ret; - - switch (a->attr_id) { -@@ -460,7 +461,7 @@ static ssize_t ext4_attr_store(struct kobject *kobj, - case attr_pointer_ui: - if (!ptr) - return 0; -- ret = kstrtoul(skip_spaces(buf), 0, &t); -+ ret = kstrtouint(skip_spaces(buf), 0, &t); - if (ret) - return ret; - if (a->attr_ptr == ptr_ext4_super_block_offset) -@@ -471,10 +472,10 @@ static ssize_t ext4_attr_store(struct kobject *kobj, - case attr_pointer_ul: - if (!ptr) - return 0; -- ret = kstrtoul(skip_spaces(buf), 0, &t); -+ ret = kstrtoul(skip_spaces(buf), 0, <); - if (ret) - return ret; -- *((unsigned long *) ptr) = t; -+ *((unsigned long *) ptr) = lt; - return len; - case attr_inode_readahead: - return inode_readahead_blks_store(sbi, buf, len); --- -2.43.0 - diff --git a/queue-6.9/ext4-refactor-out-ext4_generic_attr_show.patch b/queue-6.9/ext4-refactor-out-ext4_generic_attr_show.patch deleted file mode 100644 index 1b940cb2bc0..00000000000 --- a/queue-6.9/ext4-refactor-out-ext4_generic_attr_show.patch +++ /dev/null @@ -1,132 +0,0 @@ -From e8509b358a91de4cab5b87f20011cd3fa492cf01 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Tue, 19 Mar 2024 19:33:19 +0800 -Subject: ext4: refactor out ext4_generic_attr_show() - -From: Baokun Li - -[ Upstream commit 57341fe3179c7694c92dcf99e7f836cee4c800dd ] - -Refactor out the function ext4_generic_attr_show() to handle the reading -of values of various common types, with no functional changes. - -Signed-off-by: Baokun Li -Reviewed-by: Zhang Yi -Reviewed-by: Jan Kara -Link: https://lore.kernel.org/r/20240319113325.3110393-4-libaokun1@huawei.com -Signed-off-by: Theodore Ts'o -Stable-dep-of: 13df4d44a3aa ("ext4: fix slab-out-of-bounds in ext4_mb_find_good_group_avg_frag_lists()") -Signed-off-by: Sasha Levin ---- - fs/ext4/sysfs.c | 74 +++++++++++++++++++++---------------------------- - 1 file changed, 32 insertions(+), 42 deletions(-) - -diff --git a/fs/ext4/sysfs.c b/fs/ext4/sysfs.c -index ca820620b9742..295ea9a32de91 100644 ---- a/fs/ext4/sysfs.c -+++ b/fs/ext4/sysfs.c -@@ -366,13 +366,42 @@ static ssize_t __print_tstamp(char *buf, __le32 lo, __u8 hi) - #define print_tstamp(buf, es, tstamp) \ - __print_tstamp(buf, (es)->tstamp, (es)->tstamp ## _hi) - -+static ssize_t ext4_generic_attr_show(struct ext4_attr *a, -+ struct ext4_sb_info *sbi, char *buf) -+{ -+ void *ptr = calc_ptr(a, sbi); -+ -+ if (!ptr) -+ return 0; -+ -+ switch (a->attr_id) { -+ case attr_inode_readahead: -+ case attr_pointer_ui: -+ if (a->attr_ptr == ptr_ext4_super_block_offset) -+ return sysfs_emit(buf, "%u\n", le32_to_cpup(ptr)); -+ return sysfs_emit(buf, "%u\n", *((unsigned int *) ptr)); -+ case attr_pointer_ul: -+ return sysfs_emit(buf, "%lu\n", *((unsigned long *) ptr)); -+ case attr_pointer_u8: -+ return sysfs_emit(buf, "%u\n", *((unsigned char *) ptr)); -+ case attr_pointer_u64: -+ if (a->attr_ptr == ptr_ext4_super_block_offset) -+ return sysfs_emit(buf, "%llu\n", le64_to_cpup(ptr)); -+ return sysfs_emit(buf, "%llu\n", *((unsigned long long *) ptr)); -+ case attr_pointer_string: -+ return sysfs_emit(buf, "%.*s\n", a->attr_size, (char *) ptr); -+ case attr_pointer_atomic: -+ return sysfs_emit(buf, "%d\n", atomic_read((atomic_t *) ptr)); -+ } -+ return 0; -+} -+ - static ssize_t ext4_attr_show(struct kobject *kobj, - struct attribute *attr, char *buf) - { - struct ext4_sb_info *sbi = container_of(kobj, struct ext4_sb_info, - s_kobj); - struct ext4_attr *a = container_of(attr, struct ext4_attr, attr); -- void *ptr = calc_ptr(a, sbi); - - switch (a->attr_id) { - case attr_delayed_allocation_blocks: -@@ -391,45 +420,6 @@ static ssize_t ext4_attr_show(struct kobject *kobj, - return sysfs_emit(buf, "%llu\n", - (unsigned long long) - percpu_counter_sum(&sbi->s_sra_exceeded_retry_limit)); -- case attr_inode_readahead: -- case attr_pointer_ui: -- if (!ptr) -- return 0; -- if (a->attr_ptr == ptr_ext4_super_block_offset) -- return sysfs_emit(buf, "%u\n", -- le32_to_cpup(ptr)); -- else -- return sysfs_emit(buf, "%u\n", -- *((unsigned int *) ptr)); -- case attr_pointer_ul: -- if (!ptr) -- return 0; -- return sysfs_emit(buf, "%lu\n", -- *((unsigned long *) ptr)); -- case attr_pointer_u8: -- if (!ptr) -- return 0; -- return sysfs_emit(buf, "%u\n", -- *((unsigned char *) ptr)); -- case attr_pointer_u64: -- if (!ptr) -- return 0; -- if (a->attr_ptr == ptr_ext4_super_block_offset) -- return sysfs_emit(buf, "%llu\n", -- le64_to_cpup(ptr)); -- else -- return sysfs_emit(buf, "%llu\n", -- *((unsigned long long *) ptr)); -- case attr_pointer_string: -- if (!ptr) -- return 0; -- return sysfs_emit(buf, "%.*s\n", a->attr_size, -- (char *) ptr); -- case attr_pointer_atomic: -- if (!ptr) -- return 0; -- return sysfs_emit(buf, "%d\n", -- atomic_read((atomic_t *) ptr)); - case attr_feature: - return sysfs_emit(buf, "supported\n"); - case attr_first_error_time: -@@ -438,9 +428,9 @@ static ssize_t ext4_attr_show(struct kobject *kobj, - return print_tstamp(buf, sbi->s_es, s_last_error_time); - case attr_journal_task: - return journal_task_show(sbi, buf); -+ default: -+ return ext4_generic_attr_show(a, sbi, buf); - } -- -- return 0; - } - - static ssize_t ext4_attr_store(struct kobject *kobj, --- -2.43.0 - diff --git a/queue-6.9/net-change-proto-and-proto_ops-accept-type.patch b/queue-6.9/net-change-proto-and-proto_ops-accept-type.patch deleted file mode 100644 index 95a768c72d6..00000000000 --- a/queue-6.9/net-change-proto-and-proto_ops-accept-type.patch +++ /dev/null @@ -1,1026 +0,0 @@ -From 1c9995693f2f9207e4371e04c265705f29c0d575 Mon Sep 17 00:00:00 2001 -From: Sasha Levin -Date: Thu, 9 May 2024 09:20:08 -0600 -Subject: net: change proto and proto_ops accept type - -From: Jens Axboe - -[ Upstream commit 92ef0fd55ac80dfc2e4654edfe5d1ddfa6e070fe ] - -Rather than pass in flags, error pointer, and whether this is a kernel -invocation or not, add a struct proto_accept_arg struct as the argument. -This then holds all of these arguments, and prepares accept for being -able to pass back more information. - -No functional changes in this patch. - -Acked-by: Jakub Kicinski -Signed-off-by: Jens Axboe -Stable-dep-of: 1b536948e805 ("af_unix: Annotate data-race of sk->sk_state in unix_accept().") -Signed-off-by: Sasha Levin ---- - crypto/af_alg.c | 11 ++++++----- - crypto/algif_hash.c | 10 +++++----- - drivers/xen/pvcalls-back.c | 6 +++++- - fs/ocfs2/cluster/tcp.c | 5 ++++- - include/crypto/if_alg.h | 3 ++- - include/linux/net.h | 4 +++- - include/net/inet_common.h | 4 ++-- - include/net/inet_connection_sock.h | 2 +- - include/net/sock.h | 12 +++++++++--- - net/atm/svc.c | 8 ++++---- - net/ax25/af_ax25.c | 6 +++--- - net/bluetooth/iso.c | 4 ++-- - net/bluetooth/l2cap_sock.c | 4 ++-- - net/bluetooth/rfcomm/sock.c | 6 +++--- - net/bluetooth/sco.c | 4 ++-- - net/core/sock.c | 4 ++-- - net/ipv4/af_inet.c | 10 +++++----- - net/ipv4/inet_connection_sock.c | 6 +++--- - net/iucv/af_iucv.c | 4 ++-- - net/llc/af_llc.c | 7 +++---- - net/mptcp/protocol.c | 11 +++++------ - net/netrom/af_netrom.c | 6 +++--- - net/nfc/llcp_sock.c | 4 ++-- - net/phonet/pep.c | 12 ++++++------ - net/phonet/socket.c | 7 +++---- - net/rds/tcp_listen.c | 6 +++++- - net/rose/af_rose.c | 6 +++--- - net/sctp/socket.c | 8 ++++---- - net/smc/af_smc.c | 6 +++--- - net/socket.c | 13 ++++++++++--- - net/tipc/socket.c | 13 +++++-------- - net/unix/af_unix.c | 21 ++++++++++----------- - net/vmw_vsock/af_vsock.c | 6 +++--- - net/x25/af_x25.c | 4 ++-- - 34 files changed, 132 insertions(+), 111 deletions(-) - -diff --git a/crypto/af_alg.c b/crypto/af_alg.c -index 68cc9290cabe9..598bf46691706 100644 ---- a/crypto/af_alg.c -+++ b/crypto/af_alg.c -@@ -407,7 +407,8 @@ static int alg_setsockopt(struct socket *sock, int level, int optname, - return err; - } - --int af_alg_accept(struct sock *sk, struct socket *newsock, bool kern) -+int af_alg_accept(struct sock *sk, struct socket *newsock, -+ struct proto_accept_arg *arg) - { - struct alg_sock *ask = alg_sk(sk); - const struct af_alg_type *type; -@@ -422,7 +423,7 @@ int af_alg_accept(struct sock *sk, struct socket *newsock, bool kern) - if (!type) - goto unlock; - -- sk2 = sk_alloc(sock_net(sk), PF_ALG, GFP_KERNEL, &alg_proto, kern); -+ sk2 = sk_alloc(sock_net(sk), PF_ALG, GFP_KERNEL, &alg_proto, arg->kern); - err = -ENOMEM; - if (!sk2) - goto unlock; -@@ -468,10 +469,10 @@ int af_alg_accept(struct sock *sk, struct socket *newsock, bool kern) - } - EXPORT_SYMBOL_GPL(af_alg_accept); - --static int alg_accept(struct socket *sock, struct socket *newsock, int flags, -- bool kern) -+static int alg_accept(struct socket *sock, struct socket *newsock, -+ struct proto_accept_arg *arg) - { -- return af_alg_accept(sock->sk, newsock, kern); -+ return af_alg_accept(sock->sk, newsock, arg); - } - - static const struct proto_ops alg_proto_ops = { -diff --git a/crypto/algif_hash.c b/crypto/algif_hash.c -index e24c829d7a015..7c7394d46a235 100644 ---- a/crypto/algif_hash.c -+++ b/crypto/algif_hash.c -@@ -223,8 +223,8 @@ static int hash_recvmsg(struct socket *sock, struct msghdr *msg, size_t len, - return err ?: len; - } - --static int hash_accept(struct socket *sock, struct socket *newsock, int flags, -- bool kern) -+static int hash_accept(struct socket *sock, struct socket *newsock, -+ struct proto_accept_arg *arg) - { - struct sock *sk = sock->sk; - struct alg_sock *ask = alg_sk(sk); -@@ -252,7 +252,7 @@ static int hash_accept(struct socket *sock, struct socket *newsock, int flags, - if (err) - goto out_free_state; - -- err = af_alg_accept(ask->parent, newsock, kern); -+ err = af_alg_accept(ask->parent, newsock, arg); - if (err) - goto out_free_state; - -@@ -355,7 +355,7 @@ static int hash_recvmsg_nokey(struct socket *sock, struct msghdr *msg, - } - - static int hash_accept_nokey(struct socket *sock, struct socket *newsock, -- int flags, bool kern) -+ struct proto_accept_arg *arg) - { - int err; - -@@ -363,7 +363,7 @@ static int hash_accept_nokey(struct socket *sock, struct socket *newsock, - if (err) - return err; - -- return hash_accept(sock, newsock, flags, kern); -+ return hash_accept(sock, newsock, arg); - } - - static struct proto_ops algif_hash_ops_nokey = { -diff --git a/drivers/xen/pvcalls-back.c b/drivers/xen/pvcalls-back.c -index d52593466a792..fd7ed65e0197d 100644 ---- a/drivers/xen/pvcalls-back.c -+++ b/drivers/xen/pvcalls-back.c -@@ -517,6 +517,10 @@ static void __pvcalls_back_accept(struct work_struct *work) - { - struct sockpass_mapping *mappass = container_of( - work, struct sockpass_mapping, register_work); -+ struct proto_accept_arg arg = { -+ .flags = O_NONBLOCK, -+ .kern = true, -+ }; - struct sock_mapping *map; - struct pvcalls_ioworker *iow; - struct pvcalls_fedata *fedata; -@@ -548,7 +552,7 @@ static void __pvcalls_back_accept(struct work_struct *work) - sock->type = mappass->sock->type; - sock->ops = mappass->sock->ops; - -- ret = inet_accept(mappass->sock, sock, O_NONBLOCK, true); -+ ret = inet_accept(mappass->sock, sock, &arg); - if (ret == -EAGAIN) { - sock_release(sock); - return; -diff --git a/fs/ocfs2/cluster/tcp.c b/fs/ocfs2/cluster/tcp.c -index 960080753d3bd..2b8fa3e782fb6 100644 ---- a/fs/ocfs2/cluster/tcp.c -+++ b/fs/ocfs2/cluster/tcp.c -@@ -1784,6 +1784,9 @@ static int o2net_accept_one(struct socket *sock, int *more) - struct o2nm_node *node = NULL; - struct o2nm_node *local_node = NULL; - struct o2net_sock_container *sc = NULL; -+ struct proto_accept_arg arg = { -+ .flags = O_NONBLOCK, -+ }; - struct o2net_node *nn; - unsigned int nofs_flag; - -@@ -1802,7 +1805,7 @@ static int o2net_accept_one(struct socket *sock, int *more) - - new_sock->type = sock->type; - new_sock->ops = sock->ops; -- ret = sock->ops->accept(sock, new_sock, O_NONBLOCK, false); -+ ret = sock->ops->accept(sock, new_sock, &arg); - if (ret < 0) - goto out; - -diff --git a/include/crypto/if_alg.h b/include/crypto/if_alg.h -index 78ecaf5db04c6..f7b3b93f3a49a 100644 ---- a/include/crypto/if_alg.h -+++ b/include/crypto/if_alg.h -@@ -166,7 +166,8 @@ int af_alg_unregister_type(const struct af_alg_type *type); - - int af_alg_release(struct socket *sock); - void af_alg_release_parent(struct sock *sk); --int af_alg_accept(struct sock *sk, struct socket *newsock, bool kern); -+int af_alg_accept(struct sock *sk, struct socket *newsock, -+ struct proto_accept_arg *arg); - - void af_alg_free_sg(struct af_alg_sgl *sgl); - -diff --git a/include/linux/net.h b/include/linux/net.h -index 15df6d5f27a7b..688320b79fcc6 100644 ---- a/include/linux/net.h -+++ b/include/linux/net.h -@@ -153,6 +153,7 @@ struct sockaddr; - struct msghdr; - struct module; - struct sk_buff; -+struct proto_accept_arg; - typedef int (*sk_read_actor_t)(read_descriptor_t *, struct sk_buff *, - unsigned int, size_t); - typedef int (*skb_read_actor_t)(struct sock *, struct sk_buff *); -@@ -171,7 +172,8 @@ struct proto_ops { - int (*socketpair)(struct socket *sock1, - struct socket *sock2); - int (*accept) (struct socket *sock, -- struct socket *newsock, int flags, bool kern); -+ struct socket *newsock, -+ struct proto_accept_arg *arg); - int (*getname) (struct socket *sock, - struct sockaddr *addr, - int peer); -diff --git a/include/net/inet_common.h b/include/net/inet_common.h -index f50a644d87a98..c17a6585d0b0b 100644 ---- a/include/net/inet_common.h -+++ b/include/net/inet_common.h -@@ -29,8 +29,8 @@ int __inet_stream_connect(struct socket *sock, struct sockaddr *uaddr, - int addr_len, int flags, int is_sendmsg); - int inet_dgram_connect(struct socket *sock, struct sockaddr *uaddr, - int addr_len, int flags); --int inet_accept(struct socket *sock, struct socket *newsock, int flags, -- bool kern); -+int inet_accept(struct socket *sock, struct socket *newsock, -+ struct proto_accept_arg *arg); - void __inet_accept(struct socket *sock, struct socket *newsock, - struct sock *newsk); - int inet_send_prepare(struct sock *sk); -diff --git a/include/net/inet_connection_sock.h b/include/net/inet_connection_sock.h -index ccf171f7eb60d..aa435d90f12f9 100644 ---- a/include/net/inet_connection_sock.h -+++ b/include/net/inet_connection_sock.h -@@ -253,7 +253,7 @@ inet_csk_rto_backoff(const struct inet_connection_sock *icsk, - return (unsigned long)min_t(u64, when, max_when); - } - --struct sock *inet_csk_accept(struct sock *sk, int flags, int *err, bool kern); -+struct sock *inet_csk_accept(struct sock *sk, struct proto_accept_arg *arg); - - int inet_csk_get_port(struct sock *sk, unsigned short snum); - -diff --git a/include/net/sock.h b/include/net/sock.h -index 944f71a8ab223..774ee477e6572 100644 ---- a/include/net/sock.h -+++ b/include/net/sock.h -@@ -1194,6 +1194,12 @@ static inline void sk_prot_clear_nulls(struct sock *sk, int size) - size - offsetof(struct sock, sk_node.pprev)); - } - -+struct proto_accept_arg { -+ int flags; -+ int err; -+ bool kern; -+}; -+ - /* Networking protocol blocks we attach to sockets. - * socket layer -> transport layer interface - */ -@@ -1208,8 +1214,8 @@ struct proto { - int addr_len); - int (*disconnect)(struct sock *sk, int flags); - -- struct sock * (*accept)(struct sock *sk, int flags, int *err, -- bool kern); -+ struct sock * (*accept)(struct sock *sk, -+ struct proto_accept_arg *arg); - - int (*ioctl)(struct sock *sk, int cmd, - int *karg); -@@ -1882,7 +1888,7 @@ int sock_cmsg_send(struct sock *sk, struct msghdr *msg, - int sock_no_bind(struct socket *, struct sockaddr *, int); - int sock_no_connect(struct socket *, struct sockaddr *, int, int); - int sock_no_socketpair(struct socket *, struct socket *); --int sock_no_accept(struct socket *, struct socket *, int, bool); -+int sock_no_accept(struct socket *, struct socket *, struct proto_accept_arg *); - int sock_no_getname(struct socket *, struct sockaddr *, int); - int sock_no_ioctl(struct socket *, unsigned int, unsigned long); - int sock_no_listen(struct socket *, int); -diff --git a/net/atm/svc.c b/net/atm/svc.c -index 36a814f1fbd16..f8137ae693b08 100644 ---- a/net/atm/svc.c -+++ b/net/atm/svc.c -@@ -324,8 +324,8 @@ static int svc_listen(struct socket *sock, int backlog) - return error; - } - --static int svc_accept(struct socket *sock, struct socket *newsock, int flags, -- bool kern) -+static int svc_accept(struct socket *sock, struct socket *newsock, -+ struct proto_accept_arg *arg) - { - struct sock *sk = sock->sk; - struct sk_buff *skb; -@@ -336,7 +336,7 @@ static int svc_accept(struct socket *sock, struct socket *newsock, int flags, - - lock_sock(sk); - -- error = svc_create(sock_net(sk), newsock, 0, kern); -+ error = svc_create(sock_net(sk), newsock, 0, arg->kern); - if (error) - goto out; - -@@ -355,7 +355,7 @@ static int svc_accept(struct socket *sock, struct socket *newsock, int flags, - error = -sk->sk_err; - break; - } -- if (flags & O_NONBLOCK) { -+ if (arg->flags & O_NONBLOCK) { - error = -EAGAIN; - break; - } -diff --git a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c -index 5fff5930e4deb..d6f9fae06a9d8 100644 ---- a/net/ax25/af_ax25.c -+++ b/net/ax25/af_ax25.c -@@ -1373,8 +1373,8 @@ static int __must_check ax25_connect(struct socket *sock, - return err; - } - --static int ax25_accept(struct socket *sock, struct socket *newsock, int flags, -- bool kern) -+static int ax25_accept(struct socket *sock, struct socket *newsock, -+ struct proto_accept_arg *arg) - { - struct sk_buff *skb; - struct sock *newsk; -@@ -1411,7 +1411,7 @@ static int ax25_accept(struct socket *sock, struct socket *newsock, int flags, - if (skb) - break; - -- if (flags & O_NONBLOCK) { -+ if (arg->flags & O_NONBLOCK) { - err = -EWOULDBLOCK; - break; - } -diff --git a/net/bluetooth/iso.c b/net/bluetooth/iso.c -index 00c0d8413c638..cc055b952ce69 100644 ---- a/net/bluetooth/iso.c -+++ b/net/bluetooth/iso.c -@@ -1159,7 +1159,7 @@ static int iso_sock_listen(struct socket *sock, int backlog) - } - - static int iso_sock_accept(struct socket *sock, struct socket *newsock, -- int flags, bool kern) -+ struct proto_accept_arg *arg) - { - DEFINE_WAIT_FUNC(wait, woken_wake_function); - struct sock *sk = sock->sk, *ch; -@@ -1168,7 +1168,7 @@ static int iso_sock_accept(struct socket *sock, struct socket *newsock, - - lock_sock(sk); - -- timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK); -+ timeo = sock_rcvtimeo(sk, arg->flags & O_NONBLOCK); - - BT_DBG("sk %p timeo %ld", sk, timeo); - -diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c -index 8645461d45e81..6db60946c627c 100644 ---- a/net/bluetooth/l2cap_sock.c -+++ b/net/bluetooth/l2cap_sock.c -@@ -327,7 +327,7 @@ static int l2cap_sock_listen(struct socket *sock, int backlog) - } - - static int l2cap_sock_accept(struct socket *sock, struct socket *newsock, -- int flags, bool kern) -+ struct proto_accept_arg *arg) - { - DEFINE_WAIT_FUNC(wait, woken_wake_function); - struct sock *sk = sock->sk, *nsk; -@@ -336,7 +336,7 @@ static int l2cap_sock_accept(struct socket *sock, struct socket *newsock, - - lock_sock_nested(sk, L2CAP_NESTING_PARENT); - -- timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK); -+ timeo = sock_rcvtimeo(sk, arg->flags & O_NONBLOCK); - - BT_DBG("sk %p timeo %ld", sk, timeo); - -diff --git a/net/bluetooth/rfcomm/sock.c b/net/bluetooth/rfcomm/sock.c -index 29aa07e9db9d7..37d63d768afb8 100644 ---- a/net/bluetooth/rfcomm/sock.c -+++ b/net/bluetooth/rfcomm/sock.c -@@ -468,8 +468,8 @@ static int rfcomm_sock_listen(struct socket *sock, int backlog) - return err; - } - --static int rfcomm_sock_accept(struct socket *sock, struct socket *newsock, int flags, -- bool kern) -+static int rfcomm_sock_accept(struct socket *sock, struct socket *newsock, -+ struct proto_accept_arg *arg) - { - DEFINE_WAIT_FUNC(wait, woken_wake_function); - struct sock *sk = sock->sk, *nsk; -@@ -483,7 +483,7 @@ static int rfcomm_sock_accept(struct socket *sock, struct socket *newsock, int f - goto done; - } - -- timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK); -+ timeo = sock_rcvtimeo(sk, arg->flags & O_NONBLOCK); - - BT_DBG("sk %p timeo %ld", sk, timeo); - -diff --git a/net/bluetooth/sco.c b/net/bluetooth/sco.c -index 71d36582d4efa..a5ac160c592eb 100644 ---- a/net/bluetooth/sco.c -+++ b/net/bluetooth/sco.c -@@ -647,7 +647,7 @@ static int sco_sock_listen(struct socket *sock, int backlog) - } - - static int sco_sock_accept(struct socket *sock, struct socket *newsock, -- int flags, bool kern) -+ struct proto_accept_arg *arg) - { - DEFINE_WAIT_FUNC(wait, woken_wake_function); - struct sock *sk = sock->sk, *ch; -@@ -656,7 +656,7 @@ static int sco_sock_accept(struct socket *sock, struct socket *newsock, - - lock_sock(sk); - -- timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK); -+ timeo = sock_rcvtimeo(sk, arg->flags & O_NONBLOCK); - - BT_DBG("sk %p timeo %ld", sk, timeo); - -diff --git a/net/core/sock.c b/net/core/sock.c -index 0963689a59506..5a06715871f4a 100644 ---- a/net/core/sock.c -+++ b/net/core/sock.c -@@ -3242,8 +3242,8 @@ int sock_no_socketpair(struct socket *sock1, struct socket *sock2) - } - EXPORT_SYMBOL(sock_no_socketpair); - --int sock_no_accept(struct socket *sock, struct socket *newsock, int flags, -- bool kern) -+int sock_no_accept(struct socket *sock, struct socket *newsock, -+ struct proto_accept_arg *arg) - { - return -EOPNOTSUPP; - } -diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c -index 5622ddd3bf55b..c39ccd92172d3 100644 ---- a/net/ipv4/af_inet.c -+++ b/net/ipv4/af_inet.c -@@ -773,16 +773,16 @@ void __inet_accept(struct socket *sock, struct socket *newsock, struct sock *new - * Accept a pending connection. The TCP layer now gives BSD semantics. - */ - --int inet_accept(struct socket *sock, struct socket *newsock, int flags, -- bool kern) -+int inet_accept(struct socket *sock, struct socket *newsock, -+ struct proto_accept_arg *arg) - { - struct sock *sk1 = sock->sk, *sk2; -- int err = -EINVAL; - - /* IPV6_ADDRFORM can change sk->sk_prot under us. */ -- sk2 = READ_ONCE(sk1->sk_prot)->accept(sk1, flags, &err, kern); -+ arg->err = -EINVAL; -+ sk2 = READ_ONCE(sk1->sk_prot)->accept(sk1, arg); - if (!sk2) -- return err; -+ return arg->err; - - lock_sock(sk2); - __inet_accept(sock, newsock, sk2); -diff --git a/net/ipv4/inet_connection_sock.c b/net/ipv4/inet_connection_sock.c -index 3b38610958ee4..7734d189c66b8 100644 ---- a/net/ipv4/inet_connection_sock.c -+++ b/net/ipv4/inet_connection_sock.c -@@ -661,7 +661,7 @@ static int inet_csk_wait_for_connect(struct sock *sk, long timeo) - /* - * This will accept the next outstanding connection. - */ --struct sock *inet_csk_accept(struct sock *sk, int flags, int *err, bool kern) -+struct sock *inet_csk_accept(struct sock *sk, struct proto_accept_arg *arg) - { - struct inet_connection_sock *icsk = inet_csk(sk); - struct request_sock_queue *queue = &icsk->icsk_accept_queue; -@@ -680,7 +680,7 @@ struct sock *inet_csk_accept(struct sock *sk, int flags, int *err, bool kern) - - /* Find already established connection */ - if (reqsk_queue_empty(queue)) { -- long timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK); -+ long timeo = sock_rcvtimeo(sk, arg->flags & O_NONBLOCK); - - /* If this is a non blocking socket don't sleep */ - error = -EAGAIN; -@@ -745,7 +745,7 @@ struct sock *inet_csk_accept(struct sock *sk, int flags, int *err, bool kern) - out_err: - newsk = NULL; - req = NULL; -- *err = error; -+ arg->err = error; - goto out; - } - EXPORT_SYMBOL(inet_csk_accept); -diff --git a/net/iucv/af_iucv.c b/net/iucv/af_iucv.c -index 7c8c3adcac6e9..089acf6bd36d7 100644 ---- a/net/iucv/af_iucv.c -+++ b/net/iucv/af_iucv.c -@@ -795,7 +795,7 @@ static int iucv_sock_listen(struct socket *sock, int backlog) - - /* Accept a pending connection */ - static int iucv_sock_accept(struct socket *sock, struct socket *newsock, -- int flags, bool kern) -+ struct proto_accept_arg *arg) - { - DECLARE_WAITQUEUE(wait, current); - struct sock *sk = sock->sk, *nsk; -@@ -809,7 +809,7 @@ static int iucv_sock_accept(struct socket *sock, struct socket *newsock, - goto done; - } - -- timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK); -+ timeo = sock_rcvtimeo(sk, arg->flags & O_NONBLOCK); - - /* Wait for an incoming connection */ - add_wait_queue_exclusive(sk_sleep(sk), &wait); -diff --git a/net/llc/af_llc.c b/net/llc/af_llc.c -index fde1140d899ef..4eb52add7103b 100644 ---- a/net/llc/af_llc.c -+++ b/net/llc/af_llc.c -@@ -688,14 +688,13 @@ static void llc_cmsg_rcv(struct msghdr *msg, struct sk_buff *skb) - * llc_ui_accept - accept a new incoming connection. - * @sock: Socket which connections arrive on. - * @newsock: Socket to move incoming connection to. -- * @flags: User specified operational flags. -- * @kern: If the socket is kernel internal -+ * @arg: User specified arguments - * - * Accept a new incoming connection. - * Returns 0 upon success, negative otherwise. - */ --static int llc_ui_accept(struct socket *sock, struct socket *newsock, int flags, -- bool kern) -+static int llc_ui_accept(struct socket *sock, struct socket *newsock, -+ struct proto_accept_arg *arg) - { - struct sock *sk = sock->sk, *newsk; - struct llc_sock *llc, *newllc; -diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c -index 327dcf06edd47..e4644d50c909e 100644 ---- a/net/mptcp/protocol.c -+++ b/net/mptcp/protocol.c -@@ -3878,11 +3878,10 @@ static int mptcp_listen(struct socket *sock, int backlog) - } - - static int mptcp_stream_accept(struct socket *sock, struct socket *newsock, -- int flags, bool kern) -+ struct proto_accept_arg *arg) - { - struct mptcp_sock *msk = mptcp_sk(sock->sk); - struct sock *ssk, *newsk; -- int err; - - pr_debug("msk=%p", msk); - -@@ -3894,9 +3893,9 @@ static int mptcp_stream_accept(struct socket *sock, struct socket *newsock, - return -EINVAL; - - pr_debug("ssk=%p, listener=%p", ssk, mptcp_subflow_ctx(ssk)); -- newsk = inet_csk_accept(ssk, flags, &err, kern); -+ newsk = inet_csk_accept(ssk, arg); - if (!newsk) -- return err; -+ return arg->err; - - pr_debug("newsk=%p, subflow is mptcp=%d", newsk, sk_is_mptcp(newsk)); - if (sk_is_mptcp(newsk)) { -@@ -3917,7 +3916,7 @@ static int mptcp_stream_accept(struct socket *sock, struct socket *newsock, - newsk = new_mptcp_sock; - MPTCP_INC_STATS(sock_net(ssk), MPTCP_MIB_MPCAPABLEPASSIVEACK); - -- newsk->sk_kern_sock = kern; -+ newsk->sk_kern_sock = arg->kern; - lock_sock(newsk); - __inet_accept(sock, newsock, newsk); - -@@ -3946,7 +3945,7 @@ static int mptcp_stream_accept(struct socket *sock, struct socket *newsock, - } - } else { - tcpfallback: -- newsk->sk_kern_sock = kern; -+ newsk->sk_kern_sock = arg->kern; - lock_sock(newsk); - __inet_accept(sock, newsock, newsk); - /* we are being invoked after accepting a non-mp-capable -diff --git a/net/netrom/af_netrom.c b/net/netrom/af_netrom.c -index 104a80b75477f..6ee148f0e6d04 100644 ---- a/net/netrom/af_netrom.c -+++ b/net/netrom/af_netrom.c -@@ -772,8 +772,8 @@ static int nr_connect(struct socket *sock, struct sockaddr *uaddr, - return err; - } - --static int nr_accept(struct socket *sock, struct socket *newsock, int flags, -- bool kern) -+static int nr_accept(struct socket *sock, struct socket *newsock, -+ struct proto_accept_arg *arg) - { - struct sk_buff *skb; - struct sock *newsk; -@@ -805,7 +805,7 @@ static int nr_accept(struct socket *sock, struct socket *newsock, int flags, - if (skb) - break; - -- if (flags & O_NONBLOCK) { -+ if (arg->flags & O_NONBLOCK) { - err = -EWOULDBLOCK; - break; - } -diff --git a/net/nfc/llcp_sock.c b/net/nfc/llcp_sock.c -index d5344563e525c..57a2f97004e17 100644 ---- a/net/nfc/llcp_sock.c -+++ b/net/nfc/llcp_sock.c -@@ -447,7 +447,7 @@ struct sock *nfc_llcp_accept_dequeue(struct sock *parent, - } - - static int llcp_sock_accept(struct socket *sock, struct socket *newsock, -- int flags, bool kern) -+ struct proto_accept_arg *arg) - { - DECLARE_WAITQUEUE(wait, current); - struct sock *sk = sock->sk, *new_sk; -@@ -463,7 +463,7 @@ static int llcp_sock_accept(struct socket *sock, struct socket *newsock, - goto error; - } - -- timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK); -+ timeo = sock_rcvtimeo(sk, arg->flags & O_NONBLOCK); - - /* Wait for an incoming connection. */ - add_wait_queue_exclusive(sk_sleep(sk), &wait); -diff --git a/net/phonet/pep.c b/net/phonet/pep.c -index 3dd5f52bc1b58..53a858478e22f 100644 ---- a/net/phonet/pep.c -+++ b/net/phonet/pep.c -@@ -759,8 +759,8 @@ static void pep_sock_close(struct sock *sk, long timeout) - sock_put(sk); - } - --static struct sock *pep_sock_accept(struct sock *sk, int flags, int *errp, -- bool kern) -+static struct sock *pep_sock_accept(struct sock *sk, -+ struct proto_accept_arg *arg) - { - struct pep_sock *pn = pep_sk(sk), *newpn; - struct sock *newsk = NULL; -@@ -772,8 +772,8 @@ static struct sock *pep_sock_accept(struct sock *sk, int flags, int *errp, - u8 pipe_handle, enabled, n_sb; - u8 aligned = 0; - -- skb = skb_recv_datagram(sk, (flags & O_NONBLOCK) ? MSG_DONTWAIT : 0, -- errp); -+ skb = skb_recv_datagram(sk, (arg->flags & O_NONBLOCK) ? MSG_DONTWAIT : 0, -+ &arg->err); - if (!skb) - return NULL; - -@@ -836,7 +836,7 @@ static struct sock *pep_sock_accept(struct sock *sk, int flags, int *errp, - - /* Create a new to-be-accepted sock */ - newsk = sk_alloc(sock_net(sk), PF_PHONET, GFP_KERNEL, sk->sk_prot, -- kern); -+ arg->kern); - if (!newsk) { - pep_reject_conn(sk, skb, PN_PIPE_ERR_OVERLOAD, GFP_KERNEL); - err = -ENOBUFS; -@@ -878,7 +878,7 @@ static struct sock *pep_sock_accept(struct sock *sk, int flags, int *errp, - drop: - release_sock(sk); - kfree_skb(skb); -- *errp = err; -+ arg->err = err; - return newsk; - } - -diff --git a/net/phonet/socket.c b/net/phonet/socket.c -index 1018340d89a7d..5ce0b3ee5def8 100644 ---- a/net/phonet/socket.c -+++ b/net/phonet/socket.c -@@ -292,18 +292,17 @@ static int pn_socket_connect(struct socket *sock, struct sockaddr *addr, - } - - static int pn_socket_accept(struct socket *sock, struct socket *newsock, -- int flags, bool kern) -+ struct proto_accept_arg *arg) - { - struct sock *sk = sock->sk; - struct sock *newsk; -- int err; - - if (unlikely(sk->sk_state != TCP_LISTEN)) - return -EINVAL; - -- newsk = sk->sk_prot->accept(sk, flags, &err, kern); -+ newsk = sk->sk_prot->accept(sk, arg); - if (!newsk) -- return err; -+ return arg->err; - - lock_sock(newsk); - sock_graft(newsk, newsock); -diff --git a/net/rds/tcp_listen.c b/net/rds/tcp_listen.c -index 05008ce5c4219..d89bd8d0c3545 100644 ---- a/net/rds/tcp_listen.c -+++ b/net/rds/tcp_listen.c -@@ -105,6 +105,10 @@ int rds_tcp_accept_one(struct socket *sock) - int conn_state; - struct rds_conn_path *cp; - struct in6_addr *my_addr, *peer_addr; -+ struct proto_accept_arg arg = { -+ .flags = O_NONBLOCK, -+ .kern = true, -+ }; - #if !IS_ENABLED(CONFIG_IPV6) - struct in6_addr saddr, daddr; - #endif -@@ -119,7 +123,7 @@ int rds_tcp_accept_one(struct socket *sock) - if (ret) - goto out; - -- ret = sock->ops->accept(sock, new_sock, O_NONBLOCK, true); -+ ret = sock->ops->accept(sock, new_sock, &arg); - if (ret < 0) - goto out; - -diff --git a/net/rose/af_rose.c b/net/rose/af_rose.c -index ef81d019b20f4..59050caab65c8 100644 ---- a/net/rose/af_rose.c -+++ b/net/rose/af_rose.c -@@ -919,8 +919,8 @@ static int rose_connect(struct socket *sock, struct sockaddr *uaddr, int addr_le - return err; - } - --static int rose_accept(struct socket *sock, struct socket *newsock, int flags, -- bool kern) -+static int rose_accept(struct socket *sock, struct socket *newsock, -+ struct proto_accept_arg *arg) - { - struct sk_buff *skb; - struct sock *newsk; -@@ -953,7 +953,7 @@ static int rose_accept(struct socket *sock, struct socket *newsock, int flags, - if (skb) - break; - -- if (flags & O_NONBLOCK) { -+ if (arg->flags & O_NONBLOCK) { - err = -EWOULDBLOCK; - break; - } -diff --git a/net/sctp/socket.c b/net/sctp/socket.c -index c67679a41044f..732c67a9ce475 100644 ---- a/net/sctp/socket.c -+++ b/net/sctp/socket.c -@@ -4847,7 +4847,7 @@ static int sctp_disconnect(struct sock *sk, int flags) - * descriptor will be returned from accept() to represent the newly - * formed association. - */ --static struct sock *sctp_accept(struct sock *sk, int flags, int *err, bool kern) -+static struct sock *sctp_accept(struct sock *sk, struct proto_accept_arg *arg) - { - struct sctp_sock *sp; - struct sctp_endpoint *ep; -@@ -4871,7 +4871,7 @@ static struct sock *sctp_accept(struct sock *sk, int flags, int *err, bool kern) - goto out; - } - -- timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK); -+ timeo = sock_rcvtimeo(sk, arg->flags & O_NONBLOCK); - - error = sctp_wait_for_accept(sk, timeo); - if (error) -@@ -4882,7 +4882,7 @@ static struct sock *sctp_accept(struct sock *sk, int flags, int *err, bool kern) - */ - asoc = list_entry(ep->asocs.next, struct sctp_association, asocs); - -- newsk = sp->pf->create_accept_sk(sk, asoc, kern); -+ newsk = sp->pf->create_accept_sk(sk, asoc, arg->kern); - if (!newsk) { - error = -ENOMEM; - goto out; -@@ -4899,7 +4899,7 @@ static struct sock *sctp_accept(struct sock *sk, int flags, int *err, bool kern) - - out: - release_sock(sk); -- *err = error; -+ arg->err = error; - return newsk; - } - -diff --git a/net/smc/af_smc.c b/net/smc/af_smc.c -index 5f9f3d4c1df5f..ee6d8887c5730 100644 ---- a/net/smc/af_smc.c -+++ b/net/smc/af_smc.c -@@ -2656,7 +2656,7 @@ static int smc_listen(struct socket *sock, int backlog) - } - - static int smc_accept(struct socket *sock, struct socket *new_sock, -- int flags, bool kern) -+ struct proto_accept_arg *arg) - { - struct sock *sk = sock->sk, *nsk; - DECLARE_WAITQUEUE(wait, current); -@@ -2675,7 +2675,7 @@ static int smc_accept(struct socket *sock, struct socket *new_sock, - } - - /* Wait for an incoming connection */ -- timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK); -+ timeo = sock_rcvtimeo(sk, arg->flags & O_NONBLOCK); - add_wait_queue_exclusive(sk_sleep(sk), &wait); - while (!(nsk = smc_accept_dequeue(sk, new_sock))) { - set_current_state(TASK_INTERRUPTIBLE); -@@ -2702,7 +2702,7 @@ static int smc_accept(struct socket *sock, struct socket *new_sock, - if (rc) - goto out; - -- if (lsmc->sockopt_defer_accept && !(flags & O_NONBLOCK)) { -+ if (lsmc->sockopt_defer_accept && !(arg->flags & O_NONBLOCK)) { - /* wait till data arrives on the socket */ - timeo = msecs_to_jiffies(lsmc->sockopt_defer_accept * - MSEC_PER_SEC); -diff --git a/net/socket.c b/net/socket.c -index e5f3af49a8b62..2a78cff7159fe 100644 ---- a/net/socket.c -+++ b/net/socket.c -@@ -1898,6 +1898,9 @@ struct file *do_accept(struct file *file, unsigned file_flags, - struct file *newfile; - int err, len; - struct sockaddr_storage address; -+ struct proto_accept_arg arg = { -+ .flags = file_flags, -+ }; - const struct proto_ops *ops; - - sock = sock_from_file(file); -@@ -1926,8 +1929,8 @@ struct file *do_accept(struct file *file, unsigned file_flags, - if (err) - goto out_fd; - -- err = ops->accept(sock, newsock, sock->file->f_flags | file_flags, -- false); -+ arg.flags |= sock->file->f_flags; -+ err = ops->accept(sock, newsock, &arg); - if (err < 0) - goto out_fd; - -@@ -3580,6 +3583,10 @@ int kernel_accept(struct socket *sock, struct socket **newsock, int flags) - { - struct sock *sk = sock->sk; - const struct proto_ops *ops = READ_ONCE(sock->ops); -+ struct proto_accept_arg arg = { -+ .flags = flags, -+ .kern = true, -+ }; - int err; - - err = sock_create_lite(sk->sk_family, sk->sk_type, sk->sk_protocol, -@@ -3587,7 +3594,7 @@ int kernel_accept(struct socket *sock, struct socket **newsock, int flags) - if (err < 0) - goto done; - -- err = ops->accept(sock, *newsock, flags, true); -+ err = ops->accept(sock, *newsock, &arg); - if (err < 0) { - sock_release(*newsock); - *newsock = NULL; -diff --git a/net/tipc/socket.c b/net/tipc/socket.c -index 7e4135db58163..ed656c0ffe3d0 100644 ---- a/net/tipc/socket.c -+++ b/net/tipc/socket.c -@@ -146,8 +146,6 @@ static void tipc_data_ready(struct sock *sk); - static void tipc_write_space(struct sock *sk); - static void tipc_sock_destruct(struct sock *sk); - static int tipc_release(struct socket *sock); --static int tipc_accept(struct socket *sock, struct socket *new_sock, int flags, -- bool kern); - static void tipc_sk_timeout(struct timer_list *t); - static int tipc_sk_publish(struct tipc_sock *tsk, struct tipc_uaddr *ua); - static int tipc_sk_withdraw(struct tipc_sock *tsk, struct tipc_uaddr *ua); -@@ -2711,13 +2709,12 @@ static int tipc_wait_for_accept(struct socket *sock, long timeo) - * tipc_accept - wait for connection request - * @sock: listening socket - * @new_sock: new socket that is to be connected -- * @flags: file-related flags associated with socket -- * @kern: caused by kernel or by userspace? -+ * @arg: arguments for accept - * - * Return: 0 on success, errno otherwise - */ --static int tipc_accept(struct socket *sock, struct socket *new_sock, int flags, -- bool kern) -+static int tipc_accept(struct socket *sock, struct socket *new_sock, -+ struct proto_accept_arg *arg) - { - struct sock *new_sk, *sk = sock->sk; - struct tipc_sock *new_tsock; -@@ -2733,14 +2730,14 @@ static int tipc_accept(struct socket *sock, struct socket *new_sock, int flags, - res = -EINVAL; - goto exit; - } -- timeo = sock_rcvtimeo(sk, flags & O_NONBLOCK); -+ timeo = sock_rcvtimeo(sk, arg->flags & O_NONBLOCK); - res = tipc_wait_for_accept(sock, timeo); - if (res) - goto exit; - - buf = skb_peek(&sk->sk_receive_queue); - -- res = tipc_sk_create(sock_net(sock->sk), new_sock, 0, kern); -+ res = tipc_sk_create(sock_net(sock->sk), new_sock, 0, arg->kern); - if (res) - goto exit; - security_sk_clone(sock->sk, new_sock->sk); -diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c -index a1938ba24a696..417cf4adb4e04 100644 ---- a/net/unix/af_unix.c -+++ b/net/unix/af_unix.c -@@ -749,7 +749,7 @@ static int unix_bind(struct socket *, struct sockaddr *, int); - static int unix_stream_connect(struct socket *, struct sockaddr *, - int addr_len, int flags); - static int unix_socketpair(struct socket *, struct socket *); --static int unix_accept(struct socket *, struct socket *, int, bool); -+static int unix_accept(struct socket *, struct socket *, struct proto_accept_arg *arg); - static int unix_getname(struct socket *, struct sockaddr *, int); - static __poll_t unix_poll(struct file *, struct socket *, poll_table *); - static __poll_t unix_dgram_poll(struct file *, struct socket *, -@@ -1694,19 +1694,18 @@ static void unix_sock_inherit_flags(const struct socket *old, - set_bit(SOCK_PASSSEC, &new->flags); - } - --static int unix_accept(struct socket *sock, struct socket *newsock, int flags, -- bool kern) -+static int unix_accept(struct socket *sock, struct socket *newsock, -+ struct proto_accept_arg *arg) - { - struct sock *sk = sock->sk; - struct sk_buff *skb; - struct sock *tsk; -- int err; - -- err = -EOPNOTSUPP; -+ arg->err = -EOPNOTSUPP; - if (sock->type != SOCK_STREAM && sock->type != SOCK_SEQPACKET) - goto out; - -- err = -EINVAL; -+ arg->err = -EINVAL; - if (sk->sk_state != TCP_LISTEN) - goto out; - -@@ -1714,12 +1713,12 @@ static int unix_accept(struct socket *sock, struct socket *newsock, int flags, - * so that no locks are necessary. - */ - -- skb = skb_recv_datagram(sk, (flags & O_NONBLOCK) ? MSG_DONTWAIT : 0, -- &err); -+ skb = skb_recv_datagram(sk, (arg->flags & O_NONBLOCK) ? MSG_DONTWAIT : 0, -+ &arg->err); - if (!skb) { - /* This means receive shutdown. */ -- if (err == 0) -- err = -EINVAL; -+ if (arg->err == 0) -+ arg->err = -EINVAL; - goto out; - } - -@@ -1737,7 +1736,7 @@ static int unix_accept(struct socket *sock, struct socket *newsock, int flags, - return 0; - - out: -- return err; -+ return arg->err; - } - - -diff --git a/net/vmw_vsock/af_vsock.c b/net/vmw_vsock/af_vsock.c -index 54ba7316f8085..4b040285aa78c 100644 ---- a/net/vmw_vsock/af_vsock.c -+++ b/net/vmw_vsock/af_vsock.c -@@ -1500,8 +1500,8 @@ static int vsock_connect(struct socket *sock, struct sockaddr *addr, - return err; - } - --static int vsock_accept(struct socket *sock, struct socket *newsock, int flags, -- bool kern) -+static int vsock_accept(struct socket *sock, struct socket *newsock, -+ struct proto_accept_arg *arg) - { - struct sock *listener; - int err; -@@ -1528,7 +1528,7 @@ static int vsock_accept(struct socket *sock, struct socket *newsock, int flags, - /* Wait for children sockets to appear; these are the new sockets - * created upon connection establishment. - */ -- timeout = sock_rcvtimeo(listener, flags & O_NONBLOCK); -+ timeout = sock_rcvtimeo(listener, arg->flags & O_NONBLOCK); - prepare_to_wait(sk_sleep(listener), &wait, TASK_INTERRUPTIBLE); - - while ((connected = vsock_dequeue_accept(listener)) == NULL && -diff --git a/net/x25/af_x25.c b/net/x25/af_x25.c -index d18d51412cc00..8dda4178497c9 100644 ---- a/net/x25/af_x25.c -+++ b/net/x25/af_x25.c -@@ -871,8 +871,8 @@ static int x25_wait_for_data(struct sock *sk, long timeout) - return rc; - } - --static int x25_accept(struct socket *sock, struct socket *newsock, int flags, -- bool kern) -+static int x25_accept(struct socket *sock, struct socket *newsock, -+ struct proto_accept_arg *arg) - { - struct sock *sk = sock->sk; - struct sock *newsk; --- -2.43.0 - diff --git a/queue-6.9/series b/queue-6.9/series index 13a199c9aea..683ce0d408d 100644 --- a/queue-6.9/series +++ b/queue-6.9/series @@ -75,8 +75,6 @@ x86-cpu-get-rid-of-an-unnecessary-local-variable-in-.patch x86-cpu-provide-default-cache-line-size-if-not-enume.patch selftests-mm-ksft_exit-functions-do-not-return.patch selftests-mm-compaction_test-fix-bogus-test-success-.patch -ext4-avoid-overflow-when-setting-values-via-sysfs.patch -ext4-refactor-out-ext4_generic_attr_show.patch eventfs-update-all-the-eventfs_inodes-from-the-event.patch .editorconfig-remove-trim_trailing_whitespace-option.patch io_uring-rsrc-don-t-lock-while-task_running.patch @@ -143,9 +141,6 @@ drm-vmwgfx-filter-modes-which-exceed-graphics-memory.patch drm-vmwgfx-3d-disabled-should-not-effect-stdu-memory.patch drm-vmwgfx-remove-stdu-logic-from-generic-mode_valid.patch drm-vmwgfx-don-t-memcmp-equivalent-pointers.patch -af_unix-allocate-struct-unix_vertex-for-each-infligh.patch -af_unix-save-listener-for-embryo-socket.patch -net-change-proto-and-proto_ops-accept-type.patch af_unix-annotate-data-race-of-sk-sk_state-in-unix_ac.patch modpost-do-not-warn-about-missing-module_description.patch net-sfp-always-call-sfp_sm_mod_remove-on-remove.patch