Module Name: src Committed By: pooka Date: Wed May 20 13:56:36 UTC 2009
Modified Files: src/usr.sbin/puffs/mount_psshfs: fs.c mount_psshfs.8 node.c psshfs.c psshfs.h subr.c Log Message: Introduce -c [12], which can be used to open 1 or 2 ssh connections to the server. If "2" is specified, a separate connection is used for data and directory operations. Using two connections can significantly increase directory operation performance on a saturated link, at least up to 30x faster. To generate a diff of this commit: cvs rdiff -u -r1.18 -r1.19 src/usr.sbin/puffs/mount_psshfs/fs.c cvs rdiff -u -r1.19 -r1.20 src/usr.sbin/puffs/mount_psshfs/mount_psshfs.8 cvs rdiff -u -r1.56 -r1.57 src/usr.sbin/puffs/mount_psshfs/node.c cvs rdiff -u -r1.50 -r1.51 src/usr.sbin/puffs/mount_psshfs/psshfs.c cvs rdiff -u -r1.35 -r1.36 src/usr.sbin/puffs/mount_psshfs/psshfs.h cvs rdiff -u -r1.45 -r1.46 src/usr.sbin/puffs/mount_psshfs/subr.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.sbin/puffs/mount_psshfs/fs.c diff -u src/usr.sbin/puffs/mount_psshfs/fs.c:1.18 src/usr.sbin/puffs/mount_psshfs/fs.c:1.19 --- src/usr.sbin/puffs/mount_psshfs/fs.c:1.18 Mon Feb 23 18:43:46 2009 +++ src/usr.sbin/puffs/mount_psshfs/fs.c Wed May 20 13:56:36 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: fs.c,v 1.18 2009/02/23 18:43:46 pooka Exp $ */ +/* $NetBSD: fs.c,v 1.19 2009/05/20 13:56:36 pooka Exp $ */ /* * Copyright (c) 2006 Antti Kantee. All Rights Reserved. @@ -27,7 +27,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: fs.c,v 1.18 2009/02/23 18:43:46 pooka Exp $"); +__RCSID("$NetBSD: fs.c,v 1.19 2009/05/20 13:56:36 pooka Exp $"); #endif /* !lint */ #include <err.h> @@ -84,7 +84,7 @@ }}; int -psshfs_handshake(struct puffs_usermount *pu) +psshfs_handshake(struct puffs_usermount *pu, int fd) { struct psshfs_ctx *pctx = puffs_getspecific(pu); struct puffs_framebuf *pb; @@ -100,10 +100,10 @@ pb = psbuf_makeout(); psbuf_put_1(pb, SSH_FXP_INIT); psbuf_put_4(pb, SFTP_PROTOVERSION); - DO_IO(psbuf_write, pu, pb, pctx->sshfd, &done, rv); + DO_IO(psbuf_write, pu, pb, fd, &done, rv); puffs_framebuf_recycle(pb); - DO_IO(psbuf_read, pu, pb, pctx->sshfd, &done, rv); + DO_IO(psbuf_read, pu, pb, fd, &done, rv); if (psbuf_get_type(pb) != SSH_FXP_VERSION) reterr((stderr, "invalid server response: %d", psbuf_get_type(pb)), EPROTO); @@ -118,7 +118,7 @@ break; if (psbuf_get_str(pb, &val, NULL) != 0) break; - + for (extu = exttable; extu->ext; extu++) if (strcmp(ext, extu->ext) == 0 && strcmp(val, extu->val) == 0) @@ -130,10 +130,10 @@ psbuf_put_1(pb, SSH_FXP_REALPATH); psbuf_put_4(pb, NEXTREQ(pctx)); psbuf_put_str(pb, pctx->mountpath); - DO_IO(psbuf_write, pu, pb, pctx->sshfd, &done, rv); + DO_IO(psbuf_write, pu, pb, fd, &done, rv); puffs_framebuf_recycle(pb); - DO_IO(psbuf_read, pu, pb, pctx->sshfd, &done, rv); + DO_IO(psbuf_read, pu, pb, fd, &done, rv); if (psbuf_get_type(pb) != SSH_FXP_NAME) reterr((stderr, "invalid server realpath response for \"%s\"", pctx->mountpath), EPROTO); @@ -145,10 +145,10 @@ /* stat the rootdir so that we know it's a dir */ psbuf_recycleout(pb); psbuf_req_str(pb, SSH_FXP_LSTAT, NEXTREQ(pctx), rootpath); - DO_IO(psbuf_write, pu, pb, pctx->sshfd, &done, rv); + DO_IO(psbuf_write, pu, pb, fd, &done, rv); puffs_framebuf_recycle(pb); - DO_IO(psbuf_read, pu, pb, pctx->sshfd, &done, rv); + DO_IO(psbuf_read, pu, pb, fd, &done, rv); rv = psbuf_expect_attrs(pb, &va); if (rv) @@ -187,7 +187,7 @@ psbuf_req_str(pb, SSH_FXP_EXTENDED, reqid, "stat...@openssh.com"); psbuf_put_str(pb, pctx->mountpath); - GETRESPONSE(pb); + GETRESPONSE(pb, pctx->sshfd); type = psbuf_get_type(pb); if (type != SSH_FXP_EXTENDED_REPLY) { @@ -222,6 +222,11 @@ kill(pctx->sshpid, SIGTERM); close(pctx->sshfd); + if (pctx->numconnections == 2) { + kill(pctx->sshpid_data, SIGTERM); + close(pctx->sshfd_data); + } + return 0; } Index: src/usr.sbin/puffs/mount_psshfs/mount_psshfs.8 diff -u src/usr.sbin/puffs/mount_psshfs/mount_psshfs.8:1.19 src/usr.sbin/puffs/mount_psshfs/mount_psshfs.8:1.20 --- src/usr.sbin/puffs/mount_psshfs/mount_psshfs.8:1.19 Thu Feb 26 07:14:36 2009 +++ src/usr.sbin/puffs/mount_psshfs/mount_psshfs.8 Wed May 20 13:56:36 2009 @@ -1,4 +1,4 @@ -.\" $NetBSD: mount_psshfs.8,v 1.19 2009/02/26 07:14:36 wiz Exp $ +.\" $NetBSD: mount_psshfs.8,v 1.20 2009/05/20 13:56:36 pooka Exp $ .\" .\" Copyright (c) 2007 Antti Kantee. All rights reserved. .\" @@ -23,7 +23,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd February 25, 2009 +.Dd May 20, 2009 .Dt MOUNT_PSSHFS 8 .Os .Sh NAME @@ -56,6 +56,19 @@ The following command line options are available: .Pp .Bl -tag -width xxx +.It Fl c Ar nconnect +Opens +.Ar nconnect +connections to the server. +Currently, the value has to be 1 or 2. +If 2 is specified, a second connection is opened for the reading +and writing of data, while directory operations are performed on +their own connection. +This can greatly increase directory operation performance (ls, +mkdir, etc.) if +.Nm +completely saturates the available bandwidth by doing bulk data copying. +The default is 1. .It Fl e Makes the mounted file system NFS exportable. If this option is used, it is very important to understand that Index: src/usr.sbin/puffs/mount_psshfs/node.c diff -u src/usr.sbin/puffs/mount_psshfs/node.c:1.56 src/usr.sbin/puffs/mount_psshfs/node.c:1.57 --- src/usr.sbin/puffs/mount_psshfs/node.c:1.56 Sun Mar 29 16:06:53 2009 +++ src/usr.sbin/puffs/mount_psshfs/node.c Wed May 20 13:56:36 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: node.c,v 1.56 2009/03/29 16:06:53 pooka Exp $ */ +/* $NetBSD: node.c,v 1.57 2009/05/20 13:56:36 pooka Exp $ */ /* * Copyright (c) 2006 Antti Kantee. All Rights Reserved. @@ -27,7 +27,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: node.c,v 1.56 2009/03/29 16:06:53 pooka Exp $"); +__RCSID("$NetBSD: node.c,v 1.57 2009/05/20 13:56:36 pooka Exp $"); #endif /* !lint */ #include <assert.h> @@ -148,7 +148,7 @@ } psbuf_put_vattr(pb, &kludgeva); - GETRESPONSE(pb); + GETRESPONSE(pb, pctx->sshfd); rv = psbuf_expect_status(pb); if (rv == 0) @@ -173,7 +173,7 @@ psbuf_req_str(pb, SSH_FXP_OPEN, reqid, PCNPATH(pcn)); psbuf_put_4(pb, SSH_FXF_WRITE | SSH_FXF_CREAT | SSH_FXF_TRUNC); psbuf_put_vattr(pb, va); - GETRESPONSE(pb); + GETRESPONSE(pb, pctx->sshfd); rv = psbuf_expect_handle(pb, &fhand, &fhandlen); if (rv) goto out; @@ -190,7 +190,7 @@ struct puffs_framebuf *pb2 = psbuf_makeout(); reqid = NEXTREQ(pctx); psbuf_req_str(pb2, SSH_FXP_REMOVE, reqid, PCNPATH(pcn)); - JUSTSEND(pb2); + JUSTSEND(pb2, pctx->sshfd); rv = ENOMEM; } @@ -200,7 +200,7 @@ reqid = NEXTREQ(pctx); psbuf_recycleout(pb); psbuf_req_data(pb, SSH_FXP_CLOSE, reqid, fhand, fhandlen); - JUSTSEND(pb); + JUSTSEND(pb, pctx->sshfd); free(fhand); return rv; @@ -248,7 +248,7 @@ psbuf_put_4(pb, SSH_FXF_READ); psbuf_put_vattr(pb, &va); - if (puffs_framev_enqueue_cb(pu, pctx->sshfd, pb, + if (puffs_framev_enqueue_cb(pu, pctx->sshfd_data, pb, lazyopen_rresp, psn, 0) == -1) { rv = errno; puffs_framebuf_destroy(pb); @@ -266,7 +266,7 @@ psbuf_put_4(pb2, SSH_FXF_WRITE); psbuf_put_vattr(pb2, &va); - if (puffs_framev_enqueue_cb(pu, pctx->sshfd, pb2, + if (puffs_framev_enqueue_cb(pu, pctx->sshfd_data, pb2, lazyopen_wresp, psn, 0) == -1) { rv = errno; puffs_framebuf_destroy(pb2); @@ -480,7 +480,7 @@ puffs_cc_yield(pcc); } - GETRESPONSE(pb); + GETRESPONSE(pb, pctx->sshfd_data); rv = psbuf_do_data(pb, buf, &readlen); if (rv == 0) @@ -574,7 +574,7 @@ psbuf_req_data(pb, SSH_FXP_WRITE, reqid, psn->fhand_w,psn->fhand_w_len); psbuf_put_8(pb, offset); psbuf_put_data(pb, buf, writelen); - GETRESPONSE(pb); + GETRESPONSE(pb, pctx->sshfd_data); rv = psbuf_expect_status(pb); if (rv == 0) @@ -626,7 +626,7 @@ } psbuf_req_str(pb, SSH_FXP_READLINK, reqid, PNPATH(pn)); - GETRESPONSE(pb); + GETRESPONSE(pb, pctx->sshfd); rv = psbuf_expect_name(pb, &count); if (rv) @@ -662,7 +662,7 @@ op = SSH_FXP_REMOVE; psbuf_req_str(pb, op, reqid, PNPATH(pn)); - GETRESPONSE(pb); + GETRESPONSE(pb, pctx->sshfd); rv = psbuf_expect_status(pb); if (rv == 0) @@ -715,7 +715,7 @@ psbuf_req_str(pb, SSH_FXP_MKDIR, reqid, PCNPATH(pcn)); psbuf_put_vattr(pb, va); - GETRESPONSE(pb); + GETRESPONSE(pb, pctx->sshfd); rv = psbuf_expect_status(pb); if (rv) @@ -729,7 +729,7 @@ reqid = NEXTREQ(pctx); psbuf_recycleout(pb2); psbuf_req_str(pb2, SSH_FXP_RMDIR, reqid, PCNPATH(pcn)); - JUSTSEND(pb2); + JUSTSEND(pb2, pctx->sshfd); rv = ENOMEM; } @@ -757,7 +757,7 @@ */ psbuf_req_str(pb, SSH_FXP_SYMLINK, reqid, link_target); psbuf_put_str(pb, PCNPATH(pcn)); - GETRESPONSE(pb); + GETRESPONSE(pb, pctx->sshfd); rv = psbuf_expect_status(pb); if (rv) @@ -771,7 +771,7 @@ reqid = NEXTREQ(pctx); psbuf_recycleout(pb2); psbuf_req_str(pb2, SSH_FXP_REMOVE, reqid, PCNPATH(pcn)); - JUSTSEND(pb2); + JUSTSEND(pb2, pctx->sshfd); rv = ENOMEM; } @@ -804,7 +804,7 @@ psbuf_req_str(pb, SSH_FXP_RENAME, reqid, PCNPATH(pcn_src)); psbuf_put_str(pb, PCNPATH(pcn_targ)); - GETRESPONSE(pb); + GETRESPONSE(pb, pctx->sshfd); rv = psbuf_expect_status(pb); if (rv == 0) { Index: src/usr.sbin/puffs/mount_psshfs/psshfs.c diff -u src/usr.sbin/puffs/mount_psshfs/psshfs.c:1.50 src/usr.sbin/puffs/mount_psshfs/psshfs.c:1.51 --- src/usr.sbin/puffs/mount_psshfs/psshfs.c:1.50 Mon Feb 23 18:43:46 2009 +++ src/usr.sbin/puffs/mount_psshfs/psshfs.c Wed May 20 13:56:36 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: psshfs.c,v 1.50 2009/02/23 18:43:46 pooka Exp $ */ +/* $NetBSD: psshfs.c,v 1.51 2009/05/20 13:56:36 pooka Exp $ */ /* * Copyright (c) 2006 Antti Kantee. All Rights Reserved. @@ -41,7 +41,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: psshfs.c,v 1.50 2009/02/23 18:43:46 pooka Exp $"); +__RCSID("$NetBSD: psshfs.c,v 1.51 2009/05/20 13:56:36 pooka Exp $"); #endif /* !lint */ #include <sys/types.h> @@ -60,7 +60,7 @@ #include "psshfs.h" -static int pssh_connect(struct psshfs_ctx *); +static int pssh_connect(struct puffs_usermount *, int); static void psshfs_loopfn(struct puffs_usermount *); static void usage(void); static void add_ssharg(char ***, int *, char *); @@ -87,7 +87,7 @@ { fprintf(stderr, "usage: %s " - "[-es] [-F configfile] [-O sshopt=value] [-o opts] " + "[-ceprst] [-F configfile] [-O sshopt=value] [-o opts] " "u...@host:path mountpath\n", getprogname()); exit(1); @@ -116,8 +116,8 @@ char *hostpath; int mntflags, pflags, ch; int detach; - int exportfs, refreshival; - int nargs, x; + int exportfs, refreshival, numconnections; + int nargs; setprogname(argv[0]); @@ -125,6 +125,7 @@ usage(); mntflags = pflags = exportfs = nargs = 0; + numconnections = 1; detach = 1; refreshival = DEFAULTREFRESH; notfn = puffs_framev_unmountonclose; @@ -133,8 +134,17 @@ add_ssharg(&sshargs, &nargs, "-axs"); add_ssharg(&sshargs, &nargs, "-oClearAllForwardings=yes"); - while ((ch = getopt(argc, argv, "eF:o:O:pr:st:")) != -1) { + while ((ch = getopt(argc, argv, "c:eF:o:O:pr:st:")) != -1) { switch (ch) { + case 'c': + numconnections = atoi(optarg); + if (numconnections < 1 || numconnections > 2) { + fprintf(stderr, "%s: only 1 or 2 connections " + "permitted currently\n", getprogname()); + usage(); + /*NOTREACHED*/ + } + break; case 'e': exportfs = 1; break; @@ -214,6 +224,7 @@ memset(&pctx, 0, sizeof(pctx)); pctx.mounttime = time(NULL); pctx.refreshival = refreshival; + pctx.numconnections = numconnections; userhost = argv[0]; hostpath = strchr(userhost, ':'); @@ -234,26 +245,29 @@ return errno; puffs_setroot(pu, pn_root); + puffs_framev_init(pu, psbuf_read, psbuf_write, psbuf_cmp, NULL, notfn); + signal(SIGHUP, takehup); puffs_ml_setloopfn(pu, psshfs_loopfn); - if (pssh_connect(&pctx) == -1) - err(1, "can't connect"); + if (pssh_connect(pu, PSSHFD_META) == -1) + err(1, "can't connect meta"); + if (puffs_framev_addfd(pu, pctx.sshfd, + PUFFS_FBIO_READ | PUFFS_FBIO_WRITE) == -1) + err(1, "framebuf addfd meta"); + if (numconnections == 2) { + if (pssh_connect(pu, PSSHFD_DATA) == -1) + err(1, "can't connect data"); + if (puffs_framev_addfd(pu, pctx.sshfd_data, + PUFFS_FBIO_READ | PUFFS_FBIO_WRITE) == -1) + err(1, "framebuf addfd data"); + } else { + pctx.sshfd_data = pctx.sshfd; + } if (exportfs) puffs_setfhsize(pu, sizeof(struct psshfs_fid), PUFFS_FHFLAG_NFSV2 | PUFFS_FHFLAG_NFSV3); - if (psshfs_handshake(pu) != 0) - errx(1, "psshfs_handshake"); - x = 1; - if (ioctl(pctx.sshfd, FIONBIO, &x) == -1) - err(1, "nonblocking descriptor"); - - puffs_framev_init(pu, psbuf_read, psbuf_write, psbuf_cmp, NULL, notfn); - if (puffs_framev_addfd(pu, pctx.sshfd, - PUFFS_FBIO_READ | PUFFS_FBIO_WRITE) == -1) - err(1, "framebuf addfd"); - rva = &pn_root->pn_va; rva->va_fileid = pctx.nextino++; rva->va_nlink = 101; /* XXX */ @@ -280,36 +294,43 @@ psshfs_notify(struct puffs_usermount *pu, int fd, int what) { struct psshfs_ctx *pctx = puffs_getspecific(pu); - int x, nretry; + int x, nretry, which, newfd; + + if (fd == pctx->sshfd) { + which = PSSHFD_META; + } else { + assert(fd == pctx->sshfd_data); + which = PSSHFD_DATA; + } if (puffs_getstate(pu) != PUFFS_STATE_RUNNING) return; if (what != (PUFFS_FBIO_READ | PUFFS_FBIO_WRITE)) { - puffs_framev_removefd(pu, pctx->sshfd, ECONNRESET); + puffs_framev_removefd(pu, fd, ECONNRESET); return; } - close(pctx->sshfd); + close(fd); for (nretry = 0;;nretry++) { - if (pssh_connect(pctx) == -1) + if ((newfd = pssh_connect(pu, which)) == -1) goto retry2; - if (psshfs_handshake(pu) != 0) + if (psshfs_handshake(pu, newfd) != 0) goto retry1; x = 1; - if (ioctl(pctx->sshfd, FIONBIO, &x) == -1) + if (ioctl(newfd, FIONBIO, &x) == -1) goto retry1; - if (puffs_framev_addfd(pu, pctx->sshfd, + if (puffs_framev_addfd(pu, newfd, PUFFS_FBIO_READ | PUFFS_FBIO_WRITE) == -1) goto retry1; break; retry1: fprintf(stderr, "reconnect failed... "); - close(pctx->sshfd); + close(newfd); retry2: if (nretry < RETRY_MAX) { fprintf(stderr, "retrying\n"); @@ -322,12 +343,24 @@ } static int -pssh_connect(struct psshfs_ctx *pctx) +pssh_connect(struct puffs_usermount *pu, int which) { + struct psshfs_ctx *pctx = puffs_getspecific(pu); char **sshargs = pctx->sshargs; int fds[2]; pid_t pid; - int dnfd; + int dnfd, x; + int *sshfd; + pid_t *sshpid; + + if (which == PSSHFD_META) { + sshfd = &pctx->sshfd; + sshpid = &pctx->sshpid; + } else { + assert(which == PSSHFD_DATA); + sshfd = &pctx->sshfd_data; + sshpid = &pctx->sshpid_data; + } if (socketpair(AF_UNIX, SOCK_STREAM, 0, fds) == -1) return -1; @@ -350,15 +383,22 @@ dup2(dnfd, STDERR_FILENO); execvp(sshargs[0], sshargs); + /*NOTREACHED*/ break; default: - pctx->sshpid = pid; - pctx->sshfd = fds[1]; + *sshpid = pid; + *sshfd = fds[1]; close(fds[0]); break; } - return 0; + if (psshfs_handshake(pu, *sshfd) != 0) + errx(1, "psshfs_handshake %d", which); + x = 1; + if (ioctl(*sshfd, FIONBIO, &x) == -1) + err(1, "nonblocking descriptor %d", which); + + return *sshfd; } static void * Index: src/usr.sbin/puffs/mount_psshfs/psshfs.h diff -u src/usr.sbin/puffs/mount_psshfs/psshfs.h:1.35 src/usr.sbin/puffs/mount_psshfs/psshfs.h:1.36 --- src/usr.sbin/puffs/mount_psshfs/psshfs.h:1.35 Mon Feb 23 18:43:46 2009 +++ src/usr.sbin/puffs/mount_psshfs/psshfs.h Wed May 20 13:56:36 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: psshfs.h,v 1.35 2009/02/23 18:43:46 pooka Exp $ */ +/* $NetBSD: psshfs.h,v 1.36 2009/05/20 13:56:36 pooka Exp $ */ /* * Copyright (c) 2006, 2007 Antti Kantee. All Rights Reserved. @@ -65,25 +65,25 @@ puffs_framebuf_destroy(pb); \ return (rv) -#define GETRESPONSE(pb) \ +#define GETRESPONSE(pb, fd) \ do { \ - if (puffs_framev_enqueue_cc(pcc, pctx->sshfd, pb, 0) == -1) { \ + if (puffs_framev_enqueue_cc(pcc, fd, pb, 0) == -1) { \ rv = errno; \ goto out; \ } \ } while (/*CONSTCOND*/0) -#define JUSTSEND(pb) \ +#define JUSTSEND(pb,fd) \ do { \ - if (puffs_framev_enqueue_justsend(pu,pctx->sshfd,pb,1,0) == -1){\ + if (puffs_framev_enqueue_justsend(pu, fd, pb, 1, 0) == -1) { \ rv = errno; \ goto out; \ } \ } while (/*CONSTCOND*/0) -#define SENDCB(pb, f, a) \ +#define SENDCB(pb, fd, f, a) \ do { \ - if (puffs_framev_enqueue_cb(pu, pctx->sshfd, pb,f,a,0) == -1) { \ + if (puffs_framev_enqueue_cb(pu, fd, pb, f, a, 0) == -1) { \ rv = errno; \ goto out; \ } \ @@ -153,8 +153,12 @@ #define HANDLE_WRITE 0x2 struct psshfs_ctx { + int numconnections; int sshfd; + int sshfd_data; pid_t sshpid; + pid_t sshpid_data; + const char *mountpath; char **sshargs; @@ -173,8 +177,10 @@ int refreshival; }; +#define PSSHFD_META 0 +#define PSSHFD_DATA 1 -int psshfs_handshake(struct puffs_usermount *); +int psshfs_handshake(struct puffs_usermount *, int); int psbuf_read(struct puffs_usermount *, struct puffs_framebuf *,int,int*); int psbuf_write(struct puffs_usermount *, struct puffs_framebuf *,int,int*); Index: src/usr.sbin/puffs/mount_psshfs/subr.c diff -u src/usr.sbin/puffs/mount_psshfs/subr.c:1.45 src/usr.sbin/puffs/mount_psshfs/subr.c:1.46 --- src/usr.sbin/puffs/mount_psshfs/subr.c:1.45 Thu Dec 13 14:59:00 2007 +++ src/usr.sbin/puffs/mount_psshfs/subr.c Wed May 20 13:56:36 2009 @@ -1,4 +1,4 @@ -/* $NetBSD: subr.c,v 1.45 2007/12/13 14:59:00 pooka Exp $ */ +/* $NetBSD: subr.c,v 1.46 2009/05/20 13:56:36 pooka Exp $ */ /* * Copyright (c) 2006 Antti Kantee. All Rights Reserved. @@ -27,7 +27,7 @@ #include <sys/cdefs.h> #ifndef lint -__RCSID("$NetBSD: subr.c,v 1.45 2007/12/13 14:59:00 pooka Exp $"); +__RCSID("$NetBSD: subr.c,v 1.46 2009/05/20 13:56:36 pooka Exp $"); #endif /* !lint */ #include <assert.h> @@ -134,7 +134,7 @@ reqid = NEXTREQ(pctx); psbuf_req_data(pb1, SSH_FXP_CLOSE, reqid, psn->fhand_r, psn->fhand_r_len); - puffs_framev_enqueue_justsend(pu, pctx->sshfd, pb1, 1, 0); + puffs_framev_enqueue_justsend(pu, pctx->sshfd_data, pb1, 1, 0); free(psn->fhand_r); psn->fhand_r = NULL; } @@ -146,7 +146,7 @@ reqid = NEXTREQ(pctx); psbuf_req_data(pb2, SSH_FXP_CLOSE, reqid, psn->fhand_w, psn->fhand_w_len); - puffs_framev_enqueue_justsend(pu, pctx->sshfd, pb2, 1, 0); + puffs_framev_enqueue_justsend(pu, pctx->sshfd_data, pb2, 1, 0); free(psn->fhand_w); psn->fhand_w = NULL; } @@ -220,7 +220,7 @@ PSSHFSAUTOVAR(pu); psbuf_req_str(pb, SSH_FXP_LSTAT, reqid, path); - GETRESPONSE(pb); + GETRESPONSE(pb, pctx->sshfd); rv = psbuf_expect_attrs(pb, vap); @@ -307,7 +307,7 @@ reqid = NEXTREQ(pctx); psbuf_recycleout(pb); psbuf_req_data(pb, SSH_FXP_READDIR, reqid, dhand, dhandlen); - GETRESPONSE(pb); + GETRESPONSE(pb, pctx->sshfd); /* check for EOF */ if (psbuf_get_type(pb) == SSH_FXP_STATUS) {