From: kbuild test robot <lkp@intel.com>
To: Trond Myklebust <trondmy@gmail.com>
Cc: kbuild-all@01.org, linux-nfs@vger.kernel.org
Subject: Re: [PATCH 2/2] pNFS: Don't send layoutreturn if the layout is already invalid
Date: Sat, 16 Jun 2018 09:37:36 +0800 [thread overview]
Message-ID: <201806160759.qx1LKT6f%fengguang.wu@intel.com> (raw)
In-Reply-To: <20180615224234.62723-2-trond.myklebust@hammerspace.com>
[-- Attachment #1: Type: text/plain, Size: 11210 bytes --]
Hi Trond,
I love your patch! Yet something to improve:
[auto build test ERROR on nfs/linux-next]
[also build test ERROR on v4.17 next-20180615]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Trond-Myklebust/pNFS-Always-free-the-session-slot-on-error-in-nfs4_layoutget_handle_exception/20180616-064706
base: git://git.linux-nfs.org/projects/trondmy/linux-nfs.git linux-next
config: x86_64-randconfig-x011-201823 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-16) 7.3.0
reproduce:
# save the attached .config to linux build tree
make ARCH=x86_64
All errors (new ones prefixed by >>):
fs/nfs/nfs4proc.c: In function 'nfs4_close_prepare':
>> fs/nfs/nfs4proc.c:3342:13: error: implicit declaration of function 'pnfs_layout_is_valid'; did you mean 'pnfs_layoutcommit_inode'? [-Werror=implicit-function-declaration]
if (lo && !pnfs_layout_is_valid(lo)) {
^~~~~~~~~~~~~~~~~~~~
pnfs_layoutcommit_inode
Cyclomatic Complexity 5 include/linux/compiler.h:__read_once_size
Cyclomatic Complexity 5 include/linux/compiler.h:__write_once_size
Cyclomatic Complexity 1 include/linux/kasan-checks.h:kasan_check_read
Cyclomatic Complexity 1 include/linux/kasan-checks.h:kasan_check_write
Cyclomatic Complexity 2 arch/x86/include/asm/bitops.h:set_bit
Cyclomatic Complexity 2 arch/x86/include/asm/bitops.h:clear_bit
Cyclomatic Complexity 1 arch/x86/include/asm/bitops.h:test_and_clear_bit
Cyclomatic Complexity 1 arch/x86/include/asm/bitops.h:constant_test_bit
Cyclomatic Complexity 1 arch/x86/include/asm/bitops.h:variable_test_bit
Cyclomatic Complexity 1 arch/x86/include/asm/bitops.h:fls64
Cyclomatic Complexity 1 include/linux/log2.h:__ilog2_u64
Cyclomatic Complexity 1 arch/x86/include/asm/current.h:get_current
Cyclomatic Complexity 1 include/asm-generic/getorder.h:__get_order
Cyclomatic Complexity 1 arch/x86/include/asm/atomic.h:arch_atomic_read
Cyclomatic Complexity 1 arch/x86/include/asm/atomic.h:arch_atomic_set
Cyclomatic Complexity 1 arch/x86/include/asm/atomic.h:arch_atomic_inc
Cyclomatic Complexity 1 arch/x86/include/asm/atomic.h:arch_atomic_dec_and_test
Cyclomatic Complexity 1 arch/x86/include/asm/atomic64_64.h:arch_atomic64_read
Cyclomatic Complexity 1 arch/x86/include/asm/atomic64_64.h:arch_atomic64_set
Cyclomatic Complexity 1 include/asm-generic/atomic-instrumented.h:atomic_read
Cyclomatic Complexity 1 include/asm-generic/atomic-instrumented.h:atomic64_read
Cyclomatic Complexity 1 include/asm-generic/atomic-instrumented.h:atomic_set
Cyclomatic Complexity 1 include/asm-generic/atomic-instrumented.h:atomic64_set
Cyclomatic Complexity 1 include/asm-generic/atomic-instrumented.h:atomic_inc
Cyclomatic Complexity 1 include/asm-generic/atomic-instrumented.h:atomic_dec_and_test
Cyclomatic Complexity 1 include/linux/jump_label.h:static_key_count
Cyclomatic Complexity 1 include/linux/string.h:strnlen
Cyclomatic Complexity 4 include/linux/string.h:strlen
Cyclomatic Complexity 3 include/linux/string.h:memset
Cyclomatic Complexity 4 include/linux/string.h:memcpy
Cyclomatic Complexity 4 include/linux/string.h:memcmp
Cyclomatic Complexity 1 include/linux/err.h:ERR_PTR
Cyclomatic Complexity 1 include/linux/err.h:PTR_ERR
Cyclomatic Complexity 1 include/linux/err.h:ERR_CAST
Cyclomatic Complexity 5 arch/x86/include/asm/preempt.h:__preempt_count_add
Cyclomatic Complexity 5 arch/x86/include/asm/preempt.h:__preempt_count_sub
Cyclomatic Complexity 1 include/linux/spinlock.h:spin_lock
Cyclomatic Complexity 1 include/linux/spinlock.h:spin_unlock
Cyclomatic Complexity 1 include/linux/seqlock.h:raw_seqcount_begin
Cyclomatic Complexity 1 include/linux/seqlock.h:raw_write_seqcount_begin
Cyclomatic Complexity 1 include/linux/seqlock.h:raw_write_seqcount_end
Cyclomatic Complexity 1 include/linux/nodemask.h:node_state
Cyclomatic Complexity 1 include/linux/rcupdate.h:__rcu_read_lock
Cyclomatic Complexity 1 include/linux/rcupdate.h:__rcu_read_unlock
Cyclomatic Complexity 1 include/linux/rcutiny.h:rcu_is_watching
Cyclomatic Complexity 1 arch/x86/include/asm/topology.h:numa_node_id
Cyclomatic Complexity 1 include/linux/topology.h:numa_mem_id
Cyclomatic Complexity 1 include/linux/page_ref.h:page_ref_count
Cyclomatic Complexity 1 include/linux/page_ref.h:page_ref_dec_and_test
Cyclomatic Complexity 1 include/linux/dcache.h:d_really_is_negative
Cyclomatic Complexity 1 include/linux/dcache.h:d_really_is_positive
Cyclomatic Complexity 1 include/linux/dcache.h:d_inode
Cyclomatic Complexity 1 include/linux/fs.h:i_size_read
Cyclomatic Complexity 1 include/linux/mm.h:page_zonenum
Cyclomatic Complexity 1 include/linux/mm.h:is_zone_device_page
Cyclomatic Complexity 3 include/linux/memremap.h:is_device_private_page
Cyclomatic Complexity 3 include/linux/memremap.h:is_device_public_page
Cyclomatic Complexity 1 include/linux/mm.h:lowmem_page_address
Cyclomatic Complexity 1 include/linux/refcount.h:refcount_set
Cyclomatic Complexity 1 include/linux/refcount.h:refcount_read
Cyclomatic Complexity 1 include/linux/sched.h:task_thread_info
Cyclomatic Complexity 1 include/linux/slab.h:kmalloc_order_trace
Cyclomatic Complexity 68 include/linux/slab.h:kmalloc_large
Cyclomatic Complexity 3 include/linux/slab.h:kmalloc
Cyclomatic Complexity 1 include/linux/slab.h:kzalloc
Cyclomatic Complexity 1 include/linux/uaccess.h:pagefault_disabled_inc
Cyclomatic Complexity 1 include/linux/uaccess.h:pagefault_disabled_dec
Cyclomatic Complexity 1 include/linux/uaccess.h:pagefault_disable
Cyclomatic Complexity 1 include/linux/uaccess.h:pagefault_enable
Cyclomatic Complexity 1 include/linux/kref.h:kref_init
Cyclomatic Complexity 1 include/linux/signal.h:sigismember
Cyclomatic Complexity 1 include/linux/unaligned/access_ok.h:put_unaligned_be64
Cyclomatic Complexity 1 include/linux/sunrpc/xdr.h:xdr_encode_hyper
Cyclomatic Complexity 2 include/linux/sunrpc/auth.h:get_rpccred
Cyclomatic Complexity 1 include/linux/nfs.h:nfs_copy_fh
Cyclomatic Complexity 2 include/linux/nfs4.h:seqid_mutating_err
Cyclomatic Complexity 1 include/linux/highmem.h:kmap_atomic
Cyclomatic Complexity 1 include/linux/highmem.h:__kunmap_atomic
Cyclomatic Complexity 3 include/linux/nfs_xdr.h:nfs_fsid_equal
Cyclomatic Complexity 1 include/linux/nfs_fs.h:NFS_SB
Cyclomatic Complexity 1 include/linux/nfs_fs.h:NFS_SERVER
Cyclomatic Complexity 1 include/linux/nfs_fs.h:NFS_CLIENT
Cyclomatic Complexity 1 include/linux/nfs_fs.h:nfs_set_verifier
Cyclomatic Complexity 1 include/linux/nfs_fs.h:nfs_display_fhandle
Cyclomatic Complexity 1 include/linux/nfs_fs.h:nfs_file_open_context
Cyclomatic Complexity 1 include/linux/iversion.h:inode_set_iversion_raw
Cyclomatic Complexity 1 include/linux/iversion.h:inode_peek_iversion_raw
Cyclomatic Complexity 2 fs/nfs/nfs4_fs.h:nfs_confirm_seqid
Cyclomatic Complexity 1 fs/nfs/nfs4_fs.h:nfs4_state_protect
Cyclomatic Complexity 1 fs/nfs/nfs4_fs.h:nfs4_state_protect_write
Cyclomatic Complexity 1 fs/nfs/nfs4_fs.h:nfs4_schedule_session_recovery
Cyclomatic Complexity 1 fs/nfs/nfs4_fs.h:nfs4_stateid_copy
Cyclomatic Complexity 2 fs/nfs/nfs4_fs.h:nfs4_stateid_match
Cyclomatic Complexity 1 fs/nfs/nfs4_fs.h:nfs4_stateid_match_other
Cyclomatic Complexity 1 fs/nfs/nfs4_fs.h:nfs4_valid_open_stateid
Cyclomatic Complexity 3 fs/nfs/nfs4_fs.h:nfs4_state_match_open_stateid_other
Cyclomatic Complexity 1 fs/nfs/internal.h:nfs4_label_alloc
vim +3342 fs/nfs/nfs4proc.c
3291
3292 static void nfs4_close_prepare(struct rpc_task *task, void *data)
3293 {
3294 struct nfs4_closedata *calldata = data;
3295 struct nfs4_state *state = calldata->state;
3296 struct inode *inode = calldata->inode;
3297 struct pnfs_layout_hdr *lo;
3298 bool is_rdonly, is_wronly, is_rdwr;
3299 int call_close = 0;
3300
3301 dprintk("%s: begin!\n", __func__);
3302 if (nfs_wait_on_sequence(calldata->arg.seqid, task) != 0)
3303 goto out_wait;
3304
3305 task->tk_msg.rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_OPEN_DOWNGRADE];
3306 spin_lock(&state->owner->so_lock);
3307 is_rdwr = test_bit(NFS_O_RDWR_STATE, &state->flags);
3308 is_rdonly = test_bit(NFS_O_RDONLY_STATE, &state->flags);
3309 is_wronly = test_bit(NFS_O_WRONLY_STATE, &state->flags);
3310 /* Calculate the change in open mode */
3311 calldata->arg.fmode = 0;
3312 if (state->n_rdwr == 0) {
3313 if (state->n_rdonly == 0)
3314 call_close |= is_rdonly;
3315 else if (is_rdonly)
3316 calldata->arg.fmode |= FMODE_READ;
3317 if (state->n_wronly == 0)
3318 call_close |= is_wronly;
3319 else if (is_wronly)
3320 calldata->arg.fmode |= FMODE_WRITE;
3321 if (calldata->arg.fmode != (FMODE_READ|FMODE_WRITE))
3322 call_close |= is_rdwr;
3323 } else if (is_rdwr)
3324 calldata->arg.fmode |= FMODE_READ|FMODE_WRITE;
3325
3326 if (!nfs4_valid_open_stateid(state) ||
3327 !nfs4_refresh_open_stateid(&calldata->arg.stateid, state))
3328 call_close = 0;
3329 spin_unlock(&state->owner->so_lock);
3330
3331 if (!call_close) {
3332 /* Note: exit _without_ calling nfs4_close_done */
3333 goto out_no_action;
3334 }
3335
3336 if (!calldata->lr.roc && nfs4_wait_on_layoutreturn(inode, task)) {
3337 nfs_release_seqid(calldata->arg.seqid);
3338 goto out_wait;
3339 }
3340
3341 lo = calldata->arg.lr_args ? calldata->arg.lr_args->layout : NULL;
> 3342 if (lo && !pnfs_layout_is_valid(lo)) {
3343 calldata->arg.lr_args = NULL;
3344 calldata->res.lr_res = NULL;
3345 }
3346
3347 if (calldata->arg.fmode == 0)
3348 task->tk_msg.rpc_proc = &nfs4_procedures[NFSPROC4_CLNT_CLOSE];
3349
3350 if (calldata->arg.fmode == 0 || calldata->arg.fmode == FMODE_READ) {
3351 /* Close-to-open cache consistency revalidation */
3352 if (!nfs4_have_delegation(inode, FMODE_READ))
3353 calldata->arg.bitmask = NFS_SERVER(inode)->cache_consistency_bitmask;
3354 else
3355 calldata->arg.bitmask = NULL;
3356 }
3357
3358 calldata->arg.share_access =
3359 nfs4_map_atomic_open_share(NFS_SERVER(inode),
3360 calldata->arg.fmode, 0);
3361
3362 if (calldata->res.fattr == NULL)
3363 calldata->arg.bitmask = NULL;
3364 else if (calldata->arg.bitmask == NULL)
3365 calldata->res.fattr = NULL;
3366 calldata->timestamp = jiffies;
3367 if (nfs4_setup_sequence(NFS_SERVER(inode)->nfs_client,
3368 &calldata->arg.seq_args,
3369 &calldata->res.seq_res,
3370 task) != 0)
3371 nfs_release_seqid(calldata->arg.seqid);
3372 dprintk("%s: done!\n", __func__);
3373 return;
3374 out_no_action:
3375 task->tk_action = NULL;
3376 out_wait:
3377 nfs4_sequence_done(task, &calldata->res.seq_res);
3378 }
3379
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 20396 bytes --]
next prev parent reply other threads:[~2018-06-16 1:38 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-15 22:42 [PATCH 1/2] pNFS: Always free the session slot on error in nfs4_layoutget_handle_exception Trond Myklebust
2018-06-15 22:42 ` [PATCH 2/2] pNFS: Don't send layoutreturn if the layout is already invalid Trond Myklebust
2018-06-16 1:37 ` kbuild test robot [this message]
2018-06-16 1:37 ` kbuild test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=201806160759.qx1LKT6f%fengguang.wu@intel.com \
--to=lkp@intel.com \
--cc=kbuild-all@01.org \
--cc=linux-nfs@vger.kernel.org \
--cc=trondmy@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).