Date: Tue, 4 Aug 2020 19:55:26 +0000 (UTC) From: Mateusz Guzik <mjg@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r363859 - head/sys/kern Message-ID: <202008041955.074JtQkk009998@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: mjg Date: Tue Aug 4 19:55:26 2020 New Revision: 363859 URL: https://svnweb.freebsd.org/changeset/base/363859 Log: cache: factor away failed vexec handling Modified: head/sys/kern/vfs_cache.c Modified: head/sys/kern/vfs_cache.c ============================================================================== --- head/sys/kern/vfs_cache.c Tue Aug 4 19:55:00 2020 (r363858) +++ head/sys/kern/vfs_cache.c Tue Aug 4 19:55:26 2020 (r363859) @@ -3668,6 +3668,33 @@ cache_fplookup_parse_advance(struct cache_fpl *fpl) } } +static int __noinline +cache_fplookup_failed_vexec(struct cache_fpl *fpl, int error) +{ + + switch (error) { + case EAGAIN: + /* + * Can happen when racing against vgone. + * */ + case EOPNOTSUPP: + cache_fpl_partial(fpl); + break; + default: + /* + * See the API contract for VOP_FPLOOKUP_VEXEC. + */ + if (!vn_seqc_consistent(fpl->dvp, fpl->dvp_seqc)) { + error = cache_fpl_aborted(fpl); + } else { + cache_fpl_smr_exit(fpl); + cache_fpl_handled(fpl, error); + } + break; + } + return (error); +} + static int cache_fplookup_impl(struct vnode *dvp, struct cache_fpl *fpl) { @@ -3715,23 +3742,7 @@ cache_fplookup_impl(struct vnode *dvp, struct cache_fp error = VOP_FPLOOKUP_VEXEC(fpl->dvp, cnp->cn_cred, cnp->cn_thread); if (__predict_false(error != 0)) { - switch (error) { - case EAGAIN: - case EOPNOTSUPP: /* can happen when racing against vgone */ - cache_fpl_partial(fpl); - break; - default: - /* - * See the API contract for VOP_FPLOOKUP_VEXEC. - */ - if (!vn_seqc_consistent(fpl->dvp, fpl->dvp_seqc)) { - error = cache_fpl_aborted(fpl); - } else { - cache_fpl_smr_exit(fpl); - cache_fpl_handled(fpl, error); - } - break; - } + error = cache_fplookup_failed_vexec(fpl, error); break; }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202008041955.074JtQkk009998>