Template Version: @(#)sac_nextcase 1.68 02/23/09 SMI
This information is Copyright 2009 Sun Microsystems
1. Introduction
    1.1. Project/Component Working Name:
         CIFS client updates for auto-reconnect
    1.2. Name of Document Author/Supplier:
         Author:  Gordon Ross
    1.3  Date of This Document:
        17 June, 2009
4. Technical Description

1. Technical Description

    CIFS client updates for auto-reconnect.

2. Details
    2.1 Background and motivation

    The Solaris CIFS Client [PSARC 2005/695] provides the ability to
    mount SMB shares from Windows-compatible servers on Solaris.

    Server Message Block (SMB) is the preferred name of the protocol
    used for Windows-compatible file sharing.  The rest of this text
    uses SMB in place of CIFS.

    As currently implemented, the SMB client performs connection
    setup in the context of user commands (smbutil or mount_smbfs)
    that first asks for a connection, and keeps that connection in
    the SMB client kernel module (nsmb).  There is nothing in
    place to arrange for automatic reconnection if and when the
    server drops that connection.  See [CR 6587713].

    2.2 New or changed features

    This case proposes to add a new helper program to initiate
    reconnection when needed, installed as: /usr/lib/smbfs/smbiod
    (IOD is short for I/O Deamon, a name that comes from the
    original BSD/Darwin code used in the SMB client.)

    An smbiod process is started by one of the SMB client user
    commands (smbutil or mount_smbfs), and continues to run until
    that user no longer has any SMB client connections.  There
    will be one smbiod process for each user that has SMB client
    connections. [Note 1]

    Each smbiod processes instantiates a door service on the file
    "/tmp/.smbiod-%d" where %d is the owning Unix user ID, or the
    file "/var/run/smbiod-0" when the owner is UID zero.  The door
    file name is first unlinked, and then created with mode 600 to
    prevent use by other users.  The create is done via open with
    the O_CREAT|O_EXCL flags to prevent unintentionally opening
    something unexpected (i.e. symlink attacks).  If the unlink
    or create fails, smbiod exits with an error.

    Once running, smbiod accepts door calls asking it to make new
    connections.  Such door calls provide the server IP address
    and authentication information needed for initiating or
    re-creating a connection to a server.  Once the connection to
    the server is up, smbiod calls the "nsmb" driver via
    ioctl, becoming the IOD service thread for that connection.
    If and when a connection is dropped, the driver waits for
    other threads to request use of the connection, returns to the
    user-level smbiod to re-create the connection, and enters the
    driver again.  If a reconnection attempt fails for a temporary
    reason, the thread sleeps for 5 seconds before allowing
    requests to trigger another attempt.  If a reconnection
    attempt fails for some permanent reason (i.e. authentication
    info. no longer valid) the IOD thread exits, and attempts to
    use that connection will get the ENOTCONN error.  Such
    connections can be revived by running smbutil (or mount_smbfs)
    with new authentication information.  When a connection in
    driver loses all its references, the IOD thread returns to
    smbiod and destroys the connection.  When smbiod drops its
    last connection, it waits 15 seconds, and if no new
    connections are requested during that time, it deletes the
    door and exits.

    The new smbiod program is part of the SUNWsmbfsu package,
    along with all the other SMB client binaries.

    No direct user interface is provided by smbiod.

3. Interface table
    (no change)

4. Documentation

    New manual page smbiod(1M) describing what "smbiod" is and does,
    based on the above text.  Probably similar to nfsmapid(1M).

5. References

    http://sac.sfbay/PSARC/2005/695/

    http://docs.sun.com/app/docs/doc/819-2240/mount-smbfs-1m

    http://bugs.opensolaris.org/view_bug.do?bug_id=6584198
        (SMB Client needs authentication improvements)

    http://bugs.opensolaris.org/view_bug.do?bug_id=6587713
        (Need to reconnect after server disconnect)

6. Resources and Schedule

    n/a

Appendix, Notes

Note 1: Initial reviewers expected that the smbiod process might
run as part of an SMF service like svc:/network/smb/client.
That would be a useful improvement, but there are a few things
presently used by the SMB client connection setup code that
assume the calling thread's UID is that of the user for which
actions are being performed.  If connection setup were to be
consolidated into one process, we would first need to change
the supporting components to accept a UID (or credentials)
argument to indicate which user this connection belongs to.
It would be unfortunate to delay this important reconnection
feature for such an improvement.

6. Resources and Schedule
    6.4. Steering Committee requested information
        6.4.1. Consolidation C-team Name:
                ON
    6.5. ARC review type: FastTrack
    6.6. ARC Exposure: open


Reply via email to