01 Oct, 2014

1 commit

  • The SEEK operation is used when an application makes an lseek call with
    either the SEEK_HOLE or SEEK_DATA flags set. I fall back on
    nfs_file_llseek() if the server does not have SEEK support.

    Signed-off-by: Anna Schumaker
    Signed-off-by: Trond Myklebust

    Anna Schumaker
     

30 May, 2014

1 commit

  • The object and block layouts already exist in their own
    subdirectories. This patch completes the set!

    Note that as a layout denotes nfs4 already, I stripped
    that prefix out of the file names.

    Signed-off-by: Tom Haynes
    Acked-by: Jeff Layton
    Signed-off-by: Trond Myklebust

    Tom Haynes
     

04 Sep, 2013

1 commit


22 Aug, 2013

2 commits


19 Jun, 2013

1 commit


06 Dec, 2012

1 commit


17 Aug, 2012

1 commit

  • Some systems have a modprobe.d/nfs.conf file that sets an nfs4 alias
    pointing to nfs.ko, rather than nfs4.ko. This can prevent the v4 module
    from loading on mount, since the kernel sees that something named "nfs4"
    has already been loaded. To work around this, I've renamed the modules
    to "nfsv2.ko" "nfsv3.ko" and "nfsv4.ko".

    I also had to move the nfs4_fs_type back to nfs.ko to ensure that `mount
    -t nfs4` still works.

    Signed-off-by: Bryan Schumaker
    Signed-off-by: Trond Myklebust

    bjschuma@gmail.com
     

31 Jul, 2012

5 commits

  • This patch exports symbols needed by the v4 module. In addition, I also
    switch over to using IS_ENABLED() to check if CONFIG_NFS_V4 or
    CONFIG_NFS_V4_MODULE are set.

    The module (nfs4.ko) will be created in the same directory as nfs.ko and
    will be automatically loaded the first time you try to mount over NFS v4.

    Signed-off-by: Bryan Schumaker
    Signed-off-by: Trond Myklebust

    Bryan Schumaker
     
  • This patch exports symbols and moves over the final structures needed by
    the v3 module. In addition, I also switch over to using IS_ENABLED() to
    check if CONFIG_NFS_V3 or CONFIG_NFS_V3_MODULE are set.

    The module (nfs3.ko) will be created in the same directory as nfs.ko and
    will be automatically loaded the first time you try to mount over NFS v3.

    Signed-off-by: Bryan Schumaker
    Signed-off-by: Trond Myklebust

    Bryan Schumaker
     
  • The module (nfs2.ko) will be created in the same directory as nfs.ko and
    will be automatically loaded the first time you try to mount over NFS v2.

    Signed-off-by: Bryan Schumaker
    Signed-off-by: Trond Myklebust

    Bryan Schumaker
     
  • v2 and v4 don't use it, so I create two new nfs_rpc_ops functions to
    initialize the ACL client only when we are using v3.

    Signed-off-by: Bryan Schumaker
    Signed-off-by: Trond Myklebust

    Bryan Schumaker
     
  • This patch adds in the code to track multiple versions of the NFS
    protocol. I created default structures for v2, v3 and v4 so that each
    version can continue to work while I convert them into kernel modules.
    I also removed the const parameter from the rpc_version array so that I
    can change it at runtime.

    Signed-off-by: Bryan Schumaker
    Signed-off-by: Trond Myklebust

    Bryan Schumaker
     

18 Jul, 2012

5 commits


15 May, 2012

1 commit


01 Aug, 2011

1 commit

  • Define a configuration variable to enable/disable compilation of the
    block driver code.

    Add the minimal structure for a pnfs block layout driver, and empty
    list-heads that will hold the extent data

    [pnfsblock: make NFS_V4_1 select PNFS_BLOCK]
    Signed-off-by: Peng Tao
    Signed-off-by: Fred Isaman
    Signed-off-by: Benny Halevy
    [pnfs-block: fix CONFIG_PNFS_BLOCK dependencies]
    Signed-off-by: Benny Halevy
    Signed-off-by: Benny Halevy
    [pnfsblock: SQUASHME: adjust to API change]
    Signed-off-by: Fred Isaman
    [pnfs: move pnfs_layout_type inline in nfs_inode]
    Signed-off-by: Benny Halevy
    [blocklayout: encode_layoutcommit implementation]
    Signed-off-by: Boaz Harrosh
    Signed-off-by: Benny Halevy
    Signed-off-by: Benny Halevy
    [pnfsblock: layout alloc and free]
    Signed-off-by: Fred Isaman
    [pnfs: move pnfs_layout_type inline in nfs_inode]
    Signed-off-by: Benny Halevy
    Signed-off-by: Benny Halevy
    [pnfsblock: define module alias]
    Signed-off-by: Peng Tao
    [rm inode and pnfs_layout_hdr args from cleanup_layoutcommit()]
    Signed-off-by: Jim Rees
    Signed-off-by: Trond Myklebust

    Fred Isaman
     

30 May, 2011

1 commit

  • * Define the PNFS_OBJLAYOUT Kconfig option in the nfs
    master Kconfig file.
    * Add the objlayout driver to the Kernel's Kbuild system.
    * Add the fs/nfs/objlayout/Kbuild file for building the
    objlayoutdriver.ko driver
    * Define fs/nfs/objlayout/objio_osd.c, register the driver on module
    initialization and unregister on exit.

    [pnfs-obj: remove of CONFIG_PNFS fallout]
    Signed-off-by: Boaz Harrosh
    [added "unsure" clause]
    [depend on NFS_V4_1]
    Signed-off-by: Benny Halevy

    Benny Halevy
     

29 May, 2011

1 commit


25 Oct, 2010

3 commits

  • Implement the driver's io_ops->alloc_lseg and free_lseg functions,
    which integrate into the deviceid cache and calls out to
    nfs4_proc_getdeviceinfo when necessary.

    Signed-off-by: Andy Adamson
    Signed-off-by: Dean Hildebrand
    Signed-off-by: Marc Eshel
    Signed-off-by: Mike Sager
    Signed-off-by: Oleg Drokin
    Signed-off-by: Ricardo Labiaga
    Signed-off-by: Tao Guo
    Signed-off-by: Boaz Harrosh
    Signed-off-by: Fred Isaman
    Signed-off-by: Trond Myklebust

    Andy Adamson
     
  • This driver just registers itself and supplies trivial mount/umount functions.

    Signed-off-by: Dean Hildebrand
    Signed-off-by: Marc Eshel
    Signed-off-by: Benny Halevy
    Signed-off-by: Fred Isaman
    Signed-off-by: Trond Myklebust

    Dean Hildebrand
     
  • Put in the infrastructure that uses information returned from the
    server at mount to select a layout driver module.

    In this patch, a stub is used that always returns "no driver found".

    Signed-off-by: Ricardo Labiaga
    Signed-off-by: Dean Hildebrand
    Signed-off-by: Marc Eshel
    Signed-off-by: Andy Adamson
    Signed-off-by: Benny Halevy
    Signed-off-by: Fred Isaman
    Signed-off-by: Trond Myklebust

    Ricardo Labiaga
     

20 Aug, 2009

1 commit

  • The NFSv4 and NFSv4.1 protocols both allow for the redirection of a client
    from one server to another in order to support filesystem migration and
    replication. For full protocol support, we need to add the ability to
    convert a DNS host name into an IP address that we can feed to the RPC
    client.

    We'll reuse the sunrpc cache, now that it has been converted to work with
    rpc_pipefs.

    Signed-off-by: Trond Myklebust

    Trond Myklebust
     

03 Apr, 2009

2 commits

  • Define and create server-level cache index objects (as managed by nfs_client
    structs).

    Each server object is created in the NFS top-level index object and is itself
    an index into which superblock-level objects are inserted.

    Ideally there would be one superblock-level object per server, and the former
    would be folded into the latter; however, since the "nosharecache" option
    exists this isn't possible.

    The server object key is a sequence consisting of:

    (1) NFS version

    (2) Server address family (eg: AF_INET or AF_INET6)

    (3) Server port.

    (4) Server IP address.

    The key blob is of variable length, depending on the length of (4).

    The server object is given no coherency data to carry in the auxiliary data
    permitted by the cache.

    Signed-off-by: David Howells
    Acked-by: Steve Dickson
    Acked-by: Trond Myklebust
    Acked-by: Al Viro
    Tested-by: Daire Byrne

    David Howells
     
  • Register NFS for caching and retrieve the top-level cache index object cookie.

    Signed-off-by: David Howells
    Acked-by: Steve Dickson
    Acked-by: Trond Myklebust
    Acked-by: Al Viro
    Tested-by: Daire Byrne

    David Howells
     

20 Mar, 2008

1 commit

  • Since O_DIRECT is a standard feature that is enabled in most distros,
    eliminate the CONFIG_NFS_DIRECTIO build option, and change the
    fs/nfs/Makefile to always build in the NFS direct I/O engine.

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     

10 Oct, 2007

1 commit


11 Jul, 2007

1 commit

  • In preparation for supporting NFSv2 and NFSv3 mount option handling in the
    kernel NFS client, convert mount_clnt.c to be a permanent part of the NFS
    client, instead of built only when CONFIG_ROOT_NFS is enabled.

    In addition, we also replace the "struct sockaddr_in *" argument with
    something more generic, to help support IPv6 at some later point.

    Signed-off-by: Chuck Lever
    Signed-off-by: Trond Myklebust

    Chuck Lever
     

23 Sep, 2006

2 commits

  • The attached patch makes NFS share superblocks between mounts from the same
    server and FSID over the same protocol.

    It does this by creating each superblock with a false root and returning the
    real root dentry in the vfsmount presented by get_sb(). The root dentry set
    starts off as an anonymous dentry if we don't already have the dentry for its
    inode, otherwise it simply returns the dentry we already have.

    We may thus end up with several trees of dentries in the superblock, and if at
    some later point one of anonymous tree roots is discovered by normal filesystem
    activity to be located in another tree within the superblock, the anonymous
    root is named and materialises attached to the second tree at the appropriate
    point.

    Why do it this way? Why not pass an extra argument to the mount() syscall to
    indicate the subpath and then pathwalk from the server root to the desired
    directory? You can't guarantee this will work for two reasons:

    (1) The root and intervening nodes may not be accessible to the client.

    With NFS2 and NFS3, for instance, mountd is called on the server to get
    the filehandle for the tip of a path. mountd won't give us handles for
    anything we don't have permission to access, and so we can't set up NFS
    inodes for such nodes, and so can't easily set up dentries (we'd have to
    have ghost inodes or something).

    With this patch we don't actually create dentries until we get handles
    from the server that we can use to set up their inodes, and we don't
    actually bind them into the tree until we know for sure where they go.

    (2) Inaccessible symbolic links.

    If we're asked to mount two exports from the server, eg:

    mount warthog:/warthog/aaa/xxx /mmm
    mount warthog:/warthog/bbb/yyy /nnn

    We may not be able to access anything nearer the root than xxx and yyy,
    but we may find out later that /mmm/www/yyy, say, is actually the same
    directory as the one mounted on /nnn. What we might then find out, for
    example, is that /warthog/bbb was actually a symbolic link to
    /warthog/aaa/xxx/www, but we can't actually determine that by talking to
    the server until /warthog is made available by NFS.

    This would lead to having constructed an errneous dentry tree which we
    can't easily fix. We can end up with a dentry marked as a directory when
    it should actually be a symlink, or we could end up with an apparently
    hardlinked directory.

    With this patch we need not make assumptions about the type of a dentry
    for which we can't retrieve information, nor need we assume we know its
    place in the grand scheme of things until we actually see that place.

    This patch reduces the possibility of aliasing in the inode and page caches for
    inodes that may be accessed by more than one NFS export. It also reduces the
    number of superblocks required for NFS where there are many NFS exports being
    used from a server (home directory server + autofs for example).

    This in turn makes it simpler to do local caching of network filesystems, as it
    can then be guaranteed that there won't be links from multiple inodes in
    separate superblocks to the same cache file.

    Obviously, cache aliasing between different levels of NFS protocol could still
    be a problem, but at least that gives us another key to use when indexing the
    cache.

    This patch makes the following changes:

    (1) The server record construction/destruction has been abstracted out into
    its own set of functions to make things easier to get right. These have
    been moved into fs/nfs/client.c.

    All the code in fs/nfs/client.c has to do with the management of
    connections to servers, and doesn't touch superblocks in any way; the
    remaining code in fs/nfs/super.c has to do with VFS superblock management.

    (2) The sequence of events undertaken by NFS mount is now reordered:

    (a) A volume representation (struct nfs_server) is allocated.

    (b) A server representation (struct nfs_client) is acquired. This may be
    allocated or shared, and is keyed on server address, port and NFS
    version.

    (c) If allocated, the client representation is initialised. The state
    member variable of nfs_client is used to prevent a race during
    initialisation from two mounts.

    (d) For NFS4 a simple pathwalk is performed, walking from FH to FH to find
    the root filehandle for the mount (fs/nfs/getroot.c). For NFS2/3 we
    are given the root FH in advance.

    (e) The volume FSID is probed for on the root FH.

    (f) The volume representation is initialised from the FSINFO record
    retrieved on the root FH.

    (g) sget() is called to acquire a superblock. This may be allocated or
    shared, keyed on client pointer and FSID.

    (h) If allocated, the superblock is initialised.

    (i) If the superblock is shared, then the new nfs_server record is
    discarded.

    (j) The root dentry for this mount is looked up from the root FH.

    (k) The root dentry for this mount is assigned to the vfsmount.

    (3) nfs_readdir_lookup() creates dentries for each of the entries readdir()
    returns; this function now attaches disconnected trees from alternate
    roots that happen to be discovered attached to a directory being read (in
    the same way nfs_lookup() is made to do for lookup ops).

    The new d_materialise_unique() function is now used to do this, thus
    permitting the whole thing to be done under one set of locks, and thus
    avoiding any race between mount and lookup operations on the same
    directory.

    (4) The client management code uses a new debug facility: NFSDBG_CLIENT which
    is set by echoing 1024 to /proc/net/sunrpc/nfs_debug.

    (5) Clone mounts are now called xdev mounts.

    (6) Use the dentry passed to the statfs() op as the handle for retrieving fs
    statistics rather than the root dentry of the superblock (which is now a
    dummy).

    Signed-Off-By: David Howells
    Signed-off-by: Trond Myklebust

    David Howells
     
  • Generalise the nfs_client structure by:

    (1) Moving nfs_client to a more general place (nfs_fs_sb.h).

    (2) Renaming its maintenance routines to be non-NFS4 specific.

    (3) Move those maintenance routines to a new non-NFS4 specific file (client.c)
    and move the declarations to internal.h.

    (4) Make nfs_find/get_client() take a full sockaddr_in to include the port
    number (will be required for NFS2/3).

    (5) Make nfs_find/get_client() take the NFS protocol version (again will be
    required to differentiate NFS2, 3 & 4 client records).

    Also:

    (6) Make nfs_client construction proceed akin to inodes, marking them as under
    construction and providing a function to indicate completion.

    (7) Make nfs_get_client() wait interruptibly if it finds a client that it can
    share, but that client is currently being constructed.

    (8) Make nfs4_create_client() use (6) and (7) instead of locking cl_sem.

    Signed-Off-By: David Howells
    Signed-off-by: Trond Myklebust

    David Howells
     

09 Jun, 2006

2 commits

  • As fs/nfs/inode.c is rather large, heterogenous and unwieldy, the attached
    patch splits it up into a number of files:

    (*) fs/nfs/inode.c

    Strictly inode specific functions.

    (*) fs/nfs/super.c

    Superblock management functions for NFS and NFS4, normal access, clones
    and referrals. The NFS4 superblock functions _could_ move out into a
    separate conditionally compiled file, but it's probably not worth it as
    there're so many common bits.

    (*) fs/nfs/namespace.c

    Some namespace-specific functions have been moved here.

    (*) fs/nfs/nfs4namespace.c

    NFS4-specific namespace functions (this could be merged into the previous
    file). This file is conditionally compiled.

    (*) fs/nfs/internal.h

    Inter-file declarations, plus a few simple utility functions moved from
    fs/nfs/inode.c.

    Additionally, all the in-.c-file externs have been moved here, and those
    files they were moved from now includes this file.

    For the most part, the functions have not been changed, only some multiplexor
    functions have changed significantly.

    I've also:

    (*) Added some extra banner comments above some functions.

    (*) Rearranged the function order within the files to be more logical and
    better grouped (IMO), though someone may prefer a different order.

    (*) Reduced the number of #ifdefs in .c files.

    (*) Added missing __init and __exit directives.

    Signed-Off-By: David Howells

    David Howells
     
  • Signed-off-by: Trond Myklebust

    Trond Myklebust
     

07 Jan, 2006

1 commit


23 Jun, 2005

1 commit

  • This adds acl support fo nfs clients via the NFSACL protocol extension, by
    implementing the getxattr, listxattr, setxattr, and removexattr iops for the
    system.posix_acl_access and system.posix_acl_default attributes. This patch
    implements a dumb version that uses no caching (and thus adds some overhead).
    (Another patch in this patchset adds caching as well.)

    Signed-off-by: Andreas Gruenbacher
    Acked-by: Olaf Kirch
    Signed-off-by: Andrew Morton
    Signed-off-by: Trond Myklebust

    Andreas Gruenbacher
     

17 Apr, 2005

1 commit

  • Initial git repository build. I'm not bothering with the full history,
    even though we have it. We can create a separate "historical" git
    archive of that later if we want to, and in the meantime it's about
    3.2GB when imported into git - space that would just make the early
    git days unnecessarily complicated, when we don't have a lot of good
    infrastructure for it.

    Let it rip!

    Linus Torvalds