19 Aug, 2014

1 commit

  • One of our customer's application only needs file names, not file
    attributes. With directories having 10K+ inodes (assuming buffer cache
    has directory blocks cached having file names, but inode cache is
    limited and hence need eviction of older cached inodes), older inodes
    are evicted periodically. So if they keep on doing readdir(2) from NSF
    client on multiple directories, some directory's files are periodically
    removed from inode cache and hence new readdir(2) on same directory
    requires disk access to bring back inodes again to inode cache.

    As READDIRPLUS request fetches attributes also, doing getattr on each
    file on server, it causes unnecessary disk accesses. If READDIRPLUS on
    NFS client is returned with -ENOTSUPP, NFS client uses READDIR request
    which just gets the names of the files in a directory, not attributes,
    hence avoiding disk accesses on server.

    There's already a corresponding client-side mount option, but an export
    option reduces the need for configuration across multiple clients.

    This flag affects NFSv3 only. If it turns out it's needed for NFSv4 as
    well then we may have to figure out how to extend the behavior to NFSv4,
    but it's not currently obvious how to do that.

    Signed-off-by: Rajesh Ghanekar
    Signed-off-by: J. Bruce Fields

    Rajesh Ghanekar
     

23 Jun, 2014

2 commits


31 May, 2014

8 commits


30 Oct, 2013

2 commits

  • If we're going to refuse to accept these it would be polite of us to at
    least say so....

    This introduces a slight complication since we need to grandfather in
    exportfs's ill-advised use of -1 uid and gid on its test_export.

    If it turns out there are other users passing down -1 we may need to
    do something else.

    Best might be to drop the checks entirely, but I'm not sure if other
    parts of the kernel might assume that a task can't run as uid or gid -1.

    Cc: "Eric W. Biederman"
    Signed-off-by: J. Bruce Fields

    J. Bruce Fields
     
  • Someone noticed exportfs happily accepted exports that would later be
    rejected when mountd tried to give them to the kernel. Fix this.

    This is a regression from 4c1e1b34d5c800ad3ac9a7e2805b0bea70ad2278
    "nfsd: Store ex_anon_uid and ex_anon_gid as kuids and kgids".

    Cc: "Eric W. Biederman"
    Cc: stable@vger.kernel.org
    Reported-by: Yin.JianHong
    Signed-off-by: J. Bruce Fields

    J. Bruce Fields
     

01 Mar, 2013

1 commit

  • Pull nfsd changes from J Bruce Fields:
    "Miscellaneous bugfixes, plus:

    - An overhaul of the DRC cache by Jeff Layton. The main effect is
    just to make it larger. This decreases the chances of intermittent
    errors especially in the UDP case. But we'll need to watch for any
    reports of performance regressions.

    - Containerized nfsd: with some limitations, we now support
    per-container nfs-service, thanks to extensive work from Stanislav
    Kinsbursky over the last year."

    Some notes about conflicts, since there were *two* non-data semantic
    conflicts here:

    - idr_remove_all() had been added by a memory leak fix, but has since
    become deprecated since idr_destroy() does it for us now.

    - xs_local_connect() had been added by this branch to make AF_LOCAL
    connections be synchronous, but in the meantime Trond had changed the
    calling convention in order to avoid a RCU dereference.

    There were a couple of more obvious actual source-level conflicts due to
    the hlist traversal changes and one just due to code changes next to
    each other, but those were trivial.

    * 'for-3.9' of git://linux-nfs.org/~bfields/linux: (49 commits)
    SUNRPC: make AF_LOCAL connect synchronous
    nfsd: fix compiler warning about ambiguous types in nfsd_cache_csum
    svcrpc: fix rpc server shutdown races
    svcrpc: make svc_age_temp_xprts enqueue under sv_lock
    lockd: nlmclnt_reclaim(): avoid stack overflow
    nfsd: enable NFSv4 state in containers
    nfsd: disable usermode helper client tracker in container
    nfsd: use proper net while reading "exports" file
    nfsd: containerize NFSd filesystem
    nfsd: fix comments on nfsd_cache_lookup
    SUNRPC: move cache_detail->cache_request callback call to cache_read()
    SUNRPC: remove "cache_request" argument in sunrpc_cache_pipe_upcall() function
    SUNRPC: rework cache upcall logic
    SUNRPC: introduce cache_detail->cache_request callback
    NFS: simplify and clean cache library
    NFS: use SUNRPC cache creation and destruction helper for DNS cache
    nfsd4: free_stid can be static
    nfsd: keep a checksum of the first 256 bytes of request
    sunrpc: trim off trailing checksum before returning decrypted or integrity authenticated buffer
    sunrpc: fix comment in struct xdr_buf definition
    ...

    Linus Torvalds
     

15 Feb, 2013

2 commits

  • For most of SUNRPC caches (except NFS DNS cache) cache_detail->cache_upcall is
    redundant since all that it's implementations are doing is calling
    sunrpc_cache_pipe_upcall() with proper function address argument.
    Cache request function address is now stored on cache_detail structure and
    thus all the code can be simplified.
    Now, for those cache details, which doesn't have cache_upcall callback (the
    only one, which still has is nfs_dns_resolve_template)
    sunrpc_cache_pipe_upcall will be called instead.

    Signed-off-by: Stanislav Kinsbursky
    Signed-off-by: J. Bruce Fields

    Stanislav Kinsbursky
     
  • This callback will allow to simplify upcalls in further patches in this
    series.

    Signed-off-by: Stanislav Kinsbursky
    Signed-off-by: J. Bruce Fields

    Stanislav Kinsbursky
     

13 Feb, 2013

1 commit


04 Feb, 2013

1 commit

  • commit 885c91f7466 in Bruce's tree was causing oopses for me:

    general protection fault: 0000 [#1] SMP
    Modules linked in: nfsd(OF) nfs_acl(OF) auth_rpcgss(OF) lockd(OF) sunrpc(OF) kvm_amd kvm microcode i2c_piix4 virtio_net virtio_balloon cirrus drm_kms_helper ttm drm virtio_blk i2c_core
    CPU 0
    Pid: 564, comm: exportfs Tainted: GF O 3.8.0-0.rc5.git2.1.fc19.x86_64 #1 Bochs Bochs
    RIP: 0010:[] [] kfree+0x49/0x280
    RSP: 0018:ffff88007a3d7c50 EFLAGS: 00010203
    RAX: 01adaf8dadadad80 RBX: 6b6b6b6b6b6b6b6b RCX: 0000000000000001
    RDX: ffffffff7fffffff RSI: 0000000000000000 RDI: 6b6b6b6b6b6b6b6b
    RBP: ffff88007a3d7c80 R08: 6b6b6b6b6b6b6b6b R09: 0000000000000000
    R10: 0000000000000018 R11: 0000000000000000 R12: ffff88006a117b50
    R13: ffffffffa01a589c R14: ffff8800631b0f50 R15: 01ad998dadadad80
    FS: 00007fcaa3616740(0000) GS:ffff88007fc00000(0000) knlGS:0000000000000000
    CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b
    CR2: 00007f5d84b6fdd8 CR3: 0000000064db4000 CR4: 00000000000006f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
    Process exportfs (pid: 564, threadinfo ffff88007a3d6000, task ffff88006af28000)
    Stack:
    ffff88007a3d7c80 ffff88006a117b68 ffff88006a117b50 0000000000000000
    ffff8800631b0f50 ffff88006a117b50 ffff88007a3d7ca0 ffffffffa01a589c
    ffff880036be1148 ffff88007a3d7cf8 ffff88007a3d7e28 ffffffffa01a6a98
    Call Trace:
    [] svc_export_put+0x5c/0x70 [nfsd]
    [] svc_export_parse+0x328/0x7e0 [nfsd]
    [] cache_do_downcall+0x57/0x70 [sunrpc]
    [] cache_downcall+0x7e/0x100 [sunrpc]
    [] cache_write_procfs+0x58/0x90 [sunrpc]
    [] ? cache_downcall+0x100/0x100 [sunrpc]
    [] proc_reg_write+0x75/0xb0
    [] vfs_write+0x9f/0x170
    [] sys_write+0x49/0xa0
    [] system_call_fastpath+0x16/0x1b
    Code: 66 66 66 90 48 83 fb 10 0f 86 c3 00 00 00 48 89 df 49 bf 00 00 00 00 00 ea ff ff e8 f2 12 ea ff 48 c1 e8 0c 48 c1 e0 06 49 01 c7 8b 07 f6 c4 80 0f 85 1d 02 00 00 49 8b 07 a8 80 0f 84 ee 01
    RIP [] kfree+0x49/0x280
    RSP

    I think Majianpeng's patch is correct, but incomplete. In order for it
    to be safe to free the ex_uuid unconditionally in svc_export_put, we
    need to make sure it's initialized to NULL in the init routine.

    Cc: majianpeng
    Signed-off-by: Jeff Layton
    Signed-off-by: J. Bruce Fields

    Jeff Layton
     

30 Jan, 2013

1 commit

  • In func svc_export_parse, the uuid which used kmemdup to alloc will be
    changed in func export_update.So the later kfree don't free this memory.
    And it can't be free in func svc_export_parse because other place still
    used.So put this operation in func svc_export_put.

    Signed-off-by: Jianpeng Ma
    Signed-off-by: J. Bruce Fields

    majianpeng
     

28 Jul, 2012

1 commit


25 Jul, 2012

1 commit


01 Jun, 2012

2 commits


12 Apr, 2012

10 commits


04 Feb, 2012

1 commit


08 Dec, 2011

1 commit


07 Dec, 2011

1 commit

  • expkey_parse() oopses when handling a 0 length export. This is easily
    triggerable from usermode by writing 0 bytes into
    '/proc/[proc id]/net/rpc/nfsd.fh/channel'.

    Below is the log:

    [ 1402.286893] BUG: unable to handle kernel paging request at ffff880077c49fff
    [ 1402.287632] IP: [] expkey_parse+0x28/0x2e1
    [ 1402.287632] PGD 2206063 PUD 1fdfd067 PMD 1ffbc067 PTE 8000000077c49160
    [ 1402.287632] Oops: 0000 [#1] PREEMPT SMP DEBUG_PAGEALLOC
    [ 1402.287632] CPU 1
    [ 1402.287632] Pid: 20198, comm: trinity Not tainted 3.2.0-rc2-sasha-00058-gc65cd37 #6
    [ 1402.287632] RIP: 0010:[] [] expkey_parse+0x28/0x2e1
    [ 1402.287632] RSP: 0018:ffff880077f0fd68 EFLAGS: 00010292
    [ 1402.287632] RAX: ffff880077c49fff RBX: 00000000ffffffea RCX: 0000000001043400
    [ 1402.287632] RDX: 0000000000000000 RSI: ffff880077c4a000 RDI: ffffffff82283de0
    [ 1402.287632] RBP: ffff880077f0fe18 R08: 0000000000000001 R09: ffff880000000000
    [ 1402.287632] R10: 0000000000000000 R11: 0000000000000001 R12: ffff880077c4a000
    [ 1402.287632] R13: ffffffff82283de0 R14: 0000000001043400 R15: ffffffff82283de0
    [ 1402.287632] FS: 00007f25fec3f700(0000) GS:ffff88007d400000(0000) knlGS:0000000000000000
    [ 1402.287632] CS: 0010 DS: 0000 ES: 0000 CR0: 000000008005003b
    [ 1402.287632] CR2: ffff880077c49fff CR3: 0000000077e1d000 CR4: 00000000000406e0
    [ 1402.287632] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    [ 1402.287632] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
    [ 1402.287632] Process trinity (pid: 20198, threadinfo ffff880077f0e000, task ffff880077db17b0)
    [ 1402.287632] Stack:
    [ 1402.287632] ffff880077db17b0 ffff880077c4a000 ffff880077f0fdb8 ffffffff810b411e
    [ 1402.287632] ffff880000000000 ffff880077db17b0 ffff880077c4a000 ffffffff82283de0
    [ 1402.287632] 0000000001043400 ffffffff82283de0 ffff880077f0fde8 ffffffff81111f63
    [ 1402.287632] Call Trace:
    [ 1402.287632] [] ? lock_release+0x1af/0x1bc
    [ 1402.287632] [] ? might_fault+0x97/0x9e
    [ 1402.287632] [] ? might_fault+0x4e/0x9e
    [ 1402.287632] [] cache_do_downcall+0x3e/0x4f
    [ 1402.287632] [] cache_write.clone.16+0xbb/0x130
    [ 1402.287632] [] ? cache_write_pipefs+0x1a/0x1a
    [ 1402.287632] [] cache_write_procfs+0x19/0x1b
    [ 1402.287632] [] proc_reg_write+0x8e/0xad
    [ 1402.287632] [] vfs_write+0xaa/0xfd
    [ 1402.287632] [] ? fget_light+0x35/0x9e
    [ 1402.287632] [] sys_write+0x48/0x6f
    [ 1402.287632] [] system_call_fastpath+0x16/0x1b
    [ 1402.287632] Code: c0 c9 c3 55 48 63 d2 48 89 e5 48 8d 44 32 ff 41 57 41 56 41 55 41 54 53 bb ea ff ff ff 48 81 ec 88 00 00 00 48 89 b5 58 ff ff ff
    [ 1402.287632] 38 0a 0f 85 89 02 00 00 c6 00 00 48 8b 3d 44 4a e5 01 48 85
    [ 1402.287632] RIP [] expkey_parse+0x28/0x2e1
    [ 1402.287632] RSP
    [ 1402.287632] CR2: ffff880077c49fff
    [ 1402.287632] ---[ end trace 368ef53ff773a5e3 ]---

    Cc: "J. Bruce Fields"
    Cc: Neil Brown
    Cc: linux-nfs@vger.kernel.org
    Cc: stable@kernel.org
    Signed-off-by: Sasha Levin
    Signed-off-by: J. Bruce Fields

    Sasha Levin
     

14 Sep, 2011

2 commits

  • There are no more users...

    Signed-off-by: Trond Myklebust
    Reviewed-by: Jeff Layton
    Signed-off-by: J. Bruce Fields

    Trond Myklebust
     
  • The current code is sort of hackish in that it assumes a referral is always
    matched to an export. When we add support for junctions that may not be the
    case.
    We can replace nfsd4_path() with a function that encodes the components
    directly from the dentries. Since nfsd4_path is currently the only user of
    the 'ex_pathname' field in struct svc_export, this has the added benefit
    of allowing us to get rid of that.

    Signed-off-by: Trond Myklebust
    Reviewed-by: Jeff Layton
    Signed-off-by: J. Bruce Fields

    Trond Myklebust
     

31 Aug, 2011

1 commit


16 Jul, 2011

1 commit

  • As promised in feature-removal-schedule.txt it is time to
    remove the nfsctl system call.

    Userspace has perferred to not use this call throughout 2.6 and it has been
    excluded in the default configuration since 2.6.36 (9 months ago).

    So this patch removes all the code that was being compiled out.

    There are still references to sys_nfsctl in various arch systemcall tables
    and related code. These should be cleaned out too, probably in the next
    merge window.

    Signed-off-by: NeilBrown
    Signed-off-by: J. Bruce Fields

    NeilBrown