Commit 2c606478 authored by David S. Miller's avatar David S. Miller

fs/smbfs/sock.c: Update for new sendmsg/recvmsg args.

parent 82bfe628
...@@ -40,7 +40,8 @@ _recvfrom(struct socket *socket, unsigned char *ubuf, int size, unsigned flags) ...@@ -40,7 +40,8 @@ _recvfrom(struct socket *socket, unsigned char *ubuf, int size, unsigned flags)
{ {
struct iovec iov; struct iovec iov;
struct msghdr msg; struct msghdr msg;
struct scm_cookie scm; struct kiocb iocb;
struct sock_iocb *si;
mm_segment_t fs; mm_segment_t fs;
fs = get_fs(); fs = get_fs();
...@@ -56,10 +57,21 @@ _recvfrom(struct socket *socket, unsigned char *ubuf, int size, unsigned flags) ...@@ -56,10 +57,21 @@ _recvfrom(struct socket *socket, unsigned char *ubuf, int size, unsigned flags)
iov.iov_base = ubuf; iov.iov_base = ubuf;
iov.iov_len = size; iov.iov_len = size;
memset(&scm, 0, sizeof(scm)); init_sync_kiocb(&iocb, NULL);
size = socket->ops->recvmsg(socket, &msg, size, flags, &scm); si = kiocb_to_siocb(iocb);
si->sock = socket;
si->scm = &si->async_scm;
si->msg = &msg;
si->size = size;
si->flags = flags;
memset(si->scm, 0, sizeof(*si->scm));
size = socket->ops->recvmsg(&iocb, socket, &msg, size, flags, si->scm);
if (size >= 0) if (size >= 0)
scm_recv(socket, &msg, &scm, flags); scm_recv(socket, &msg, si->scm, flags);
if (-EIOCBQUEUED == size)
size = wait_on_sync_kiocb(&iocb);
set_fs(fs); set_fs(fs);
return size; return size;
...@@ -286,7 +298,8 @@ smb_receive_drop(struct smb_sb_info *server) ...@@ -286,7 +298,8 @@ smb_receive_drop(struct smb_sb_info *server)
unsigned int flags; unsigned int flags;
struct iovec iov; struct iovec iov;
struct msghdr msg; struct msghdr msg;
struct scm_cookie scm; struct kiocb iocb;
struct sock_iocb *si;
mm_segment_t fs; mm_segment_t fs;
int rlen = smb_len(server->header) - server->smb_read + 4; int rlen = smb_len(server->header) - server->smb_read + 4;
int result = -EIO; int result = -EIO;
...@@ -313,10 +326,21 @@ smb_receive_drop(struct smb_sb_info *server) ...@@ -313,10 +326,21 @@ smb_receive_drop(struct smb_sb_info *server)
if (rlen > PAGE_SIZE) if (rlen > PAGE_SIZE)
rlen = PAGE_SIZE; rlen = PAGE_SIZE;
memset(&scm, 0, sizeof(scm)); init_sync_kiocb(&iocb, NULL);
result = sock->ops->recvmsg(sock, &msg, rlen, flags, &scm); si = kiocb_to_siocb(iocb);
si->sock = sock;
si->scm = &si->async_scm;
si->msg = &msg;
si->size = rlen;
si->flags = flags;
memset(si->scm, 0, sizeof(*si->scm));
result = sock->ops->recvmsg(&iocb, sock, &msg, rlen, flags, si->scm);
if (result >= 0) if (result >= 0)
scm_recv(sock, &msg, &scm, flags); scm_recv(sock, &msg, &scm, flags);
if (-EIOCBQUEUED == result)
result = wait_on_sync_kiocb(&iocb);
set_fs(fs); set_fs(fs);
...@@ -372,10 +396,21 @@ smb_receive(struct smb_sb_info *server, struct smb_request *req) ...@@ -372,10 +396,21 @@ smb_receive(struct smb_sb_info *server, struct smb_request *req)
if (req->rq_rlen < rlen) if (req->rq_rlen < rlen)
rlen = req->rq_rlen; rlen = req->rq_rlen;
memset(&scm, 0, sizeof(scm)); init_sync_kiocb(&iocb, NULL);
result = sock->ops->recvmsg(sock, &msg, rlen, flags, &scm); si = kiocb_to_siocb(iocb);
si->sock = sock;
si->scm = &si->async_scm;
si->msg = &msg;
si->size = rlen;
si->flags = flags;
memset(si->scm, 0, sizeof(*si->scm));
result = sock->ops->recvmsg(&iocb, sock, &msg, rlen, flags, si->scm);
if (result >= 0) if (result >= 0)
scm_recv(sock, &msg, &scm, flags); scm_recv(sock, &msg, &scm, flags);
if (-EIOCBQUEUED == result)
result = wait_on_sync_kiocb(&iocb);
set_fs(fs); set_fs(fs);
...@@ -403,7 +438,8 @@ smb_send_request(struct smb_request *req) ...@@ -403,7 +438,8 @@ smb_send_request(struct smb_request *req)
mm_segment_t fs; mm_segment_t fs;
struct smb_sb_info *server = req->rq_server; struct smb_sb_info *server = req->rq_server;
struct socket *sock; struct socket *sock;
struct scm_cookie scm; struct kiocb iocb;
struct sock_iocb *si;
struct msghdr msg; struct msghdr msg;
int slen = req->rq_slen - req->rq_bytes_sent; int slen = req->rq_slen - req->rq_bytes_sent;
int result = -EIO; int result = -EIO;
...@@ -427,13 +463,23 @@ smb_send_request(struct smb_request *req) ...@@ -427,13 +463,23 @@ smb_send_request(struct smb_request *req)
if (req->rq_bytes_sent) if (req->rq_bytes_sent)
smb_move_iov(&msg, iov, req->rq_bytes_sent); smb_move_iov(&msg, iov, req->rq_bytes_sent);
init_sync_kiocb(&iocb, NULL);
si = kiocb_to_siocb(iocb);
si->scm = &si->async_scm;
si->sock = sock;
si->msg = &msg;
si->size = slen;
fs = get_fs(); fs = get_fs();
set_fs(get_ds()); set_fs(get_ds());
result = scm_send(sock, &msg, &scm); result = scm_send(sock, &msg, si->scm);
if (result >= 0) { if (result >= 0) {
result = sock->ops->sendmsg(sock, &msg, slen, &scm); result = sock->ops->sendmsg(&iocb, sock, &msg, slen, si->scm);
scm_destroy(&scm); if (-EIOCBQUEUED != result)
scm_destroy(&scm);
} }
if (-EIOCBQUEUED == result)
result = wait_on_sync_kiocb(&iocb);
set_fs(fs); set_fs(fs);
if (result >= 0) { if (result >= 0) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment