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
23 Jun, 2014
2 commits
-
Don't using cache_get besides export.h, using exp_get for export.
Signed-off-by: Kinglong Mee
Signed-off-by: J. Bruce Fields -
Signed-off-by: Kinglong Mee
Signed-off-by: J. Bruce Fields
31 May, 2014
8 commits
-
Signed-off-by: Kinglong Mee
Signed-off-by: J. Bruce Fields -
ex_nflavors can't be negative number, just defined by uint32_t.
Signed-off-by: Kinglong Mee
Signed-off-by: J. Bruce Fields -
Signed-off-by: Kinglong Mee
Signed-off-by: J. Bruce Fields -
No need for a typedef wrapper for svc_export or svc_client, remove them.
Signed-off-by: Kinglong Mee
Signed-off-by: J. Bruce Fields -
Commit 49b28684fdba ("nfsd: Remove deprecated nfsctl system call and
related code") removed the only use of ipv6_addr_set_v4mapped(), so
net/ipv6.h is unneeded now.Signed-off-by: Kinglong Mee
Signed-off-by: J. Bruce Fields -
Signed-off-by: Kinglong Mee
Signed-off-by: J. Bruce Fields -
Signed-off-by: Kinglong Mee
Signed-off-by: J. Bruce Fields -
If fsloc_parse() failed at kzalloc(), fs/nfsd/export.c
411
412 fsloc->locations = kzalloc(fsloc->locations_count
413 * sizeof(struct nfsd4_fs_location), GFP_KERNEL);
414 if (!fsloc->locations)
415 return -ENOMEM;svc_export_parse() will call nfsd4_fslocs_free() with fsloc->locations = NULL,
so that, "kfree(fsloc->locations[i].path);" will cause a crash.If fsloc_parse() failed after that, fsloc_parse() will call nfsd4_fslocs_free(),
and svc_export_parse() will call it again, so that, a double free is caused.This patch checks the fsloc->locations, and set to NULL after it be freed.
Signed-off-by: Kinglong Mee
Signed-off-by: J. Bruce Fields
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 -
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
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
...
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 -
This callback will allow to simplify upcalls in further patches in this
series.Signed-off-by: Stanislav Kinsbursky
Signed-off-by: J. Bruce Fields
13 Feb, 2013
1 commit
-
Cc: "J. Bruce Fields"
Cc: Trond Myklebust
Signed-off-by: "Eric W. Biederman"
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
RSPI 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
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
28 Jul, 2012
1 commit
-
This is a cleanup patch - makes code looks simplier.
It replaces widely used rqstp->rq_xprt->xpt_net by introduced SVC_NET(rqstp).Signed-off-by: Stanislav Kinsbursky
Signed-off-by: J. Bruce Fields
25 Jul, 2012
1 commit
-
I don't think there's a practical difference for the range of values
these interfaces should see, but it would be safer to be unambiguous.Signed-off-by: J. Bruce Fields
01 Jun, 2012
2 commits
-
Move the rq_flavor into struct svc_cred, and use it in setclientid and
exchange_id comparisons as well.Signed-off-by: J. Bruce Fields
-
Signed-off-by: J. Bruce Fields
12 Apr, 2012
10 commits
-
This patch also changes svcauth_unix_purge() function: added network namespace
as a parameter and thus loop over all networks was replaced by only one call
for ip map cache purge.Signed-off-by: Stanislav Kinsbursky
Signed-off-by: J. Bruce Fields -
This patch also changes prototypes of nfsd_export_flush() and exp_rootfh():
network namespace parameter added.Signed-off-by: Stanislav Kinsbursky
Signed-off-by: J. Bruce Fields -
This cache will be per-net soon. And it's easier to get the pointer to desired
per-net instance only once and then pass it down instead of discovering it in
every place were required.Signed-off-by: Stanislav Kinsbursky
Signed-off-by: J. Bruce Fields -
These functions will be called from per-net operations.
Signed-off-by: Stanislav Kinsbursky
Signed-off-by: J. Bruce Fields -
This cache will be per-net soon. And it's easier to get the pointer to desired
per-net instance only once and then pass it down instead of discovering it in
every place were required.Signed-off-by: Stanislav Kinsbursky
Signed-off-by: J. Bruce Fields -
Hard-code is redundant and will prevent from making caches per net ns.
Signed-off-by: Stanislav Kinsbursky
Signed-off-by: J. Bruce Fields -
Global svc_export_cache cache is going to be replaced with per-net instance. So
prepare the ground for it.Signed-off-by: Stanislav Kinsbursky
Signed-off-by: J. Bruce Fields -
This patch replaces cache_put() call for svc_export_cache by exp_put() call.
Signed-off-by: Stanislav Kinsbursky
Signed-off-by: J. Bruce Fields -
Without info about owner cache datail it won't be able to find out, which
per-net cache detail have to be.Signed-off-by: Stanislav Kinsbursky
Signed-off-by: J. Bruce Fields -
Using of hard-coded svc_expkey_cache pointer in expkey_parse() looks redundant.
Moreover, global cache will be replaced with per-net instance soon.Signed-off-by: Stanislav Kinsbursky
Signed-off-by: J. Bruce Fields
04 Feb, 2012
1 commit
-
We check for zero length strings in the caller now, so these aren't
needed.Signed-off-by: Dan Carpenter
Signed-off-by: J. Bruce Fields
08 Dec, 2011
1 commit
-
v2: cache_register_net() and cache_unregister_net() GPL exports added
This is a cleanup patch. Hope, some day generic cache_register() and
cache_unregister() will be removed.Signed-off-by: Stanislav Kinsbursky
Signed-off-by: J. Bruce Fields
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
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 -
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
31 Aug, 2011
1 commit
-
We don't need this any more.
Signed-off-by: J. Bruce Fields
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