linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3 net-next 0/3] Add support for async socket operations
@ 2015-03-19 19:31 Tadeusz Struk
  2015-03-19 19:31 ` [PATCH v3 net-next 1/3] net: socket: add support for async operations Tadeusz Struk
                   ` (4 more replies)
  0 siblings, 5 replies; 9+ messages in thread
From: Tadeusz Struk @ 2015-03-19 19:31 UTC (permalink / raw)
  To: davem
  Cc: linux-aio, herbert, netdev, ying.xue, bcrl, viro, linux-fsdevel,
	hch, linux-crypto

After the iocb parameter has been removed from sendmsg() and recvmsg() ops
the socket layer, and the network stack no longer support async operations.
This patch set adds support for asynchronous operations on sockets back.

Changes in v3:
* As sugested by Al Viro instead of adding new functions aio_sendmsg
  and aio_recvmsg, added a ptr to iocb into the kernel-side msghdr structure.
  This way no change to aio.c is required.

Changes in v2:
* removed redundant total_size param from aio_sendmsg and aio_recvmsg functions

--
Tadeusz Struk (3):
      net: socket: add support for async operations
      crypto: af_alg - Allow to link sgl
      crypto: algif - change algif_skcipher to be asynchronous


 crypto/af_alg.c         |   18 +++-
 crypto/algif_skcipher.c |  233 ++++++++++++++++++++++++++++++++++++++++++++++-
 include/crypto/if_alg.h |    4 +
 include/linux/socket.h  |    1 
 net/compat.c            |    2 
 net/socket.c            |    8 +-
 6 files changed, 251 insertions(+), 15 deletions(-)

-- 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH v3 net-next 1/3] net: socket: add support for async operations
  2015-03-19 19:31 [PATCH v3 net-next 0/3] Add support for async socket operations Tadeusz Struk
@ 2015-03-19 19:31 ` Tadeusz Struk
  2015-03-19 19:31 ` [PATCH v3 net-next 2/3] crypto: af_alg - Allow to link sgl Tadeusz Struk
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 9+ messages in thread
From: Tadeusz Struk @ 2015-03-19 19:31 UTC (permalink / raw)
  To: davem
  Cc: linux-aio, herbert, netdev, ying.xue, bcrl, viro, linux-fsdevel,
	hch, linux-crypto

Add support for async operations.

Signed-off-by: Tadeusz Struk <tadeusz.struk@intel.com>
---
 include/linux/socket.h |    1 +
 net/compat.c           |    2 ++
 net/socket.c           |    8 ++++++--
 3 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/include/linux/socket.h b/include/linux/socket.h
index fab4d0d..c9852ef 100644
--- a/include/linux/socket.h
+++ b/include/linux/socket.h
@@ -51,6 +51,7 @@ struct msghdr {
 	void		*msg_control;	/* ancillary data */
 	__kernel_size_t	msg_controllen;	/* ancillary data buffer length */
 	unsigned int	msg_flags;	/* flags on received message */
+	struct kiocb	*msg_iocb;	/* ptr to iocb for async requests */
 };
  
 struct user_msghdr {
diff --git a/net/compat.c b/net/compat.c
index 4784431..7fb7ad1 100644
--- a/net/compat.c
+++ b/net/compat.c
@@ -72,6 +72,8 @@ ssize_t get_compat_msghdr(struct msghdr *kmsg,
 	if (nr_segs > UIO_MAXIOV)
 		return -EMSGSIZE;
 
+	kmsg->msg_iocb = NULL;
+
 	err = compat_rw_copy_check_uvector(save_addr ? READ : WRITE,
 					   compat_ptr(uiov), nr_segs,
 					   UIO_FASTIOV, *iov, iov);
diff --git a/net/socket.c b/net/socket.c
index 95d3085..fafc50a 100644
--- a/net/socket.c
+++ b/net/socket.c
@@ -798,7 +798,8 @@ static ssize_t sock_read_iter(struct kiocb *iocb, struct iov_iter *to)
 {
 	struct file *file = iocb->ki_filp;
 	struct socket *sock = file->private_data;
-	struct msghdr msg = {.msg_iter = *to};
+	struct msghdr msg = {.msg_iter = *to,
+			     .msg_iocb = iocb};
 	ssize_t res;
 
 	if (file->f_flags & O_NONBLOCK)
@@ -819,7 +820,8 @@ static ssize_t sock_write_iter(struct kiocb *iocb, struct iov_iter *from)
 {
 	struct file *file = iocb->ki_filp;
 	struct socket *sock = file->private_data;
-	struct msghdr msg = {.msg_iter = *from};
+	struct msghdr msg = {.msg_iter = *from,
+			     .msg_iocb = iocb};
 	ssize_t res;
 
 	if (iocb->ki_pos != 0)
@@ -1890,6 +1892,8 @@ static ssize_t copy_msghdr_from_user(struct msghdr *kmsg,
 	if (nr_segs > UIO_MAXIOV)
 		return -EMSGSIZE;
 
+	kmsg->msg_iocb = NULL;
+
 	err = rw_copy_check_uvector(save_addr ? READ : WRITE,
 				    uiov, nr_segs,
 				    UIO_FASTIOV, *iov, iov);

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v3 net-next 2/3] crypto: af_alg - Allow to link sgl
  2015-03-19 19:31 [PATCH v3 net-next 0/3] Add support for async socket operations Tadeusz Struk
  2015-03-19 19:31 ` [PATCH v3 net-next 1/3] net: socket: add support for async operations Tadeusz Struk
@ 2015-03-19 19:31 ` Tadeusz Struk
  2015-03-19 19:31 ` [PATCH v3 net-next 3/3] crypto: algif - change algif_skcipher to be asynchronous Tadeusz Struk
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 9+ messages in thread
From: Tadeusz Struk @ 2015-03-19 19:31 UTC (permalink / raw)
  To: davem
  Cc: linux-aio, herbert, netdev, ying.xue, bcrl, viro, linux-fsdevel,
	hch, linux-crypto

From: Tadeusz Struk <tadeusz.struk@intel.com>

Allow to link af_alg sgls.

Signed-off-by: Tadeusz Struk <tadeusz.struk@intel.com>
---
 crypto/af_alg.c         |   18 +++++++++++++-----
 include/crypto/if_alg.h |    4 +++-
 2 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/crypto/af_alg.c b/crypto/af_alg.c
index 7f8b7edc..26089d1 100644
--- a/crypto/af_alg.c
+++ b/crypto/af_alg.c
@@ -358,8 +358,8 @@ int af_alg_make_sg(struct af_alg_sgl *sgl, struct iov_iter *iter, int len)
 	npages = (off + n + PAGE_SIZE - 1) >> PAGE_SHIFT;
 	if (WARN_ON(npages == 0))
 		return -EINVAL;
-
-	sg_init_table(sgl->sg, npages);
+	/* Add one extra for linking */
+	sg_init_table(sgl->sg, npages + 1);
 
 	for (i = 0, len = n; i < npages; i++) {
 		int plen = min_t(int, len, PAGE_SIZE - off);
@@ -369,18 +369,26 @@ int af_alg_make_sg(struct af_alg_sgl *sgl, struct iov_iter *iter, int len)
 		off = 0;
 		len -= plen;
 	}
+	sg_mark_end(sgl->sg + npages - 1);
+	sgl->npages = npages;
+
 	return n;
 }
 EXPORT_SYMBOL_GPL(af_alg_make_sg);
 
+void af_alg_link_sg(struct af_alg_sgl *sgl_prev, struct af_alg_sgl *sgl_new)
+{
+	sg_unmark_end(sgl_prev->sg + sgl_prev->npages - 1);
+	sg_chain(sgl_prev->sg, sgl_prev->npages + 1, sgl_new->sg);
+}
+EXPORT_SYMBOL(af_alg_link_sg);
+
 void af_alg_free_sg(struct af_alg_sgl *sgl)
 {
 	int i;
 
-	i = 0;
-	do {
+	for (i = 0; i < sgl->npages; i++)
 		put_page(sgl->pages[i]);
-	} while (!sg_is_last(sgl->sg + (i++)));
 }
 EXPORT_SYMBOL_GPL(af_alg_free_sg);
 
diff --git a/include/crypto/if_alg.h b/include/crypto/if_alg.h
index 178525e..018afb2 100644
--- a/include/crypto/if_alg.h
+++ b/include/crypto/if_alg.h
@@ -58,8 +58,9 @@ struct af_alg_type {
 };
 
 struct af_alg_sgl {
-	struct scatterlist sg[ALG_MAX_PAGES];
+	struct scatterlist sg[ALG_MAX_PAGES + 1];
 	struct page *pages[ALG_MAX_PAGES];
+	unsigned int npages;
 };
 
 int af_alg_register_type(const struct af_alg_type *type);
@@ -70,6 +71,7 @@ int af_alg_accept(struct sock *sk, struct socket *newsock);
 
 int af_alg_make_sg(struct af_alg_sgl *sgl, struct iov_iter *iter, int len);
 void af_alg_free_sg(struct af_alg_sgl *sgl);
+void af_alg_link_sg(struct af_alg_sgl *sgl_prev, struct af_alg_sgl *sgl_new);
 
 int af_alg_cmsg_send(struct msghdr *msg, struct af_alg_control *con);
 

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH v3 net-next 3/3] crypto: algif - change algif_skcipher to be asynchronous
  2015-03-19 19:31 [PATCH v3 net-next 0/3] Add support for async socket operations Tadeusz Struk
  2015-03-19 19:31 ` [PATCH v3 net-next 1/3] net: socket: add support for async operations Tadeusz Struk
  2015-03-19 19:31 ` [PATCH v3 net-next 2/3] crypto: af_alg - Allow to link sgl Tadeusz Struk
@ 2015-03-19 19:31 ` Tadeusz Struk
  2015-03-19 19:51 ` [PATCH v3 net-next 0/3] Add support for async socket operations Al Viro
  2015-03-23 20:42 ` David Miller
  4 siblings, 0 replies; 9+ messages in thread
From: Tadeusz Struk @ 2015-03-19 19:31 UTC (permalink / raw)
  To: davem
  Cc: linux-aio, herbert, netdev, ying.xue, bcrl, viro, linux-fsdevel,
	hch, linux-crypto

From: Tadeusz Struk <tadeusz.struk@intel.com>

The way the algif_skcipher works currently is that on sendmsg/sendpage it
builds an sgl for the input data and then on read/recvmsg it sends the job
for encryption putting the user to sleep till the data is processed.
This way it can only handle one job at a given time.
This patch changes it to be asynchronous by adding AIO support.

Signed-off-by: Tadeusz Struk <tadeusz.struk@intel.com>
---
 crypto/algif_skcipher.c |  233 ++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 226 insertions(+), 7 deletions(-)

diff --git a/crypto/algif_skcipher.c b/crypto/algif_skcipher.c
index b9743dc..8276f21 100644
--- a/crypto/algif_skcipher.c
+++ b/crypto/algif_skcipher.c
@@ -39,6 +39,7 @@ struct skcipher_ctx {
 
 	struct af_alg_completion completion;
 
+	atomic_t inflight;
 	unsigned used;
 
 	unsigned int len;
@@ -49,9 +50,65 @@ struct skcipher_ctx {
 	struct ablkcipher_request req;
 };
 
+struct skcipher_async_rsgl {
+	struct af_alg_sgl sgl;
+	struct list_head list;
+};
+
+struct skcipher_async_req {
+	struct kiocb *iocb;
+	struct skcipher_async_rsgl first_sgl;
+	struct list_head list;
+	struct scatterlist *tsg;
+	char iv[];
+};
+
+#define GET_SREQ(areq, ctx) (struct skcipher_async_req *)((char *)areq + \
+	crypto_ablkcipher_reqsize(crypto_ablkcipher_reqtfm(&ctx->req)))
+
+#define GET_REQ_SIZE(ctx) \
+	crypto_ablkcipher_reqsize(crypto_ablkcipher_reqtfm(&ctx->req))
+
+#define GET_IV_SIZE(ctx) \
+	crypto_ablkcipher_ivsize(crypto_ablkcipher_reqtfm(&ctx->req))
+
 #define MAX_SGL_ENTS ((4096 - sizeof(struct skcipher_sg_list)) / \
 		      sizeof(struct scatterlist) - 1)
 
+static void skcipher_free_async_sgls(struct skcipher_async_req *sreq)
+{
+	struct skcipher_async_rsgl *rsgl, *tmp;
+	struct scatterlist *sgl;
+	struct scatterlist *sg;
+	int i, n;
+
+	list_for_each_entry_safe(rsgl, tmp, &sreq->list, list) {
+		af_alg_free_sg(&rsgl->sgl);
+		if (rsgl != &sreq->first_sgl)
+			kfree(rsgl);
+	}
+	sgl = sreq->tsg;
+	n = sg_nents(sgl);
+	for_each_sg(sgl, sg, n, i)
+		put_page(sg_page(sg));
+
+	kfree(sreq->tsg);
+}
+
+static void skcipher_async_cb(struct crypto_async_request *req, int err)
+{
+	struct sock *sk = req->data;
+	struct alg_sock *ask = alg_sk(sk);
+	struct skcipher_ctx *ctx = ask->private;
+	struct skcipher_async_req *sreq = GET_SREQ(req, ctx);
+	struct kiocb *iocb = sreq->iocb;
+
+	atomic_dec(&ctx->inflight);
+	skcipher_free_async_sgls(sreq);
+	kfree(req);
+	aio_complete(iocb, err, err);
+}
+
 static inline int skcipher_sndbuf(struct sock *sk)
 {
 	struct alg_sock *ask = alg_sk(sk);
@@ -96,7 +153,7 @@ static int skcipher_alloc_sgl(struct sock *sk)
 	return 0;
 }
 
-static void skcipher_pull_sgl(struct sock *sk, int used)
+static void skcipher_pull_sgl(struct sock *sk, int used, int put)
 {
 	struct alg_sock *ask = alg_sk(sk);
 	struct skcipher_ctx *ctx = ask->private;
@@ -123,8 +180,8 @@ static void skcipher_pull_sgl(struct sock *sk, int used)
 
 			if (sg[i].length)
 				return;
-
-			put_page(sg_page(sg + i));
+			if (put)
+				put_page(sg_page(sg + i));
 			sg_assign_page(sg + i, NULL);
 		}
 
@@ -143,7 +200,7 @@ static void skcipher_free_sgl(struct sock *sk)
 	struct alg_sock *ask = alg_sk(sk);
 	struct skcipher_ctx *ctx = ask->private;
 
-	skcipher_pull_sgl(sk, ctx->used);
+	skcipher_pull_sgl(sk, ctx->used, 1);
 }
 
 static int skcipher_wait_for_wmem(struct sock *sk, unsigned flags)
@@ -424,8 +481,149 @@ unlock:
 	return err ?: size;
 }
 
-static int skcipher_recvmsg(struct socket *sock, struct msghdr *msg,
-			    size_t ignored, int flags)
+static int skcipher_all_sg_nents(struct skcipher_ctx *ctx)
+{
+	struct skcipher_sg_list *sgl;
+	struct scatterlist *sg;
+	int nents = 0;
+
+	list_for_each_entry(sgl, &ctx->tsgl, list) {
+		sg = sgl->sg;
+
+		while (!sg->length)
+			sg++;
+
+		nents += sg_nents(sg);
+	}
+	return nents;
+}
+
+static int skcipher_recvmsg_async(struct socket *sock, struct msghdr *msg,
+				  int flags)
+{
+	struct sock *sk = sock->sk;
+	struct alg_sock *ask = alg_sk(sk);
+	struct skcipher_ctx *ctx = ask->private;
+	struct skcipher_sg_list *sgl;
+	struct scatterlist *sg;
+	struct skcipher_async_req *sreq;
+	struct ablkcipher_request *req;
+	struct skcipher_async_rsgl *last_rsgl = NULL;
+	unsigned int len = 0, tx_nents = skcipher_all_sg_nents(ctx);
+	unsigned int reqlen = sizeof(struct skcipher_async_req) +
+				GET_REQ_SIZE(ctx) + GET_IV_SIZE(ctx);
+	int i = 0;
+	int err = -ENOMEM;
+
+	lock_sock(sk);
+	req = kmalloc(reqlen, GFP_KERNEL);
+	if (unlikely(!req))
+		goto unlock;
+
+	sreq = GET_SREQ(req, ctx);
+	sreq->iocb = msg->msg_iocb;
+	memset(&sreq->first_sgl, '\0', sizeof(struct skcipher_async_rsgl));
+	INIT_LIST_HEAD(&sreq->list);
+	sreq->tsg = kcalloc(tx_nents, sizeof(*sg), GFP_KERNEL);
+	if (unlikely(!sreq->tsg)) {
+		kfree(req);
+		goto unlock;
+	}
+	sg_init_table(sreq->tsg, tx_nents);
+	memcpy(sreq->iv, ctx->iv, GET_IV_SIZE(ctx));
+	ablkcipher_request_set_tfm(req, crypto_ablkcipher_reqtfm(&ctx->req));
+	ablkcipher_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
+					skcipher_async_cb, sk);
+
+	while (iov_iter_count(&msg->msg_iter)) {
+		struct skcipher_async_rsgl *rsgl;
+		unsigned long used;
+
+		if (!ctx->used) {
+			err = skcipher_wait_for_data(sk, flags);
+			if (err)
+				goto free;
+		}
+		sgl = list_first_entry(&ctx->tsgl,
+				       struct skcipher_sg_list, list);
+		sg = sgl->sg;
+
+		while (!sg->length)
+			sg++;
+
+		used = min_t(unsigned long, ctx->used,
+			     iov_iter_count(&msg->msg_iter));
+		used = min_t(unsigned long, used, sg->length);
+
+		if (i == tx_nents) {
+			struct scatterlist *tmp;
+			int x;
+			/* Ran out of tx slots in async request
+			 * need to expand */
+			tmp = kcalloc(tx_nents * 2, sizeof(*tmp),
+				      GFP_KERNEL);
+			if (!tmp)
+				goto free;
+
+			sg_init_table(tmp, tx_nents * 2);
+			for (x = 0; x < tx_nents; x++)
+				sg_set_page(&tmp[x], sg_page(&sreq->tsg[x]),
+					    sreq->tsg[x].length,
+					    sreq->tsg[x].offset);
+			kfree(sreq->tsg);
+			sreq->tsg = tmp;
+			tx_nents *= 2;
+		}
+		/* Need to take over the tx sgl from ctx
+		 * to the asynch req - these sgls will be freed later */
+		sg_set_page(sreq->tsg + i++, sg_page(sg), sg->length,
+			    sg->offset);
+
+		if (list_empty(&sreq->list)) {
+			rsgl = &sreq->first_sgl;
+			list_add_tail(&rsgl->list, &sreq->list);
+		} else {
+			rsgl = kzalloc(sizeof(*rsgl), GFP_KERNEL);
+			if (!rsgl) {
+				err = -ENOMEM;
+				goto free;
+			}
+			list_add_tail(&rsgl->list, &sreq->list);
+		}
+
+		used = af_alg_make_sg(&rsgl->sgl, &msg->msg_iter, used);
+		err = used;
+		if (used < 0)
+			goto free;
+		if (last_rsgl)
+			af_alg_link_sg(&last_rsgl->sgl, &rsgl->sgl);
+
+		last_rsgl = rsgl;
+		len += used;
+		skcipher_pull_sgl(sk, used, 0);
+		iov_iter_advance(&msg->msg_iter, used);
+	}
+
+	ablkcipher_request_set_crypt(req, sreq->tsg, sreq->first_sgl.sgl.sg,
+				     len, sreq->iv);
+	err = ctx->enc ? crypto_ablkcipher_encrypt(req) :
+			 crypto_ablkcipher_decrypt(req);
+	if (err == -EINPROGRESS) {
+		atomic_inc(&ctx->inflight);
+		err = -EIOCBQUEUED;
+		goto unlock;
+	}
+free:
+	skcipher_free_async_sgls(sreq);
+	kfree(req);
+unlock:
+	skcipher_wmem_wakeup(sk);
+	release_sock(sk);
+	return err;
+}
+
+static int skcipher_recvmsg_sync(struct socket *sock, struct msghdr *msg,
+				 int flags)
 {
 	struct sock *sk = sock->sk;
 	struct alg_sock *ask = alg_sk(sk);
@@ -484,7 +682,7 @@ free:
 			goto unlock;
 
 		copied += used;
-		skcipher_pull_sgl(sk, used);
+		skcipher_pull_sgl(sk, used, 1);
 		iov_iter_advance(&msg->msg_iter, used);
 	}
 
@@ -497,6 +695,13 @@ unlock:
 	return copied ?: err;
 }
 
+static int skcipher_recvmsg(struct socket *sock, struct msghdr *msg,
+			    size_t ignored, int flags)
+{
+	return (msg->msg_iocb && !is_sync_kiocb(msg->msg_iocb)) ?
+		skcipher_recvmsg_async(sock, msg, flags) :
+		skcipher_recvmsg_sync(sock, msg, flags);
+}
 
 static unsigned int skcipher_poll(struct file *file, struct socket *sock,
 				  poll_table *wait)
@@ -555,12 +760,25 @@ static int skcipher_setkey(void *private, const u8 *key, unsigned int keylen)
 	return crypto_ablkcipher_setkey(private, key, keylen);
 }
 
+static void skcipher_wait(struct sock *sk)
+{
+	struct alg_sock *ask = alg_sk(sk);
+	struct skcipher_ctx *ctx = ask->private;
+	int ctr = 0;
+
+	while (atomic_read(&ctx->inflight) && ctr++ < 100)
+		msleep(100);
+}
+
 static void skcipher_sock_destruct(struct sock *sk)
 {
 	struct alg_sock *ask = alg_sk(sk);
 	struct skcipher_ctx *ctx = ask->private;
 	struct crypto_ablkcipher *tfm = crypto_ablkcipher_reqtfm(&ctx->req);
 
+	if (atomic_read(&ctx->inflight))
+		skcipher_wait(sk);
+
 	skcipher_free_sgl(sk);
 	sock_kzfree_s(sk, ctx->iv, crypto_ablkcipher_ivsize(tfm));
 	sock_kfree_s(sk, ctx, ctx->len);
@@ -592,6 +810,7 @@ static int skcipher_accept_parent(void *private, struct sock *sk)
 	ctx->more = 0;
 	ctx->merge = 0;
 	ctx->enc = 0;
+	atomic_set(&ctx->inflight, 0);
 	af_alg_init_completion(&ctx->completion);
 
 	ask->private = ctx;

--
To unsubscribe, send a message with 'unsubscribe linux-aio' in
the body to majordomo@kvack.org.  For more info on Linux AIO,
see: http://www.kvack.org/aio/
Don't email: <a href=mailto:"aart@kvack.org">aart@kvack.org</a>

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 net-next 0/3] Add support for async socket operations
  2015-03-19 19:31 [PATCH v3 net-next 0/3] Add support for async socket operations Tadeusz Struk
                   ` (2 preceding siblings ...)
  2015-03-19 19:31 ` [PATCH v3 net-next 3/3] crypto: algif - change algif_skcipher to be asynchronous Tadeusz Struk
@ 2015-03-19 19:51 ` Al Viro
  2015-03-20  6:45   ` Christoph Hellwig
  2015-03-23 20:42 ` David Miller
  4 siblings, 1 reply; 9+ messages in thread
From: Al Viro @ 2015-03-19 19:51 UTC (permalink / raw)
  To: Tadeusz Struk
  Cc: davem, linux-aio, herbert, netdev, ying.xue, bcrl, linux-fsdevel,
	hch, linux-crypto

On Thu, Mar 19, 2015 at 12:31:19PM -0700, Tadeusz Struk wrote:
> After the iocb parameter has been removed from sendmsg() and recvmsg() ops
> the socket layer, and the network stack no longer support async operations.
> This patch set adds support for asynchronous operations on sockets back.
> 
> Changes in v3:
> * As sugested by Al Viro instead of adding new functions aio_sendmsg
>   and aio_recvmsg, added a ptr to iocb into the kernel-side msghdr structure.
>   This way no change to aio.c is required.
> 
> Changes in v2:
> * removed redundant total_size param from aio_sendmsg and aio_recvmsg functions

I think I can live with that.  Christoph, do you have any objections to
that series?

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 net-next 0/3] Add support for async socket operations
  2015-03-19 19:51 ` [PATCH v3 net-next 0/3] Add support for async socket operations Al Viro
@ 2015-03-20  6:45   ` Christoph Hellwig
  0 siblings, 0 replies; 9+ messages in thread
From: Christoph Hellwig @ 2015-03-20  6:45 UTC (permalink / raw)
  To: Al Viro
  Cc: Tadeusz Struk, davem, linux-aio, herbert, netdev, ying.xue, bcrl,
	linux-fsdevel, hch, linux-crypto

On Thu, Mar 19, 2015 at 07:51:05PM +0000, Al Viro wrote:
> I think I can live with that.  Christoph, do you have any objections to
> that series?

Patch 1 looks fine to me which is probably what you care for.  I didn't have
time to look into the other two.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 net-next 0/3] Add support for async socket operations
  2015-03-19 19:31 [PATCH v3 net-next 0/3] Add support for async socket operations Tadeusz Struk
                   ` (3 preceding siblings ...)
  2015-03-19 19:51 ` [PATCH v3 net-next 0/3] Add support for async socket operations Al Viro
@ 2015-03-23 20:42 ` David Miller
  2015-03-23 21:13   ` Tadeusz Struk
  4 siblings, 1 reply; 9+ messages in thread
From: David Miller @ 2015-03-23 20:42 UTC (permalink / raw)
  To: tadeusz.struk
  Cc: linux-aio, herbert, netdev, ying.xue, bcrl, viro, linux-fsdevel,
	hch, linux-crypto

From: Tadeusz Struk <tadeusz.struk@intel.com>
Date: Thu, 19 Mar 2015 12:31:19 -0700

> After the iocb parameter has been removed from sendmsg() and recvmsg() ops
> the socket layer, and the network stack no longer support async operations.
> This patch set adds support for asynchronous operations on sockets back.
> 
> Changes in v3:
> * As sugested by Al Viro instead of adding new functions aio_sendmsg
>   and aio_recvmsg, added a ptr to iocb into the kernel-side msghdr structure.
>   This way no change to aio.c is required.
> 
> Changes in v2:
> * removed redundant total_size param from aio_sendmsg and aio_recvmsg functions

Series applied to net-next.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 net-next 0/3] Add support for async socket operations
  2015-03-23 20:42 ` David Miller
@ 2015-03-23 21:13   ` Tadeusz Struk
  2015-03-24 11:29     ` Herbert Xu
  0 siblings, 1 reply; 9+ messages in thread
From: Tadeusz Struk @ 2015-03-23 21:13 UTC (permalink / raw)
  To: David Miller
  Cc: linux-aio, herbert, netdev, ying.xue, bcrl, viro, linux-fsdevel,
	hch, linux-crypto

On 03/23/2015 01:42 PM, David Miller wrote:
> From: Tadeusz Struk <tadeusz.struk@intel.com>
> Date: Thu, 19 Mar 2015 12:31:19 -0700
> 
>> After the iocb parameter has been removed from sendmsg() and recvmsg() ops
>> the socket layer, and the network stack no longer support async operations.
>> This patch set adds support for asynchronous operations on sockets back.
>>
>> Changes in v3:
>> * As sugested by Al Viro instead of adding new functions aio_sendmsg
>>   and aio_recvmsg, added a ptr to iocb into the kernel-side msghdr structure.
>>   This way no change to aio.c is required.
>>
>> Changes in v2:
>> * removed redundant total_size param from aio_sendmsg and aio_recvmsg functions
> 
> Series applied to net-next.
> 

Thanks Dave!

Herbert, is it possible to pull it to cryptodev?


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v3 net-next 0/3] Add support for async socket operations
  2015-03-23 21:13   ` Tadeusz Struk
@ 2015-03-24 11:29     ` Herbert Xu
  0 siblings, 0 replies; 9+ messages in thread
From: Herbert Xu @ 2015-03-24 11:29 UTC (permalink / raw)
  To: Tadeusz Struk
  Cc: David Miller, linux-aio, netdev, ying.xue, bcrl, viro,
	linux-fsdevel, hch, linux-crypto

On Mon, Mar 23, 2015 at 02:13:21PM -0700, Tadeusz Struk wrote:
>
> Herbert, is it possible to pull it to cryptodev?

How many more changes do you have that sit on top of this? If
it's small we could just push them through net-next until the
merge window opens again.

Cheers,
-- 
Email: Herbert Xu <herbert@gondor.apana.org.au>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt

--
To unsubscribe, send a message with 'unsubscribe linux-aio' in
the body to majordomo@kvack.org.  For more info on Linux AIO,
see: http://www.kvack.org/aio/
Don't email: <a href=mailto:"aart@kvack.org">aart@kvack.org</a>

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2015-03-24 11:29 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-03-19 19:31 [PATCH v3 net-next 0/3] Add support for async socket operations Tadeusz Struk
2015-03-19 19:31 ` [PATCH v3 net-next 1/3] net: socket: add support for async operations Tadeusz Struk
2015-03-19 19:31 ` [PATCH v3 net-next 2/3] crypto: af_alg - Allow to link sgl Tadeusz Struk
2015-03-19 19:31 ` [PATCH v3 net-next 3/3] crypto: algif - change algif_skcipher to be asynchronous Tadeusz Struk
2015-03-19 19:51 ` [PATCH v3 net-next 0/3] Add support for async socket operations Al Viro
2015-03-20  6:45   ` Christoph Hellwig
2015-03-23 20:42 ` David Miller
2015-03-23 21:13   ` Tadeusz Struk
2015-03-24 11:29     ` Herbert Xu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).