dedup the eofs link/symlink methods

This commit is contained in:
christos 2022-03-27 17:10:55 +00:00
parent 4805589d3d
commit 71457ba882
10 changed files with 45 additions and 209 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: advnops.c,v 1.57 2021/07/18 23:57:13 dholland Exp $ */
/* $NetBSD: advnops.c,v 1.58 2022/03/27 17:10:55 christos Exp $ */
/*
* Copyright (c) 1994 Christian E. Hopps
@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: advnops.c,v 1.57 2021/07/18 23:57:13 dholland Exp $");
__KERNEL_RCSID(0, "$NetBSD: advnops.c,v 1.58 2022/03/27 17:10:55 christos Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@ -61,8 +61,6 @@ int adosfs_getattr(void *);
int adosfs_read(void *);
int adosfs_write(void *);
int adosfs_strategy(void *);
int adosfs_link(void *);
int adosfs_symlink(void *);
int adosfs_bmap(void *);
int adosfs_print(void *);
int adosfs_readdir(void *);
@ -97,11 +95,11 @@ const struct vnodeopv_entry_desc adosfs_vnodeop_entries[] = {
{ &vop_fsync_desc, genfs_nullop }, /* fsync */
{ &vop_seek_desc, genfs_seek }, /* seek */
{ &vop_remove_desc, genfs_eopnotsupp }, /* remove */
{ &vop_link_desc, adosfs_link }, /* link */
{ &vop_link_desc, genfs_erofs_link }, /* link */
{ &vop_rename_desc, genfs_eopnotsupp }, /* rename */
{ &vop_mkdir_desc, genfs_eopnotsupp }, /* mkdir */
{ &vop_rmdir_desc, genfs_eopnotsupp }, /* rmdir */
{ &vop_symlink_desc, adosfs_symlink }, /* symlink */
{ &vop_symlink_desc, genfs_erofs_symlink }, /* symlink */
{ &vop_readdir_desc, adosfs_readdir }, /* readdir */
{ &vop_readlink_desc, adosfs_readlink }, /* readlink */
{ &vop_abortop_desc, genfs_abortop }, /* abortop */
@ -387,34 +385,6 @@ reterr:
return(error);
}
int
adosfs_link(void *v)
{
struct vop_link_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
} */ *ap = v;
VOP_ABORTOP(ap->a_dvp, ap->a_cnp);
return (EROFS);
}
int
adosfs_symlink(void *v)
{
struct vop_symlink_v3_args /* {
struct vnode *a_dvp;
struct vnode **a_vpp;
struct componentname *a_cnp;
struct vattr *a_vap;
char *a_target;
} */ *ap = v;
VOP_ABORTOP(ap->a_dvp, ap->a_cnp);
return (EROFS);
}
/*
* Wait until the vnode has finished changing state.
*/

View File

@ -1,4 +1,4 @@
/* $NetBSD: cd9660_node.h,v 1.17 2021/07/18 23:57:13 dholland Exp $ */
/* $NetBSD: cd9660_node.h,v 1.18 2022/03/27 17:10:55 christos Exp $ */
/*-
* Copyright (c) 1994
@ -104,8 +104,6 @@ int cd9660_readdir(void *);
int cd9660_readlink(void *);
int cd9660_inactive(void *);
int cd9660_reclaim(void *);
int cd9660_link(void *);
int cd9660_symlink(void *);
int cd9660_bmap(void *);
int cd9660_lock(void *);
int cd9660_unlock(void *);

View File

@ -1,4 +1,4 @@
/* $NetBSD: cd9660_vnops.c,v 1.61 2021/07/19 01:30:24 dholland Exp $ */
/* $NetBSD: cd9660_vnops.c,v 1.62 2022/03/27 17:10:55 christos Exp $ */
/*-
* Copyright (c) 1994
@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: cd9660_vnops.c,v 1.61 2021/07/19 01:30:24 dholland Exp $");
__KERNEL_RCSID(0, "$NetBSD: cd9660_vnops.c,v 1.62 2022/03/27 17:10:55 christos Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@ -662,34 +662,6 @@ cd9660_readlink(void *v)
return (0);
}
int
cd9660_link(void *v)
{
struct vop_link_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
} */ *ap = v;
VOP_ABORTOP(ap->a_dvp, ap->a_cnp);
return (EROFS);
}
int
cd9660_symlink(void *v)
{
struct vop_symlink_v3_args /* {
struct vnode *a_dvp;
struct vnode **a_vpp;
struct componentname *a_cnp;
struct vattr *a_vap;
char *a_target;
} */ *ap = v;
VOP_ABORTOP(ap->a_dvp, ap->a_cnp);
return (EROFS);
}
/*
* Calculate the logical to physical mapping if not done already,
* then call the device strategy routine.
@ -856,11 +828,11 @@ const struct vnodeopv_entry_desc cd9660_vnodeop_entries[] = {
{ &vop_fsync_desc, genfs_nullop }, /* fsync */
{ &vop_seek_desc, genfs_seek }, /* seek */
{ &vop_remove_desc, genfs_eopnotsupp }, /* remove */
{ &vop_link_desc, cd9660_link }, /* link */
{ &vop_link_desc, genfs_erofs_link }, /* link */
{ &vop_rename_desc, genfs_eopnotsupp }, /* rename */
{ &vop_mkdir_desc, genfs_eopnotsupp }, /* mkdir */
{ &vop_rmdir_desc, genfs_eopnotsupp }, /* rmdir */
{ &vop_symlink_desc, cd9660_symlink }, /* symlink */
{ &vop_symlink_desc, genfs_erofs_symlink }, /* symlink */
{ &vop_readdir_desc, cd9660_readdir }, /* readdir */
{ &vop_readlink_desc, cd9660_readlink }, /* readlink */
{ &vop_abortop_desc, genfs_abortop }, /* abortop */

View File

@ -1,4 +1,4 @@
/* $NetBSD: filecore_node.h,v 1.7 2021/07/18 23:57:14 dholland Exp $ */
/* $NetBSD: filecore_node.h,v 1.8 2022/03/27 17:10:55 christos Exp $ */
/*-
* Copyright (c) 1994 The Regents of the University of California.
@ -119,8 +119,6 @@ int filecore_readdir(void *);
int filecore_readlink(void *);
int filecore_inactive(void *);
int filecore_reclaim(void *);
int filecore_link(void *);
int filecore_symlink(void *);
int filecore_bmap(void *);
int filecore_strategy(void *);
int filecore_print(void *);

View File

@ -1,4 +1,4 @@
/* $NetBSD: filecore_vnops.c,v 1.49 2021/07/18 23:57:14 dholland Exp $ */
/* $NetBSD: filecore_vnops.c,v 1.50 2022/03/27 17:10:55 christos Exp $ */
/*-
* Copyright (c) 1994 The Regents of the University of California.
@ -66,7 +66,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: filecore_vnops.c,v 1.49 2021/07/18 23:57:14 dholland Exp $");
__KERNEL_RCSID(0, "$NetBSD: filecore_vnops.c,v 1.50 2022/03/27 17:10:55 christos Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@ -416,34 +416,6 @@ filecore_readlink(void *v)
return (EINVAL);
}
int
filecore_link(void *v)
{
struct vop_link_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
} */ *ap = v;
VOP_ABORTOP(ap->a_dvp, ap->a_cnp);
return (EROFS);
}
int
filecore_symlink(void *v)
{
struct vop_symlink_v3_args /* {
struct vnode *a_dvp;
struct vnode **a_vpp;
struct componentname *a_cnp;
struct vattr *a_vap;
char *a_target;
} */ *ap = v;
VOP_ABORTOP(ap->a_dvp, ap->a_cnp);
return (EROFS);
}
/*
* Calculate the logical to physical mapping if not done already,
* then call the device strategy routine.
@ -559,11 +531,11 @@ const struct vnodeopv_entry_desc filecore_vnodeop_entries[] = {
{ &vop_fsync_desc, genfs_nullop }, /* fsync */
{ &vop_seek_desc, genfs_seek }, /* seek */
{ &vop_remove_desc, genfs_eopnotsupp }, /* remove */
{ &vop_link_desc, filecore_link }, /* link */
{ &vop_link_desc, genfs_erofs_link }, /* link */
{ &vop_rename_desc, genfs_eopnotsupp }, /* rename */
{ &vop_mkdir_desc, genfs_eopnotsupp }, /* mkdir */
{ &vop_rmdir_desc, genfs_eopnotsupp }, /* rmdir */
{ &vop_symlink_desc, filecore_symlink }, /* symlink */
{ &vop_symlink_desc, genfs_erofs_symlink }, /* symlink */
{ &vop_readdir_desc, filecore_readdir }, /* readdir */
{ &vop_readlink_desc, filecore_readlink }, /* readlink */
{ &vop_abortop_desc, genfs_abortop }, /* abortop */

View File

@ -1,4 +1,4 @@
/* $NetBSD: fdesc_vnops.c,v 1.139 2022/01/15 19:33:58 riastradh Exp $ */
/* $NetBSD: fdesc_vnops.c,v 1.140 2022/03/27 17:10:55 christos Exp $ */
/*
* Copyright (c) 1992, 1993
@ -41,7 +41,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: fdesc_vnops.c,v 1.139 2022/01/15 19:33:58 riastradh Exp $");
__KERNEL_RCSID(0, "$NetBSD: fdesc_vnops.c,v 1.140 2022/03/27 17:10:55 christos Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@ -83,8 +83,6 @@ int fdesc_write(void *);
int fdesc_ioctl(void *);
int fdesc_poll(void *);
int fdesc_kqfilter(void *);
int fdesc_link(void *);
int fdesc_symlink(void *);
int fdesc_readdir(void *);
int fdesc_readlink(void *);
int fdesc_inactive(void *);
@ -120,11 +118,11 @@ const struct vnodeopv_entry_desc fdesc_vnodeop_entries[] = {
{ &vop_fsync_desc, genfs_nullop }, /* fsync */
{ &vop_seek_desc, genfs_seek }, /* seek */
{ &vop_remove_desc, genfs_eopnotsupp }, /* remove */
{ &vop_link_desc, fdesc_link }, /* link */
{ &vop_link_desc, genfs_erofs_link }, /* link */
{ &vop_rename_desc, genfs_eopnotsupp }, /* rename */
{ &vop_mkdir_desc, genfs_eopnotsupp }, /* mkdir */
{ &vop_rmdir_desc, genfs_eopnotsupp }, /* rmdir */
{ &vop_symlink_desc, fdesc_symlink }, /* symlink */
{ &vop_symlink_desc, genfs_erofs_symlink }, /* symlink */
{ &vop_readdir_desc, fdesc_readdir }, /* readdir */
{ &vop_readlink_desc, fdesc_readlink }, /* readlink */
{ &vop_abortop_desc, genfs_abortop }, /* abortop */
@ -912,31 +910,3 @@ fdesc_print(void *v)
printf("tag VT_NON, fdesc vnode\n");
return (0);
}
int
fdesc_link(void *v)
{
struct vop_link_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
} */ *ap = v;
VOP_ABORTOP(ap->a_dvp, ap->a_cnp);
return (EROFS);
}
int
fdesc_symlink(void *v)
{
struct vop_symlink_v3_args /* {
struct vnode *a_dvp;
struct vnode **a_vpp;
struct componentname *a_cnp;
struct vattr *a_vap;
char *a_target;
} */ *ap = v;
VOP_ABORTOP(ap->a_dvp, ap->a_cnp);
return (EROFS);
}

View File

@ -1,4 +1,4 @@
/* $NetBSD: genfs.h,v 1.38 2021/10/20 03:08:18 thorpej Exp $ */
/* $NetBSD: genfs.h,v 1.39 2022/03/27 17:10:55 christos Exp $ */
#ifndef _MISCFS_GENFS_GENFS_H_
#define _MISCFS_GENFS_GENFS_H_
@ -18,6 +18,8 @@ int genfs_enoioctl(void *);
int genfs_enoextops(void *);
int genfs_einval(void *);
int genfs_eopnotsupp(void *);
int genfs_erofs_link(void *);
#define genfs_erofs_symlink genfs_erofs_link
int genfs_ebadf(void *);
int genfs_nolock(void *);
int genfs_noislocked(void *);

View File

@ -1,4 +1,4 @@
/* $NetBSD: genfs_vnops.c,v 1.218 2022/03/27 16:23:08 christos Exp $ */
/* $NetBSD: genfs_vnops.c,v 1.219 2022/03/27 17:10:55 christos Exp $ */
/*-
* Copyright (c) 2008 The NetBSD Foundation, Inc.
@ -57,7 +57,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: genfs_vnops.c,v 1.218 2022/03/27 16:23:08 christos Exp $");
__KERNEL_RCSID(0, "$NetBSD: genfs_vnops.c,v 1.219 2022/03/27 17:10:55 christos Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@ -192,6 +192,20 @@ genfs_einval(void *v)
return (EINVAL);
}
int
genfs_erofs_link(void *v)
{
/* also for symlink */
struct vop_link_v2_args /* {
struct vnode *a_dvp;
struct vnode **a_vpp;
struct componentname *a_cnp;
} */ *ap = v;
VOP_ABORTOP(ap->a_dvp, ap->a_cnp);
return EROFS;
}
/*
* Called when an fs doesn't support a particular vop.
* This takes care to vrele, vput, or vunlock passed in vnodes

View File

@ -1,4 +1,4 @@
/* $NetBSD: kernfs_vnops.c,v 1.173 2022/03/12 17:36:14 riastradh Exp $ */
/* $NetBSD: kernfs_vnops.c,v 1.174 2022/03/27 17:10:56 christos Exp $ */
/*
* Copyright (c) 1992, 1993
@ -39,7 +39,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: kernfs_vnops.c,v 1.173 2022/03/12 17:36:14 riastradh Exp $");
__KERNEL_RCSID(0, "$NetBSD: kernfs_vnops.c,v 1.174 2022/03/27 17:10:56 christos Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@ -145,8 +145,6 @@ int kernfs_setattr(void *);
int kernfs_read(void *);
int kernfs_write(void *);
int kernfs_ioctl(void *);
int kernfs_link(void *);
int kernfs_symlink(void *);
int kernfs_readdir(void *);
int kernfs_inactive(void *);
int kernfs_reclaim(void *);
@ -183,11 +181,11 @@ const struct vnodeopv_entry_desc kernfs_vnodeop_entries[] = {
{ &vop_fsync_desc, genfs_nullop }, /* fsync */
{ &vop_seek_desc, genfs_nullop }, /* seek */
{ &vop_remove_desc, genfs_eopnotsupp }, /* remove */
{ &vop_link_desc, kernfs_link }, /* link */
{ &vop_link_desc, genfs_erofs_link }, /* link */
{ &vop_rename_desc, genfs_eopnotsupp }, /* rename */
{ &vop_mkdir_desc, genfs_eopnotsupp }, /* mkdir */
{ &vop_rmdir_desc, genfs_eopnotsupp }, /* rmdir */
{ &vop_symlink_desc, kernfs_symlink }, /* symlink */
{ &vop_symlink_desc, genfs_erofs_symlink }, /* symlink */
{ &vop_readdir_desc, kernfs_readdir }, /* readdir */
{ &vop_readlink_desc, genfs_eopnotsupp }, /* readlink */
{ &vop_abortop_desc, genfs_abortop }, /* abortop */
@ -1145,34 +1143,6 @@ kernfs_print(void *v)
return (0);
}
int
kernfs_link(void *v)
{
struct vop_link_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
} */ *ap = v;
VOP_ABORTOP(ap->a_dvp, ap->a_cnp);
return (EROFS);
}
int
kernfs_symlink(void *v)
{
struct vop_symlink_v3_args /* {
struct vnode *a_dvp;
struct vnode **a_vpp;
struct componentname *a_cnp;
struct vattr *a_vap;
char *a_target;
} */ *ap = v;
VOP_ABORTOP(ap->a_dvp, ap->a_cnp);
return (EROFS);
}
int
kernfs_getpages(void *v)
{

View File

@ -1,4 +1,4 @@
/* $NetBSD: procfs_vnops.c,v 1.227 2022/01/17 11:20:00 bouyer Exp $ */
/* $NetBSD: procfs_vnops.c,v 1.228 2022/03/27 17:10:56 christos Exp $ */
/*-
* Copyright (c) 2006, 2007, 2008, 2020 The NetBSD Foundation, Inc.
@ -105,7 +105,7 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: procfs_vnops.c,v 1.227 2022/01/17 11:20:00 bouyer Exp $");
__KERNEL_RCSID(0, "$NetBSD: procfs_vnops.c,v 1.228 2022/03/27 17:10:56 christos Exp $");
#include <sys/param.h>
#include <sys/atomic.h>
@ -213,8 +213,6 @@ int procfs_close(void *);
int procfs_access(void *);
int procfs_getattr(void *);
int procfs_setattr(void *);
int procfs_link(void *);
int procfs_symlink(void *);
int procfs_readdir(void *);
int procfs_readlink(void *);
int procfs_inactive(void *);
@ -254,11 +252,11 @@ const struct vnodeopv_entry_desc procfs_vnodeop_entries[] = {
{ &vop_fsync_desc, genfs_nullop }, /* fsync */
{ &vop_seek_desc, genfs_nullop }, /* seek */
{ &vop_remove_desc, genfs_eopnotsupp }, /* remove */
{ &vop_link_desc, procfs_link }, /* link */
{ &vop_link_desc, genfs_erofs_link }, /* link */
{ &vop_rename_desc, genfs_eopnotsupp }, /* rename */
{ &vop_mkdir_desc, genfs_eopnotsupp }, /* mkdir */
{ &vop_rmdir_desc, genfs_eopnotsupp }, /* rmdir */
{ &vop_symlink_desc, procfs_symlink }, /* symlink */
{ &vop_symlink_desc, genfs_erofs_symlink }, /* symlink */
{ &vop_readdir_desc, procfs_readdir }, /* readdir */
{ &vop_readlink_desc, procfs_readlink }, /* readlink */
{ &vop_abortop_desc, genfs_abortop }, /* abortop */
@ -501,34 +499,6 @@ procfs_print(void *v)
return 0;
}
int
procfs_link(void *v)
{
struct vop_link_v2_args /* {
struct vnode *a_dvp;
struct vnode *a_vp;
struct componentname *a_cnp;
} */ *ap = v;
VOP_ABORTOP(ap->a_dvp, ap->a_cnp);
return (EROFS);
}
int
procfs_symlink(void *v)
{
struct vop_symlink_v3_args /* {
struct vnode *a_dvp;
struct vnode **a_vpp;
struct componentname *a_cnp;
struct vattr *a_vap;
char *a_target;
} */ *ap = v;
VOP_ABORTOP(ap->a_dvp, ap->a_cnp);
return (EROFS);
}
/*
* Works out the path to the target process's current
* working directory or chroot. If the caller is in a chroot and