Home | History | Annotate | Download | only in mount_psshfs
History log of /src/usr.sbin/puffs/mount_psshfs/psshfs.h
RevisionDateAuthorComments
 1.40  01-Apr-2010  pooka In case we create a file, reclaim the vnode, and lookup the file
without the directory timeout expiring, we get vattr_null as the
attributes for that file. Ensure that we always report sane
attributes by getting them from the server if this is the case.
(also, sprinkle some const)

Fixes problem reported by dyoung. But wait! The bug's medallion
begins to glow! The bug looks much better! I crumble to dust.

There's probably another similar bug related to "lazy open". It
will trigger if we reclaim a node before the response to the open
arrives. Even the comments (typoless) know about this bug ...
But verifying it exists and fixing it will have to wait for another
day.
 1.39  07-Jan-2010  pooka Add -u and -g, which allow to remap one (local,remote) uidgid, i.e.
umapfs without the fuss.
 1.38  05-Nov-2009  pooka more lp64 it's-a-sign! fixes
 1.37  20-May-2009  pooka Copyright year management. no functional change (unless sarah disagrees)
 1.36  20-May-2009  pooka 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.
 1.35  23-Feb-2009  pooka Support statvfs@openssh.com extension where available. Makes df(1)
return something other than just 0.
caveat: statvfs is done for the mountpoint path, so might not give
the truth about a directory inside the mountpoint.
 1.34  06-Sep-2008  pooka branches: 1.34.6;
Due to a recent encounter with a sucky internet connection, add
experimental option -p, which tries to reestablish the connection
to the sftp server in case it is lost. This currently has a few
limitations (found in the man page), but generally works in some
use cases.

Better support might eventually emerge, but since that requires a
plunge into the depths of puffs_framebuf, I need quite a bit of
Fernet Branca to build up my courage before attempting it.
 1.33  07-Dec-2007  pooka branches: 1.33.8;
Don't use puffs_cc_getusermount()
 1.32  07-Dec-2007  pooka Get rid of a lot of extra complexity due to doing separate getattr
requests in readdir - just use the results from the readdir rpc.
 1.31  30-Nov-2007  pooka Rototill.

Ok, ok, a few more words about it: stop holding puffs_cc as a holy
value and passing it around to almost every possible place (popquiz:
which kernel variable does this remind you of?). Instead, pass
the natural choice, puffs_usermount, and fetch puffs_cc via
puffs_cc_getcc() only in routines which actually need it. This
not only simplifies code, but (thanks to the introduction of
puffs_cc_getcc()) enables constructs which weren't previously sanely
possible, say layering as a curious example.

There's still a little to do on this front, but this was the major
fs interface blast.
 1.30  30-Nov-2007  pooka Introduce the concept of lazyopens. This means that when a file
handle open is requested, it is waited for only if the node was
not previously succesfully opened. The actual wait for the file
handle happens only when the file handle is actually needed (read
or write). This in turn has the effect that reading cached files
will be quick instead of waiting for the file handle from the sftp
server first. The wait previously could be very long if there were
serveral hundred k of outstanding requests in a limited-bandwidth
link.

The code is in some need of serious handholding, but it works, so
I'll leave that as "future work".
 1.29  18-Nov-2007  pooka Don't bother tracking opencount and try to close file handles in
the close method - simply just wait for inactive and do it there.
 1.28  11-Nov-2007  pooka Don't overload "attributes last read" for the symlink cache,
use a separate variable.
 1.27  10-Nov-2007  pooka Cache readlink results similarly to attributes. Makes "cd" fast
for a slow connection if a symlink is along the path.

(this should be done elsewhere, but I want it for sshfs now)
 1.26  08-Nov-2007  pooka Make attribute & directory content caching timeout a command line
option. Use -t -1 to never expire, which is nifty on a high-latency
link where you know the server won't be modified from under you.
 1.25  20-Oct-2007  pooka Add option -r to specify maximum number of active read requests
for each node. Setting this to a small number can be used to
improve interactive performance on low-bandwidth links when performing
bulk data reads. Of course I could also open separate pipes for
bulk and other, but this was quicker and less intrusive and doesn't
require authenticating twice.
 1.24  06-Sep-2007  pooka adapt to new cmpfb signature
 1.23  23-Aug-2007  pooka branches: 1.23.2;
Prevent crash in case there is more than one reader for the same
directory concurrently. Might need to revisit the method used here
later, though.
 1.22  27-Jul-2007  pooka branches: 1.22.4;
Track memory mappings. Close file handles already in close() if there
are no active mappings, otherwise do the standard inactive() run.
 1.21  07-Jul-2007  pooka adapt to puffs_framebuf changes
 1.20  06-Jun-2007  pooka Move puffs to a two clause license where it already isn't so. And
as agc pointed out, even files with the third clause were already
effectively two clause because of a slight bug in the language...
 1.19  20-May-2007  pooka Observe that when doing ls -l, the attributes of the first file
getattr are usually still outstanding when we already would like
the result. Instead of issueing another stat which will be serviced
only after all the other entries in the directory, record all the
outgoing readdir getattr buffers and if we encounter an outstanding
request when we need to fetch attrs, do a puffs_framev_framebuf_ccpromote()
wait for it instead of firing off the second query. This shaves
almost 10% off the time for ls -lR.

Also, get rid of the SUPERREADDIR conditional, since it has penetrated
the code quite a bit and the #ifdef SUPERREADDIRs were starting to
look like tagliatelle alla bolognese (n.b. I love how it looks,
but I wouldn't like it either if my tagliatelle alla bolognese
looked like psshfs code). Maybe it should be re-introduced in the
form of a switch?
 1.18  20-May-2007  pooka Implement SUPERREADDIR (like nfs readdirplus) getattr cache warming
a bit differently: when reading the directory, store all getattr
caching queries and fire off only when the directory read is
complete. That way the common sequence is not [readdir, lots of
async getattr requests, readdir EOF] but rather [readdir, readdir
EOF, lots of async getattr]. This speeds up ls -lR by about 25%
(on my LAN).
 1.17  18-May-2007  pooka remove obvious incorrect assert() from doreclaim() and remove the
whole PSN_NUKED bit - it's not very useful because of the noref setback.
 1.16  18-May-2007  pooka * use NOREF setback to prompt immediate (well, once the kernel
reference count goes to 0) reclaim of deleted nodes as opposed to
waiting for the system to start reclaiming the freelist
* combine some nodeflags from different variable to one status variable
 1.15  15-May-2007  pooka adapt to "step 3" of puffs_framebuf changes
 1.14  12-May-2007  pooka uint32_t vs. size_t pointer adjustments for LP64 build
 1.13  11-May-2007  pooka adapt to puffs_framebuf changes
 1.12  06-May-2007  pooka Open files in open and close them in inactive. This avoids the
silly and problematic chmod + open + "un"chmod in write, among
other things.
 1.11  05-May-2007  pooka Adapt to use puffs_framebuf. This gets rid of most of the duplicated
code between mount_psshfs and mount_9p and clarifies the code
structure.
 1.10  19-Apr-2007  pooka use puffs_cc_getspecific() where puffs_usermount is not required
 1.9  12-Apr-2007  pooka Support nfs exporting.

Now, when I say support, I mean "support", due to the limitations
of the backend. File handles are valid only for one session, since
nodes can only be identified by pathnames and pathnames don't (all)
fit into the nfs file handle space. Additionally, we can't detect
if a pathname is completely replaced by another file (if it's done
via some other route that through our mount, of course). But then
again, that's an inherent problem with sshfs even without nfs.
 1.8  12-Apr-2007  pooka Hide struct puffs_usermount from the rest of the world and provide
accessors for interesting data in it. Namely, you can now get
pu->pu_privdata with puffs_getspecific(), pu->pu_pn_root with
puffs_set/getroot() and pu->pu_maxreqlen with puffs_getmaxreqlen().
 1.7  22-Mar-2007  pooka In case lookup from the directory listing fails, try statting the
target before giving up. Makes it possible to access files from
-r+x directories.
 1.6  27-Feb-2007  pooka size_t -> uint32_t cleanup to make LP64 build

noticed by wiz
 1.5  15-Feb-2007  pooka Support reclaim. To support dotdot lookup, here we leave the
reclaimed nodes hanging until all their children have been reclaimed
and then reclaim everything we can as far up to root as possible.
This is because the file system structures are currently interlinked
in a fashion which would make dotdot lookup based on purely a path
instead of a in-memory node parent member pointer very difficult.
Yes, this deserves a closer look some day.
 1.4  09-Feb-2007  pooka Implement "superreaddir". This issues a getattr for all the
directory entries already in readdir and caches the results instead
of waiting for each individial getattr from the kernel. For
high-latency links the difference in "ls -l" is quite astounding
and even on my lan "ls -lR" is faster than for nfs in a normal
directory hierarchy (i.e. not one artifically setup to have thousands
of files per directory).

TODO: implement some sort of bandwidth/latency measurement in the
code and enable or disable this option based on than information
(and a command-line flag).
 1.3  15-Jan-2007  pooka * adapt to libpuffs path changes
* fix bug in rename
 1.2  06-Jan-2007  pooka * do mount as a forward operation instead of a callback
* process -o args for mount
 1.1  29-Dec-2006  pooka puffs sshfs, an sshfs implementation built on top of the puffs
continuation framework
 1.22.4.2  27-Jul-2007  pooka Track memory mappings. Close file handles already in close() if there
are no active mappings, otherwise do the standard inactive() run.
 1.22.4.1  27-Jul-2007  pooka file psshfs.h was added on branch matt-mips64 on 2007-07-27 09:46:29 +0000
 1.23.2.2  09-Jan-2008  matt sync with HEAD
 1.23.2.1  06-Nov-2007  matt sync with HEAD
 1.33.8.1  18-Sep-2008  wrstuden Sync with wrstuden-revivesa-base-2.
 1.34.6.1  13-May-2009  jym Sync with HEAD.

Third (and last) commit. See http://mail-index.netbsd.org/source-changes/2009/05/13/msg221222.html

RSS XML Feed