diff options
author | Christian Brauner <brauner@kernel.org> | 2025-09-17 12:01:05 +0200 |
---|---|---|
committer | Christian Brauner <brauner@kernel.org> | 2025-09-19 14:26:14 +0200 |
commit | 7914f15c5e45ea6c76f2b3272ff39d8fe67b13f5 (patch) | |
tree | 32385a82110d012928536d7787b024add8818f63 /net/atm/common.c | |
parent | 885fc8ac0a4dc70f5d87b80b0977292870e35c60 (diff) | |
parent | 38f4885088fc5ad41b8b0a2a2cfc73d01e709e5c (diff) |
Merge branch 'no-rebase-mnt_ns_tree_remove'
Bring in the fix for removing a mount namespace from the mount namespace
rbtree and list.
Signed-off-by: Christian Brauner <brauner@kernel.org>
Diffstat (limited to 'net/atm/common.c')
-rw-r--r-- | net/atm/common.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/net/atm/common.c b/net/atm/common.c index d7f7976ea13a..881c7f259dbd 100644 --- a/net/atm/common.c +++ b/net/atm/common.c @@ -635,18 +635,27 @@ int vcc_sendmsg(struct socket *sock, struct msghdr *m, size_t size) skb->dev = NULL; /* for paths shared with net_device interfaces */ if (!copy_from_iter_full(skb_put(skb, size), size, &m->msg_iter)) { - atm_return_tx(vcc, skb); - kfree_skb(skb); error = -EFAULT; - goto out; + goto free_skb; } if (eff != size) memset(skb->data + size, 0, eff-size); + + if (vcc->dev->ops->pre_send) { + error = vcc->dev->ops->pre_send(vcc, skb); + if (error) + goto free_skb; + } + error = vcc->dev->ops->send(vcc, skb); error = error ? error : size; out: release_sock(sk); return error; +free_skb: + atm_return_tx(vcc, skb); + kfree_skb(skb); + goto out; } __poll_t vcc_poll(struct file *file, struct socket *sock, poll_table *wait) |