From 9db3aff53b164a91bcd40185195e89311b623583 Mon Sep 17 00:00:00 2001 From: Alexey Makhalov <amakhalov@vmware.com> Date: Fri, 3 Feb 2017 07:11:28 -0800 Subject: [PATCH 2/3] Added rap_plugin Functions signature fixing is still required. --- arch/x86/crypto/aesni-intel_asm.S | 10 +- arch/x86/crypto/aesni-intel_glue.c | 4 +- arch/x86/crypto/blowfish-x86_64-asm_64.S | 4 +- arch/x86/crypto/camellia-aesni-avx-asm_64.S | 12 +- arch/x86/crypto/camellia-aesni-avx2-asm_64.S | 12 +- arch/x86/crypto/camellia-x86_64-asm_64.S | 4 +- arch/x86/crypto/cast5-avx-x86_64-asm_64.S | 4 +- arch/x86/crypto/cast6-avx-x86_64-asm_64.S | 12 +- arch/x86/crypto/serpent-avx-x86_64-asm_64.S | 12 +- arch/x86/crypto/serpent-avx2-asm_64.S | 12 +- arch/x86/crypto/sha1-mb/sha1_mb_mgr_flush_avx2.S | 4 +- arch/x86/crypto/sha1-mb/sha1_mb_mgr_submit_avx2.S | 2 +- arch/x86/crypto/sha1_ssse3_glue.c | 56 +- arch/x86/crypto/sha256-avx-asm.S | 2 +- arch/x86/crypto/sha256-avx2-asm.S | 2 +- .../crypto/sha256-mb/sha256_mb_mgr_flush_avx2.S | 4 +- .../crypto/sha256-mb/sha256_mb_mgr_submit_avx2.S | 2 +- arch/x86/crypto/sha256-ssse3-asm.S | 2 +- arch/x86/crypto/sha256_ni_asm.S | 2 +- arch/x86/crypto/sha256_ssse3_glue.c | 26 +- arch/x86/crypto/sha512-avx-asm.S | 2 +- arch/x86/crypto/sha512-avx2-asm.S | 2 +- .../crypto/sha512-mb/sha512_mb_mgr_flush_avx2.S | 4 +- .../crypto/sha512-mb/sha512_mb_mgr_submit_avx2.S | 2 +- arch/x86/crypto/sha512-ssse3-asm.S | 2 +- arch/x86/crypto/twofish-avx-x86_64-asm_64.S | 12 +- arch/x86/crypto/twofish-i586-asm_32.S | 4 +- arch/x86/crypto/twofish-x86_64-asm_64-3way.S | 2 +- arch/x86/crypto/twofish-x86_64-asm_64.S | 4 +- arch/x86/entry/Makefile | 2 + arch/x86/entry/common.c | 61 +++ arch/x86/include/asm/fixmap.h | 2 +- arch/x86/include/asm/module.h | 9 +- arch/x86/kernel/cpu/vmware.c | 8 +- arch/x86/kernel/mcount_64.S | 2 +- arch/x86/kernel/traps.c | 4 + arch/x86/mm/pgtable.c | 2 +- arch/x86/oprofile/nmi_int.c | 2 +- arch/x86/xen/xen-asm.S | 8 +- drivers/acpi/button.c | 4 +- drivers/acpi/ec.c | 4 +- drivers/acpi/sysfs.c | 6 +- drivers/char/ipmi/ipmi_poweroff.c | 2 +- drivers/char/ipmi/ipmi_si_intf.c | 4 +- drivers/char/tpm/tpm-chip.c | 9 +- drivers/edac/edac_mc_sysfs.c | 2 +- drivers/firmware/dmi-id.c | 7 +- drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadow.c | 7 +- .../gpu/drm/nouveau/nvkm/subdev/bios/shadowpci.c | 7 +- drivers/gpu/drm/nouveau/nvkm/subdev/secboot/priv.h | 4 +- drivers/gpu/drm/radeon/radeon_kms.c | 6 +- drivers/hid/hid-magicmouse.c | 2 +- drivers/ide/ide.c | 4 +- drivers/md/md.c | 6 +- drivers/media/usb/uvc/uvc_driver.c | 4 +- drivers/message/fusion/mptbase.c | 4 +- drivers/misc/kgdbts.c | 2 +- drivers/mtd/devices/block2mtd.c | 2 +- drivers/mtd/devices/phram.c | 2 +- drivers/mtd/ubi/build.c | 2 +- drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c | 216 ++++---- drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h | 4 +- drivers/net/ethernet/brocade/bna/bfa_cs.h | 42 +- drivers/net/ethernet/brocade/bna/bfa_ioc.c | 10 +- drivers/net/ethernet/brocade/bna/bfa_ioc.h | 4 +- drivers/net/ethernet/brocade/bna/bfa_msgq.h | 8 +- drivers/net/ethernet/brocade/bna/bna_enet.c | 14 +- drivers/net/ethernet/brocade/bna/bna_tx_rx.c | 6 +- drivers/net/ethernet/brocade/bna/bna_types.h | 24 +- drivers/net/ethernet/brocade/bna/bnad.c | 11 +- drivers/pci/pcie/aspm.c | 4 +- drivers/platform/x86/thinkpad_acpi.c | 2 +- drivers/scsi/aacraid/aachba.c | 7 +- drivers/scsi/aic7xxx/aic79xx.h | 2 +- drivers/scsi/aic7xxx/aic79xx_core.c | 11 +- drivers/scsi/bfa/bfa.h | 4 +- drivers/scsi/bfa/bfa_core.c | 4 +- drivers/scsi/bfa/bfa_cs.h | 124 ++++- drivers/scsi/bfa/bfa_fcpim.h | 12 +- drivers/scsi/bfa/bfa_fcs.c | 19 +- drivers/scsi/bfa/bfa_fcs.h | 34 +- drivers/scsi/bfa/bfa_fcs_fcpim.c | 6 +- drivers/scsi/bfa/bfa_fcs_lport.c | 33 +- drivers/scsi/bfa/bfa_fcs_rport.c | 4 +- drivers/scsi/bfa/bfa_ioc.c | 8 +- drivers/scsi/bfa/bfa_ioc.h | 12 +- drivers/scsi/bfa/bfa_modules.h | 12 +- drivers/scsi/bfa/bfa_svc.c | 12 +- drivers/scsi/bfa/bfa_svc.h | 20 +- drivers/scsi/bfa/bfad.c | 12 +- drivers/scsi/bfa/bfad_bsg.c | 8 +- drivers/scsi/bfa/bfad_drv.h | 5 +- drivers/scsi/csiostor/csio_defs.h | 19 +- drivers/scsi/csiostor/csio_hw.c | 67 ++- drivers/scsi/csiostor/csio_init.c | 2 +- drivers/scsi/csiostor/csio_lnode.c | 32 +- drivers/scsi/csiostor/csio_rnode.c | 28 +- drivers/scsi/csiostor/csio_scsi.c | 37 +- drivers/scsi/fcoe/fcoe_transport.c | 16 +- drivers/scsi/ipr.c | 26 +- drivers/scsi/mpt3sas/mpt3sas_base.c | 2 +- drivers/scsi/mpt3sas/mpt3sas_scsih.c | 2 +- drivers/scsi/pmcraid.c | 26 +- drivers/scsi/qla2xxx/qla_target.c | 6 +- drivers/tty/serial/kgdboc.c | 2 +- drivers/video/console/dummycon.c | 76 ++- fs/afs/file.c | 8 +- fs/afs/internal.h | 2 +- fs/exofs/inode.c | 7 +- fs/fuse/file.c | 4 +- fs/fuse/inode.c | 4 +- fs/lockd/clnt4xdr.c | 46 +- fs/lockd/clntxdr.c | 44 +- fs/lockd/mon.c | 24 +- fs/lockd/svc.c | 2 +- fs/lockd/svc4proc.c | 69 +-- fs/lockd/svcproc.c | 75 +-- fs/lockd/xdr.c | 44 +- fs/lockd/xdr4.c | 41 +- fs/logfs/dev_bdev.c | 13 +- fs/logfs/dev_mtd.c | 13 +- fs/logfs/dir.c | 4 +- fs/logfs/logfs.h | 5 +- fs/logfs/readwrite.c | 2 +- fs/logfs/segment.c | 2 +- fs/logfs/super.c | 39 -- fs/nfs/callback.h | 20 +- fs/nfs/callback_proc.c | 29 +- fs/nfs/callback_xdr.c | 80 +-- fs/nfs/dir.c | 5 +- fs/nfs/mount_clnt.c | 26 +- fs/nfs/nfs2xdr.c | 101 ++-- fs/nfs/nfs3xdr.c | 201 +++++--- fs/nfs/nfs42xdr.c | 72 ++- fs/nfs/nfs4xdr.c | 507 ++++++++++-------- fs/nfs/read.c | 2 +- fs/nfs/symlink.c | 6 +- fs/nfsd/current_stateid.h | 24 +- fs/nfsd/nfs2acl.c | 85 +-- fs/nfsd/nfs3acl.c | 44 +- fs/nfsd/nfs3proc.c | 271 +++++----- fs/nfsd/nfs3xdr.c | 171 +++--- fs/nfsd/nfs4callback.c | 43 +- fs/nfsd/nfs4proc.c | 329 ++++++------ fs/nfsd/nfs4state.c | 111 ++-- fs/nfsd/nfs4xdr.c | 571 ++++++++++++--------- fs/nfsd/nfsproc.c | 193 ++++--- fs/nfsd/nfsxdr.c | 96 ++-- fs/nfsd/xdr.h | 50 +- fs/nfsd/xdr3.h | 100 ++-- fs/nfsd/xdr4.h | 50 +- fs/read_write.c | 34 +- include/linux/compiler.h | 87 ++-- include/linux/gfp.h | 2 +- include/linux/linkage.h | 28 +- include/linux/lockd/xdr.h | 34 +- include/linux/lockd/xdr4.h | 34 +- include/linux/moduleparam.h | 8 +- include/linux/netfilter/ipset/ip_set_comment.h | 3 +- include/linux/pagemap.h | 4 +- include/linux/syscalls.h | 18 +- include/net/netfilter/nf_conntrack.h | 2 +- kernel/bpf/core.c | 19 +- kernel/events/core.c | 6 +- kernel/module.c | 9 +- kernel/sched/core.c | 4 +- kernel/sched/deadline.c | 4 +- kernel/sched/rt.c | 4 +- kernel/sched/sched.h | 9 +- mm/filemap.c | 6 +- mm/page_alloc.c | 6 +- mm/readahead.c | 2 +- net/bridge/br_private.h | 3 +- net/netfilter/ipset/ip_set_core.c | 3 +- net/netfilter/nf_conntrack_core.c | 2 +- net/netfilter/nf_nat_ftp.c | 2 +- net/netfilter/nf_nat_irc.c | 2 +- net/sunrpc/auth_gss/gss_rpc_upcall.c | 4 +- net/sunrpc/auth_gss/gss_rpc_xdr.c | 11 +- net/sunrpc/auth_gss/gss_rpc_xdr.h | 8 +- net/sunrpc/rpcb_clnt.c | 61 ++- net/sunrpc/svc.c | 4 +- scripts/Makefile.gcc-plugins | 13 + scripts/gcc-plugins/rap_plugin/Makefile | 6 + scripts/gcc-plugins/rap_plugin/rap.h | 36 ++ scripts/gcc-plugins/rap_plugin/rap_fptr_pass.c | 220 ++++++++ scripts/gcc-plugins/rap_plugin/rap_hash.c | 382 ++++++++++++++ scripts/gcc-plugins/rap_plugin/rap_plugin.c | 534 +++++++++++++++++++ scripts/gcc-plugins/rap_plugin/sip.c | 96 ++++ security/Kconfig | 19 + security/apparmor/lsm.c | 16 +- 191 files changed, 4543 insertions(+), 2284 deletions(-) create mode 100644 scripts/gcc-plugins/rap_plugin/Makefile create mode 100644 scripts/gcc-plugins/rap_plugin/rap.h create mode 100644 scripts/gcc-plugins/rap_plugin/rap_fptr_pass.c create mode 100644 scripts/gcc-plugins/rap_plugin/rap_hash.c create mode 100644 scripts/gcc-plugins/rap_plugin/rap_plugin.c create mode 100644 scripts/gcc-plugins/rap_plugin/sip.c diff --git a/arch/x86/crypto/aesni-intel_asm.S b/arch/x86/crypto/aesni-intel_asm.S index 383a6f8..b665025 100644 --- a/arch/x86/crypto/aesni-intel_asm.S +++ b/arch/x86/crypto/aesni-intel_asm.S @@ -1280,7 +1280,7 @@ _esb_loop_\@: * poly = x^128 + x^127 + x^126 + x^121 + 1 * *****************************************************************************/ -ENTRY(aesni_gcm_dec) +RAP_ENTRY(aesni_gcm_dec) push %r12 push %r13 push %r14 @@ -1540,7 +1540,7 @@ ENDPROC(aesni_gcm_dec) * * poly = x^128 + x^127 + x^126 + x^121 + 1 ***************************************************************************/ -ENTRY(aesni_gcm_enc) +RAP_ENTRY(aesni_gcm_enc) push %r12 push %r13 push %r14 @@ -1914,7 +1914,7 @@ ENDPROC(aesni_set_key) /* * void aesni_enc(struct crypto_aes_ctx *ctx, u8 *dst, const u8 *src) */ -ENTRY(aesni_enc) +RAP_ENTRY(aesni_enc) FRAME_BEGIN #ifndef __x86_64__ pushl KEYP @@ -2105,7 +2105,7 @@ ENDPROC(_aesni_enc4) /* * void aesni_dec (struct crypto_aes_ctx *ctx, u8 *dst, const u8 *src) */ -ENTRY(aesni_dec) +RAP_ENTRY(aesni_dec) FRAME_BEGIN #ifndef __x86_64__ pushl KEYP @@ -2614,7 +2614,7 @@ ENDPROC(_aesni_inc) * void aesni_ctr_enc(struct crypto_aes_ctx *ctx, const u8 *dst, u8 *src, * size_t len, u8 *iv) */ -ENTRY(aesni_ctr_enc) +RAP_ENTRY(aesni_ctr_enc) FRAME_BEGIN cmp $16, LEN jb .Lctr_enc_just_ret diff --git a/arch/x86/crypto/aesni-intel_glue.c b/arch/x86/crypto/aesni-intel_glue.c index aa8b067..729ef33 100644 --- a/arch/x86/crypto/aesni-intel_glue.c +++ b/arch/x86/crypto/aesni-intel_glue.c @@ -71,9 +71,9 @@ struct aesni_xts_ctx { asmlinkage int aesni_set_key(struct crypto_aes_ctx *ctx, const u8 *in_key, unsigned int key_len); -asmlinkage void aesni_enc(struct crypto_aes_ctx *ctx, u8 *out, +asmlinkage void aesni_enc(void *ctx, u8 *out, const u8 *in); -asmlinkage void aesni_dec(struct crypto_aes_ctx *ctx, u8 *out, +asmlinkage void aesni_dec(void *ctx, u8 *out, const u8 *in); asmlinkage void aesni_ecb_enc(struct crypto_aes_ctx *ctx, u8 *out, const u8 *in, unsigned int len); diff --git a/arch/x86/crypto/blowfish-x86_64-asm_64.S b/arch/x86/crypto/blowfish-x86_64-asm_64.S index 246c670..6208521 100644 --- a/arch/x86/crypto/blowfish-x86_64-asm_64.S +++ b/arch/x86/crypto/blowfish-x86_64-asm_64.S @@ -155,7 +155,7 @@ ENTRY(__blowfish_enc_blk) ret; ENDPROC(__blowfish_enc_blk) -ENTRY(blowfish_dec_blk) +RAP_ENTRY(blowfish_dec_blk) /* input: * %rdi: ctx, CTX * %rsi: dst @@ -344,7 +344,7 @@ ENTRY(__blowfish_enc_blk_4way) ret; ENDPROC(__blowfish_enc_blk_4way) -ENTRY(blowfish_dec_blk_4way) +RAP_ENTRY(blowfish_dec_blk_4way) /* input: * %rdi: ctx, CTX * %rsi: dst diff --git a/arch/x86/crypto/camellia-aesni-avx-asm_64.S b/arch/x86/crypto/camellia-aesni-avx-asm_64.S index aa9e8bd..ea28a33 100644 --- a/arch/x86/crypto/camellia-aesni-avx-asm_64.S +++ b/arch/x86/crypto/camellia-aesni-avx-asm_64.S @@ -889,7 +889,7 @@ __camellia_dec_blk16: jmp .Ldec_max24; ENDPROC(__camellia_dec_blk16) -ENTRY(camellia_ecb_enc_16way) +RAP_ENTRY(camellia_ecb_enc_16way) /* input: * %rdi: ctx, CTX * %rsi: dst (16 blocks) @@ -914,7 +914,7 @@ ENTRY(camellia_ecb_enc_16way) ret; ENDPROC(camellia_ecb_enc_16way) -ENTRY(camellia_ecb_dec_16way) +RAP_ENTRY(camellia_ecb_dec_16way) /* input: * %rdi: ctx, CTX * %rsi: dst (16 blocks) @@ -944,7 +944,7 @@ ENTRY(camellia_ecb_dec_16way) ret; ENDPROC(camellia_ecb_dec_16way) -ENTRY(camellia_cbc_dec_16way) +RAP_ENTRY(camellia_cbc_dec_16way) /* input: * %rdi: ctx, CTX * %rsi: dst (16 blocks) @@ -1001,7 +1001,7 @@ ENDPROC(camellia_cbc_dec_16way) vpslldq $8, tmp, tmp; \ vpsubq tmp, x, x; -ENTRY(camellia_ctr_16way) +RAP_ENTRY(camellia_ctr_16way) /* input: * %rdi: ctx, CTX * %rsi: dst (16 blocks) @@ -1252,7 +1252,7 @@ camellia_xts_crypt_16way: ret; ENDPROC(camellia_xts_crypt_16way) -ENTRY(camellia_xts_enc_16way) +RAP_ENTRY(camellia_xts_enc_16way) /* input: * %rdi: ctx, CTX * %rsi: dst (16 blocks) @@ -1266,7 +1266,7 @@ ENTRY(camellia_xts_enc_16way) jmp camellia_xts_crypt_16way; ENDPROC(camellia_xts_enc_16way) -ENTRY(camellia_xts_dec_16way) +RAP_ENTRY(camellia_xts_dec_16way) /* input: * %rdi: ctx, CTX * %rsi: dst (16 blocks) diff --git a/arch/x86/crypto/camellia-aesni-avx2-asm_64.S b/arch/x86/crypto/camellia-aesni-avx2-asm_64.S index 16186c1..a8fd587 100644 --- a/arch/x86/crypto/camellia-aesni-avx2-asm_64.S +++ b/arch/x86/crypto/camellia-aesni-avx2-asm_64.S @@ -929,7 +929,7 @@ __camellia_dec_blk32: jmp .Ldec_max24; ENDPROC(__camellia_dec_blk32) -ENTRY(camellia_ecb_enc_32way) +RAP_ENTRY(camellia_ecb_enc_32way) /* input: * %rdi: ctx, CTX * %rsi: dst (32 blocks) @@ -958,7 +958,7 @@ ENTRY(camellia_ecb_enc_32way) ret; ENDPROC(camellia_ecb_enc_32way) -ENTRY(camellia_ecb_dec_32way) +RAP_ENTRY(camellia_ecb_dec_32way) /* input: * %rdi: ctx, CTX * %rsi: dst (32 blocks) @@ -992,7 +992,7 @@ ENTRY(camellia_ecb_dec_32way) ret; ENDPROC(camellia_ecb_dec_32way) -ENTRY(camellia_cbc_dec_32way) +RAP_ENTRY(camellia_cbc_dec_32way) /* input: * %rdi: ctx, CTX * %rsi: dst (32 blocks) @@ -1074,7 +1074,7 @@ ENDPROC(camellia_cbc_dec_32way) vpslldq $8, tmp1, tmp1; \ vpsubq tmp1, x, x; -ENTRY(camellia_ctr_32way) +RAP_ENTRY(camellia_ctr_32way) /* input: * %rdi: ctx, CTX * %rsi: dst (32 blocks) @@ -1367,7 +1367,7 @@ camellia_xts_crypt_32way: ret; ENDPROC(camellia_xts_crypt_32way) -ENTRY(camellia_xts_enc_32way) +RAP_ENTRY(camellia_xts_enc_32way) /* input: * %rdi: ctx, CTX * %rsi: dst (32 blocks) @@ -1382,7 +1382,7 @@ ENTRY(camellia_xts_enc_32way) jmp camellia_xts_crypt_32way; ENDPROC(camellia_xts_enc_32way) -ENTRY(camellia_xts_dec_32way) +RAP_ENTRY(camellia_xts_dec_32way) /* input: * %rdi: ctx, CTX * %rsi: dst (32 blocks) diff --git a/arch/x86/crypto/camellia-x86_64-asm_64.S b/arch/x86/crypto/camellia-x86_64-asm_64.S index 310319c..2b0c518 100644 --- a/arch/x86/crypto/camellia-x86_64-asm_64.S +++ b/arch/x86/crypto/camellia-x86_64-asm_64.S @@ -237,7 +237,7 @@ ENTRY(__camellia_enc_blk) ret; ENDPROC(__camellia_enc_blk) -ENTRY(camellia_dec_blk) +RAP_ENTRY(camellia_dec_blk) /* input: * %rdi: ctx, CTX * %rsi: dst @@ -473,7 +473,7 @@ ENTRY(__camellia_enc_blk_2way) ret; ENDPROC(__camellia_enc_blk_2way) -ENTRY(camellia_dec_blk_2way) +RAP_ENTRY(camellia_dec_blk_2way) /* input: * %rdi: ctx, CTX * %rsi: dst diff --git a/arch/x86/crypto/cast5-avx-x86_64-asm_64.S b/arch/x86/crypto/cast5-avx-x86_64-asm_64.S index 14fa196..10e63a7 100644 --- a/arch/x86/crypto/cast5-avx-x86_64-asm_64.S +++ b/arch/x86/crypto/cast5-avx-x86_64-asm_64.S @@ -360,7 +360,7 @@ __cast5_dec_blk16: jmp .L__dec_tail; ENDPROC(__cast5_dec_blk16) -ENTRY(cast5_ecb_enc_16way) +RAP_ENTRY(cast5_ecb_enc_16way) /* input: * %rdi: ctx, CTX * %rsi: dst @@ -394,7 +394,7 @@ ENTRY(cast5_ecb_enc_16way) ret; ENDPROC(cast5_ecb_enc_16way) -ENTRY(cast5_ecb_dec_16way) +RAP_ENTRY(cast5_ecb_dec_16way) /* input: * %rdi: ctx, CTX * %rsi: dst diff --git a/arch/x86/crypto/cast6-avx-x86_64-asm_64.S b/arch/x86/crypto/cast6-avx-x86_64-asm_64.S index c419389..b6a5a64 100644 --- a/arch/x86/crypto/cast6-avx-x86_64-asm_64.S +++ b/arch/x86/crypto/cast6-avx-x86_64-asm_64.S @@ -344,7 +344,7 @@ __cast6_dec_blk8: ret; ENDPROC(__cast6_dec_blk8) -ENTRY(cast6_ecb_enc_8way) +RAP_ENTRY(cast6_ecb_enc_8way) /* input: * %rdi: ctx, CTX * %rsi: dst @@ -364,7 +364,7 @@ ENTRY(cast6_ecb_enc_8way) ret; ENDPROC(cast6_ecb_enc_8way) -ENTRY(cast6_ecb_dec_8way) +RAP_ENTRY(cast6_ecb_dec_8way) /* input: * %rdi: ctx, CTX * %rsi: dst @@ -384,7 +384,7 @@ ENTRY(cast6_ecb_dec_8way) ret; ENDPROC(cast6_ecb_dec_8way) -ENTRY(cast6_cbc_dec_8way) +RAP_ENTRY(cast6_cbc_dec_8way) /* input: * %rdi: ctx, CTX * %rsi: dst @@ -409,7 +409,7 @@ ENTRY(cast6_cbc_dec_8way) ret; ENDPROC(cast6_cbc_dec_8way) -ENTRY(cast6_ctr_8way) +RAP_ENTRY(cast6_ctr_8way) /* input: * %rdi: ctx, CTX * %rsi: dst @@ -436,7 +436,7 @@ ENTRY(cast6_ctr_8way) ret; ENDPROC(cast6_ctr_8way) -ENTRY(cast6_xts_enc_8way) +RAP_ENTRY(cast6_xts_enc_8way) /* input: * %rdi: ctx, CTX * %rsi: dst @@ -460,7 +460,7 @@ ENTRY(cast6_xts_enc_8way) ret; ENDPROC(cast6_xts_enc_8way) -ENTRY(cast6_xts_dec_8way) +RAP_ENTRY(cast6_xts_dec_8way) /* input: * %rdi: ctx, CTX * %rsi: dst diff --git a/arch/x86/crypto/serpent-avx-x86_64-asm_64.S b/arch/x86/crypto/serpent-avx-x86_64-asm_64.S index 8be5718..a23f39b 100644 --- a/arch/x86/crypto/serpent-avx-x86_64-asm_64.S +++ b/arch/x86/crypto/serpent-avx-x86_64-asm_64.S @@ -676,7 +676,7 @@ __serpent_dec_blk8_avx: ret; ENDPROC(__serpent_dec_blk8_avx) -ENTRY(serpent_ecb_enc_8way_avx) +RAP_ENTRY(serpent_ecb_enc_8way_avx) /* input: * %rdi: ctx, CTX * %rsi: dst @@ -694,7 +694,7 @@ ENTRY(serpent_ecb_enc_8way_avx) ret; ENDPROC(serpent_ecb_enc_8way_avx) -ENTRY(serpent_ecb_dec_8way_avx) +RAP_ENTRY(serpent_ecb_dec_8way_avx) /* input: * %rdi: ctx, CTX * %rsi: dst @@ -712,7 +712,7 @@ ENTRY(serpent_ecb_dec_8way_avx) ret; ENDPROC(serpent_ecb_dec_8way_avx) -ENTRY(serpent_cbc_dec_8way_avx) +RAP_ENTRY(serpent_cbc_dec_8way_avx) /* input: * %rdi: ctx, CTX * %rsi: dst @@ -730,7 +730,7 @@ ENTRY(serpent_cbc_dec_8way_avx) ret; ENDPROC(serpent_cbc_dec_8way_avx) -ENTRY(serpent_ctr_8way_avx) +RAP_ENTRY(serpent_ctr_8way_avx) /* input: * %rdi: ctx, CTX * %rsi: dst @@ -750,7 +750,7 @@ ENTRY(serpent_ctr_8way_avx) ret; ENDPROC(serpent_ctr_8way_avx) -ENTRY(serpent_xts_enc_8way_avx) +RAP_ENTRY(serpent_xts_enc_8way_avx) /* input: * %rdi: ctx, CTX * %rsi: dst @@ -772,7 +772,7 @@ ENTRY(serpent_xts_enc_8way_avx) ret; ENDPROC(serpent_xts_enc_8way_avx) -ENTRY(serpent_xts_dec_8way_avx) +RAP_ENTRY(serpent_xts_dec_8way_avx) /* input: * %rdi: ctx, CTX * %rsi: dst diff --git a/arch/x86/crypto/serpent-avx2-asm_64.S b/arch/x86/crypto/serpent-avx2-asm_64.S index 97c48ad..ed919c5 100644 --- a/arch/x86/crypto/serpent-avx2-asm_64.S +++ b/arch/x86/crypto/serpent-avx2-asm_64.S @@ -668,7 +668,7 @@ __serpent_dec_blk16: ret; ENDPROC(__serpent_dec_blk16) -ENTRY(serpent_ecb_enc_16way) +RAP_ENTRY(serpent_ecb_enc_16way) /* input: * %rdi: ctx, CTX * %rsi: dst @@ -690,7 +690,7 @@ ENTRY(serpent_ecb_enc_16way) ret; ENDPROC(serpent_ecb_enc_16way) -ENTRY(serpent_ecb_dec_16way) +RAP_ENTRY(serpent_ecb_dec_16way) /* input: * %rdi: ctx, CTX * %rsi: dst @@ -712,7 +712,7 @@ ENTRY(serpent_ecb_dec_16way) ret; ENDPROC(serpent_ecb_dec_16way) -ENTRY(serpent_cbc_dec_16way) +RAP_ENTRY(serpent_cbc_dec_16way) /* input: * %rdi: ctx, CTX * %rsi: dst @@ -735,7 +735,7 @@ ENTRY(serpent_cbc_dec_16way) ret; ENDPROC(serpent_cbc_dec_16way) -ENTRY(serpent_ctr_16way) +RAP_ENTRY(serpent_ctr_16way) /* input: * %rdi: ctx, CTX * %rsi: dst (16 blocks) @@ -760,7 +760,7 @@ ENTRY(serpent_ctr_16way) ret; ENDPROC(serpent_ctr_16way) -ENTRY(serpent_xts_enc_16way) +RAP_ENTRY(serpent_xts_enc_16way) /* input: * %rdi: ctx, CTX * %rsi: dst (16 blocks) @@ -786,7 +786,7 @@ ENTRY(serpent_xts_enc_16way) ret; ENDPROC(serpent_xts_enc_16way) -ENTRY(serpent_xts_dec_16way) +RAP_ENTRY(serpent_xts_dec_16way) /* input: * %rdi: ctx, CTX * %rsi: dst (16 blocks) diff --git a/arch/x86/crypto/sha1-mb/sha1_mb_mgr_flush_avx2.S b/arch/x86/crypto/sha1-mb/sha1_mb_mgr_flush_avx2.S index 96df6a3..8519a8f 100644 --- a/arch/x86/crypto/sha1-mb/sha1_mb_mgr_flush_avx2.S +++ b/arch/x86/crypto/sha1-mb/sha1_mb_mgr_flush_avx2.S @@ -103,7 +103,7 @@ offset = \_offset # JOB* sha1_mb_mgr_flush_avx2(MB_MGR *state) # arg 1 : rcx : state -ENTRY(sha1_mb_mgr_flush_avx2) +RAP_ENTRY(sha1_mb_mgr_flush_avx2) FRAME_BEGIN push %rbx @@ -226,7 +226,7 @@ ENDPROC(sha1_mb_mgr_flush_avx2) ################################################################# .align 16 -ENTRY(sha1_mb_mgr_get_comp_job_avx2) +RAP_ENTRY(sha1_mb_mgr_get_comp_job_avx2) push %rbx ## if bit 32+3 is set, then all lanes are empty diff --git a/arch/x86/crypto/sha1-mb/sha1_mb_mgr_submit_avx2.S b/arch/x86/crypto/sha1-mb/sha1_mb_mgr_submit_avx2.S index 63a0d9c..a6038fd 100644 --- a/arch/x86/crypto/sha1-mb/sha1_mb_mgr_submit_avx2.S +++ b/arch/x86/crypto/sha1-mb/sha1_mb_mgr_submit_avx2.S @@ -98,7 +98,7 @@ lane_data = %r10 # JOB* submit_mb_mgr_submit_avx2(MB_MGR *state, job_sha1 *job) # arg 1 : rcx : state # arg 2 : rdx : job -ENTRY(sha1_mb_mgr_submit_avx2) +RAP_ENTRY(sha1_mb_mgr_submit_avx2) FRAME_BEGIN push %rbx push %r12 diff --git a/arch/x86/crypto/sha1_ssse3_glue.c b/arch/x86/crypto/sha1_ssse3_glue.c index fc61739..03f7efe 100644 --- a/arch/x86/crypto/sha1_ssse3_glue.c +++ b/arch/x86/crypto/sha1_ssse3_glue.c @@ -31,8 +31,8 @@ #include <crypto/sha1_base.h> #include <asm/fpu/api.h> -typedef void (sha1_transform_fn)(u32 *digest, const char *data, - unsigned int rounds); +typedef void (sha1_transform_fn)(struct sha1_state *digest, const u8 *data, + int rounds); static int sha1_update(struct shash_desc *desc, const u8 *data, unsigned int len, sha1_transform_fn *sha1_xform) @@ -47,8 +47,7 @@ static int sha1_update(struct shash_desc *desc, const u8 *data, BUILD_BUG_ON(offsetof(struct sha1_state, state) != 0); kernel_fpu_begin(); - sha1_base_do_update(desc, data, len, - (sha1_block_fn *)sha1_xform); + sha1_base_do_update(desc, data, len, sha1_xform); kernel_fpu_end(); return 0; @@ -62,29 +61,26 @@ static int sha1_finup(struct shash_desc *desc, const u8 *data, kernel_fpu_begin(); if (len) - sha1_base_do_update(desc, data, len, - (sha1_block_fn *)sha1_xform); - sha1_base_do_finalize(desc, (sha1_block_fn *)sha1_xform); + sha1_base_do_update(desc, data, len, sha1_xform); + sha1_base_do_finalize(desc, sha1_xform); kernel_fpu_end(); return sha1_base_finish(desc, out); } -asmlinkage void sha1_transform_ssse3(u32 *digest, const char *data, - unsigned int rounds); +asmlinkage void sha1_transform_ssse3(struct sha1_state *digest, const u8 *data, + int rounds); static int sha1_ssse3_update(struct shash_desc *desc, const u8 *data, unsigned int len) { - return sha1_update(desc, data, len, - (sha1_transform_fn *) sha1_transform_ssse3); + return sha1_update(desc, data, len, sha1_transform_ssse3); } static int sha1_ssse3_finup(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out) { - return sha1_finup(desc, data, len, out, - (sha1_transform_fn *) sha1_transform_ssse3); + return sha1_finup(desc, data, len, out, sha1_transform_ssse3); } /* Add padding and return the message digest. */ @@ -124,21 +120,19 @@ static void unregister_sha1_ssse3(void) } #ifdef CONFIG_AS_AVX -asmlinkage void sha1_transform_avx(u32 *digest, const char *data, - unsigned int rounds); +asmlinkage void sha1_transform_avx(struct sha1_state *digest, const u8 *data, + int rounds); static int sha1_avx_update(struct shash_desc *desc, const u8 *data, unsigned int len) { - return sha1_update(desc, data, len, - (sha1_transform_fn *) sha1_transform_avx); + return sha1_update(desc, data, len, sha1_transform_avx); } static int sha1_avx_finup(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out) { - return sha1_finup(desc, data, len, out, - (sha1_transform_fn *) sha1_transform_avx); + return sha1_finup(desc, data, len, out, sha1_transform_avx); } static int sha1_avx_final(struct shash_desc *desc, u8 *out) @@ -196,8 +190,8 @@ static inline void unregister_sha1_avx(void) { } #if defined(CONFIG_AS_AVX2) && (CONFIG_AS_AVX) #define SHA1_AVX2_BLOCK_OPTSIZE 4 /* optimal 4*64 bytes of SHA1 blocks */ -asmlinkage void sha1_transform_avx2(u32 *digest, const char *data, - unsigned int rounds); +asmlinkage void sha1_transform_avx2(struct sha1_state *digest, const u8 *data, + int rounds); static bool avx2_usable(void) { @@ -209,8 +203,8 @@ static bool avx2_usable(void) return false; } -static void sha1_apply_transform_avx2(u32 *digest, const char *data, - unsigned int rounds) +static void sha1_apply_transform_avx2(struct sha1_state *digest, const u8 *data, + int rounds) { /* Select the optimal transform based on data block size */ if (rounds >= SHA1_AVX2_BLOCK_OPTSIZE) @@ -222,15 +216,13 @@ static void sha1_apply_transform_avx2(u32 *digest, const char *data, static int sha1_avx2_update(struct shash_desc *desc, const u8 *data, unsigned int len) { - return sha1_update(desc, data, len, - (sha1_transform_fn *) sha1_apply_transform_avx2); + return sha1_update(desc, data, len, sha1_apply_transform_avx2); } static int sha1_avx2_finup(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out) { - return sha1_finup(desc, data, len, out, - (sha1_transform_fn *) sha1_apply_transform_avx2); + return sha1_finup(desc, data, len, out, sha1_apply_transform_avx2); } static int sha1_avx2_final(struct shash_desc *desc, u8 *out) @@ -274,21 +266,19 @@ static inline void unregister_sha1_avx2(void) { } #endif #ifdef CONFIG_AS_SHA1_NI -asmlinkage void sha1_ni_transform(u32 *digest, const char *data, - unsigned int rounds); +asmlinkage void sha1_ni_transform(struct sha1_state *digest, const u8 *data, + int rounds); static int sha1_ni_update(struct shash_desc *desc, const u8 *data, unsigned int len) { - return sha1_update(desc, data, len, - (sha1_transform_fn *) sha1_ni_transform); + return sha1_update(desc, data, len, sha1_ni_transform); } static int sha1_ni_finup(struct shash_desc *desc, const u8 *data, unsigned int len, u8 *out) { - return sha1_finup(desc, data, len, out, - (sha1_transform_fn *) sha1_ni_transform); + return sha1_finup(desc, data, len, out, sha1_ni_transform); } static int sha1_ni_final(struct shash_desc *desc, u8 *out) diff --git a/arch/x86/crypto/sha256-avx-asm.S b/arch/x86/crypto/sha256-avx-asm.S index 92b3b5d..8597dee 100644 --- a/arch/x86/crypto/sha256-avx-asm.S +++ b/arch/x86/crypto/sha256-avx-asm.S @@ -347,7 +347,7 @@ a = TMP_ ## arg 3 : Num blocks ######################################################################## .text -ENTRY(sha256_transform_avx) +RAP_ENTRY(sha256_transform_avx) .align 32 pushq %rbx pushq %rbp diff --git a/arch/x86/crypto/sha256-avx2-asm.S b/arch/x86/crypto/sha256-avx2-asm.S index 570ec5e..f6412de 100644 --- a/arch/x86/crypto/sha256-avx2-asm.S +++ b/arch/x86/crypto/sha256-avx2-asm.S @@ -528,7 +528,7 @@ STACK_SIZE = _RSP + _RSP_SIZE ## arg 3 : Num blocks ######################################################################## .text -ENTRY(sha256_transform_rorx) +RAP_ENTRY(sha256_transform_rorx) .align 32 pushq %rbx pushq %rbp diff --git a/arch/x86/crypto/sha256-mb/sha256_mb_mgr_flush_avx2.S b/arch/x86/crypto/sha256-mb/sha256_mb_mgr_flush_avx2.S index a78a069..127cb66 100644 --- a/arch/x86/crypto/sha256-mb/sha256_mb_mgr_flush_avx2.S +++ b/arch/x86/crypto/sha256-mb/sha256_mb_mgr_flush_avx2.S @@ -101,7 +101,7 @@ offset = \_offset # JOB_SHA256* sha256_mb_mgr_flush_avx2(MB_MGR *state) # arg 1 : rcx : state -ENTRY(sha256_mb_mgr_flush_avx2) +RAP_ENTRY(sha256_mb_mgr_flush_avx2) FRAME_BEGIN push %rbx @@ -225,7 +225,7 @@ ENDPROC(sha256_mb_mgr_flush_avx2) ############################################################################## .align 16 -ENTRY(sha256_mb_mgr_get_comp_job_avx2) +RAP_ENTRY(sha256_mb_mgr_get_comp_job_avx2) push %rbx ## if bit 32+3 is set, then all lanes are empty diff --git a/arch/x86/crypto/sha256-mb/sha256_mb_mgr_submit_avx2.S b/arch/x86/crypto/sha256-mb/sha256_mb_mgr_submit_avx2.S index 7ea670e..5aa297a 100644 --- a/arch/x86/crypto/sha256-mb/sha256_mb_mgr_submit_avx2.S +++ b/arch/x86/crypto/sha256-mb/sha256_mb_mgr_submit_avx2.S @@ -96,7 +96,7 @@ lane_data = %r10 # JOB* sha256_mb_mgr_submit_avx2(MB_MGR *state, JOB_SHA256 *job) # arg 1 : rcx : state # arg 2 : rdx : job -ENTRY(sha256_mb_mgr_submit_avx2) +RAP_ENTRY(sha256_mb_mgr_submit_avx2) FRAME_BEGIN push %rbx push %r12 diff --git a/arch/x86/crypto/sha256-ssse3-asm.S b/arch/x86/crypto/sha256-ssse3-asm.S index 2cedc44..5d64809 100644 --- a/arch/x86/crypto/sha256-ssse3-asm.S +++ b/arch/x86/crypto/sha256-ssse3-asm.S @@ -353,7 +353,7 @@ a = TMP_ ## arg 3 : Num blocks ######################################################################## .text -ENTRY(sha256_transform_ssse3) +RAP_ENTRY(sha256_transform_ssse3) .align 32 pushq %rbx pushq %rbp diff --git a/arch/x86/crypto/sha256_ni_asm.S b/arch/x86/crypto/sha256_ni_asm.S index 748cdf2..959bb4d 100644 --- a/arch/x86/crypto/sha256_ni_asm.S +++ b/arch/x86/crypto/sha256_ni_asm.S @@ -97,7 +97,7 @@ .text .align 32 -ENTRY(sha256_ni_transform) +RAP_ENTRY(sha256_ni_transform) shl $6, NUM_BLKS /* convert to bytes */ jz .Ldone_hash diff --git a/arch/x86/crypto/sha256_ssse3_glue.c b/arch/x86/crypto/sha256_ssse3_glue.c index 9e79baf..c5186c7 100644 --- a/arch/x86/crypto/sha256_ssse3_glue.c +++ b/arch/x86/crypto/sha256_ssse3_glue.c @@ -40,9 +40,9 @@ #include <asm/fpu/api.h> #include <linux/string.h> -asmlinkage void sha256_transform_ssse3(u32 *digest, const char *data, - u64 rounds); -typedef void (sha256_transform_fn)(u32 *digest, const char *data, u64 rounds); +asmlinkage void sha256_transform_ssse3(struct sha256_state *digest, const u8 *data, + int rounds); +typedef void (sha256_transform_fn)(struct sha256_state *digest, const u8 *data, int rounds); static int sha256_update(struct shash_desc *desc, const u8 *data, unsigned int len, sha256_transform_fn *sha256_xform) @@ -57,8 +57,7 @@ static int sha256_update(struct shash_desc *desc, const u8 *data, BUILD_BUG_ON(offsetof(struct sha256_state, state) != 0); kernel_fpu_begin(); - sha256_base_do_update(desc, data, len, - (sha256_block_fn *)sha256_xform); + sha256_base_do_update(desc, data, len, sha256_xform); kernel_fpu_end(); return 0; @@ -72,9 +71,8 @@ static int sha256_finup(struct shash_desc *desc, const u8 *data, kernel_fpu_begin(); if (len) - sha256_base_do_update(desc, data, len, - (sha256_block_fn *)sha256_xform); - sha256_base_do_finalize(desc, (sha256_block_fn *)sha256_xform); + sha256_base_do_update(desc, data, len, sha256_xform); + sha256_base_do_finalize(desc, sha256_xform); kernel_fpu_end(); return sha256_base_finish(desc, out); @@ -146,8 +144,8 @@ static void unregister_sha256_ssse3(void) } #ifdef CONFIG_AS_AVX -asmlinkage void sha256_transform_avx(u32 *digest, const char *data, - u64 rounds); +asmlinkage void sha256_transform_avx(struct sha256_state *digest, const u8 *data, + int rounds); static int sha256_avx_update(struct shash_desc *desc, const u8 *data, unsigned int len) @@ -230,8 +228,8 @@ static inline void unregister_sha256_avx(void) { } #endif #if defined(CONFIG_AS_AVX2) && defined(CONFIG_AS_AVX) -asmlinkage void sha256_transform_rorx(u32 *digest, const char *data, - u64 rounds); +asmlinkage void sha256_transform_rorx(struct sha256_state *digest, const u8 *data, + int rounds); static int sha256_avx2_update(struct shash_desc *desc, const u8 *data, unsigned int len) @@ -312,8 +310,8 @@ static inline void unregister_sha256_avx2(void) { } #endif #ifdef CONFIG_AS_SHA256_NI -asmlinkage void sha256_ni_transform(u32 *digest, const char *data, - u64 rounds); /*unsigned int rounds);*/ +asmlinkage void sha256_ni_transform(struct sha256_state *digest, const u8 *data, + int rounds); /*unsigned int rounds);*/ static int sha256_ni_update(struct shash_desc *desc, const u8 *data, unsigned int len) diff --git a/arch/x86/crypto/sha512-avx-asm.S b/arch/x86/crypto/sha512-avx-asm.S index 565274d..da58569 100644 --- a/arch/x86/crypto/sha512-avx-asm.S +++ b/arch/x86/crypto/sha512-avx-asm.S @@ -277,7 +277,7 @@ frame_size = frame_GPRSAVE + GPRSAVE_SIZE # message blocks. # L is the message length in SHA512 blocks ######################################################################## -ENTRY(sha512_transform_avx) +RAP_ENTRY(sha512_transform_avx) cmp $0, msglen je nowork diff --git a/arch/x86/crypto/sha512-avx2-asm.S b/arch/x86/crypto/sha512-avx2-asm.S index 1f20b35..8be5909 100644 --- a/arch/x86/crypto/sha512-avx2-asm.S +++ b/arch/x86/crypto/sha512-avx2-asm.S @@ -568,7 +568,7 @@ frame_size = frame_GPRSAVE + GPRSAVE_SIZE # message blocks. # L is the message length in SHA512 blocks ######################################################################## -ENTRY(sha512_transform_rorx) +RAP_ENTRY(sha512_transform_rorx) # Allocate Stack Space mov %rsp, %rax sub $frame_size, %rsp diff --git a/arch/x86/crypto/sha512-mb/sha512_mb_mgr_flush_avx2.S b/arch/x86/crypto/sha512-mb/sha512_mb_mgr_flush_avx2.S index 3ddba19..2d3abc7 100644 --- a/arch/x86/crypto/sha512-mb/sha512_mb_mgr_flush_avx2.S +++ b/arch/x86/crypto/sha512-mb/sha512_mb_mgr_flush_avx2.S @@ -107,7 +107,7 @@ offset = \_offset # JOB* sha512_mb_mgr_flush_avx2(MB_MGR *state) # arg 1 : rcx : state -ENTRY(sha512_mb_mgr_flush_avx2) +RAP_ENTRY(sha512_mb_mgr_flush_avx2) FRAME_BEGIN push %rbx @@ -220,7 +220,7 @@ return_null: ENDPROC(sha512_mb_mgr_flush_avx2) .align 16 -ENTRY(sha512_mb_mgr_get_comp_job_avx2) +RAP_ENTRY(sha512_mb_mgr_get_comp_job_avx2) push %rbx mov _unused_lanes(state), unused_lanes diff --git a/arch/x86/crypto/sha512-mb/sha512_mb_mgr_submit_avx2.S b/arch/x86/crypto/sha512-mb/sha512_mb_mgr_submit_avx2.S index 815f07b..70fbc7b 100644 --- a/arch/x86/crypto/sha512-mb/sha512_mb_mgr_submit_avx2.S +++ b/arch/x86/crypto/sha512-mb/sha512_mb_mgr_submit_avx2.S @@ -98,7 +98,7 @@ # JOB* sha512_mb_mgr_submit_avx2(MB_MGR *state, JOB *job) # arg 1 : rcx : state # arg 2 : rdx : job -ENTRY(sha512_mb_mgr_submit_avx2) +RAP_ENTRY(sha512_mb_mgr_submit_avx2) FRAME_BEGIN push %rbx push %r12 diff --git a/arch/x86/crypto/sha512-ssse3-asm.S b/arch/x86/crypto/sha512-ssse3-asm.S index e610e29..0e40d3a 100644 --- a/arch/x86/crypto/sha512-ssse3-asm.S +++ b/arch/x86/crypto/sha512-ssse3-asm.S @@ -275,7 +275,7 @@ frame_size = frame_GPRSAVE + GPRSAVE_SIZE # message blocks. # L is the message length in SHA512 blocks. ######################################################################## -ENTRY(sha512_transform_ssse3) +RAP_ENTRY(sha512_transform_ssse3) cmp $0, msglen je nowork diff --git a/arch/x86/crypto/twofish-avx-x86_64-asm_64.S b/arch/x86/crypto/twofish-avx-x86_64-asm_64.S index dc66273..0d1ff7a 100644 --- a/arch/x86/crypto/twofish-avx-x86_64-asm_64.S +++ b/arch/x86/crypto/twofish-avx-x86_64-asm_64.S @@ -328,7 +328,7 @@ __twofish_dec_blk8: ret; ENDPROC(__twofish_dec_blk8) -ENTRY(twofish_ecb_enc_8way) +RAP_ENTRY(twofish_ecb_enc_8way) /* input: * %rdi: ctx, CTX * %rsi: dst @@ -348,7 +348,7 @@ ENTRY(twofish_ecb_enc_8way) ret; ENDPROC(twofish_ecb_enc_8way) -ENTRY(twofish_ecb_dec_8way) +RAP_ENTRY(twofish_ecb_dec_8way) /* input: * %rdi: ctx, CTX * %rsi: dst @@ -368,7 +368,7 @@ ENTRY(twofish_ecb_dec_8way) ret; ENDPROC(twofish_ecb_dec_8way) -ENTRY(twofish_cbc_dec_8way) +RAP_ENTRY(twofish_cbc_dec_8way) /* input: * %rdi: ctx, CTX * %rsi: dst @@ -393,7 +393,7 @@ ENTRY(twofish_cbc_dec_8way) ret; ENDPROC(twofish_cbc_dec_8way) -ENTRY(twofish_ctr_8way) +RAP_ENTRY(twofish_ctr_8way) /* input: * %rdi: ctx, CTX * %rsi: dst @@ -420,7 +420,7 @@ ENTRY(twofish_ctr_8way) ret; ENDPROC(twofish_ctr_8way) -ENTRY(twofish_xts_enc_8way) +RAP_ENTRY(twofish_xts_enc_8way) /* input: * %rdi: ctx, CTX * %rsi: dst @@ -444,7 +444,7 @@ ENTRY(twofish_xts_enc_8way) ret; ENDPROC(twofish_xts_enc_8way) -ENTRY(twofish_xts_dec_8way) +RAP_ENTRY(twofish_xts_dec_8way) /* input: * %rdi: ctx, CTX * %rsi: dst diff --git a/arch/x86/crypto/twofish-i586-asm_32.S b/arch/x86/crypto/twofish-i586-asm_32.S index 694ea45..f2c1418 100644 --- a/arch/x86/crypto/twofish-i586-asm_32.S +++ b/arch/x86/crypto/twofish-i586-asm_32.S @@ -220,7 +220,7 @@ xor %esi, d ## D;\ ror $1, d ## D; -ENTRY(twofish_enc_blk) +RAP_ENTRY(twofish_enc_blk) push %ebp /* save registers according to calling convention*/ push %ebx push %esi @@ -276,7 +276,7 @@ ENTRY(twofish_enc_blk) ret ENDPROC(twofish_enc_blk) -ENTRY(twofish_dec_blk) +RAP_ENTRY(twofish_dec_blk) push %ebp /* save registers according to calling convention*/ push %ebx push %esi diff --git a/arch/x86/crypto/twofish-x86_64-asm_64-3way.S b/arch/x86/crypto/twofish-x86_64-asm_64-3way.S index 1c3b7ce..edf12ec 100644 --- a/arch/x86/crypto/twofish-x86_64-asm_64-3way.S +++ b/arch/x86/crypto/twofish-x86_64-asm_64-3way.S @@ -272,7 +272,7 @@ ENTRY(__twofish_enc_blk_3way) ret; ENDPROC(__twofish_enc_blk_3way) -ENTRY(twofish_dec_blk_3way) +RAP_ENTRY(twofish_dec_blk_3way) /* input: * %rdi: ctx, CTX * %rsi: dst diff --git a/arch/x86/crypto/twofish-x86_64-asm_64.S b/arch/x86/crypto/twofish-x86_64-asm_64.S index a350c99..32a5e60 100644 --- a/arch/x86/crypto/twofish-x86_64-asm_64.S +++ b/arch/x86/crypto/twofish-x86_64-asm_64.S @@ -215,7 +215,7 @@ xor %r8d, d ## D;\ ror $1, d ## D; -ENTRY(twofish_enc_blk) +RAP_ENTRY(twofish_enc_blk) pushq R1 /* %rdi contains the ctx address */ @@ -268,7 +268,7 @@ ENTRY(twofish_enc_blk) ret ENDPROC(twofish_enc_blk) -ENTRY(twofish_dec_blk) +RAP_ENTRY(twofish_dec_blk) pushq R1 /* %rdi contains the ctx address */ diff --git a/arch/x86/entry/Makefile b/arch/x86/entry/Makefile index 9976fce..bf5f3e0 100644 --- a/arch/x86/entry/Makefile +++ b/arch/x86/entry/Makefile @@ -15,3 +15,5 @@ obj-y += vsyscall/ obj-$(CONFIG_IA32_EMULATION) += entry_64_compat.o syscall_32.o +CFLAGS_REMOVE_syscall_32.o = $(RAP_PLUGIN_ABS_CFLAGS) +CFLAGS_REMOVE_syscall_64.o = $(RAP_PLUGIN_ABS_CFLAGS) diff --git a/arch/x86/entry/common.c b/arch/x86/entry/common.c index b0cd306..f384da6 100644 --- a/arch/x86/entry/common.c +++ b/arch/x86/entry/common.c @@ -279,9 +279,30 @@ __visible void do_syscall_64(struct pt_regs *regs) */ if (likely((nr & __SYSCALL_MASK) < NR_syscalls)) { nr = array_index_nospec(nr & __SYSCALL_MASK, NR_syscalls); + +#ifdef CONFIG_PAX_RAP + asm volatile("movq %[param1],%%rdi\n\t" + "movq %[param2],%%rsi\n\t" + "movq %[param3],%%rdx\n\t" + "movq %[param4],%%rcx\n\t" + "movq %[param5],%%r8\n\t" + "movq %[param6],%%r9\n\t" + "call *%P[syscall]\n\t" + "mov %%rax,%[result]\n\t" + : [result] "=m" (regs->ax) + : [syscall] "m" (sys_call_table[nr]), + [param1] "m" (regs->di), + [param2] "m" (regs->si), + [param3] "m" (regs->dx), + [param4] "m" (regs->r10), + [param5] "m" (regs->r8), + [param6] "m" (regs->r9) + : "ax", "di", "si", "dx", "cx", "r8", "r9", "r10", "r11", "memory"); +#else regs->ax = sys_call_table[nr]( regs->di, regs->si, regs->dx, regs->r10, regs->r8, regs->r9); +#endif } syscall_return_slowpath(regs); @@ -319,10 +339,51 @@ static __always_inline void do_syscall_32_irqs_on(struct pt_regs *regs) * the high bits are zero. Make sure we zero-extend all * of the args. */ +#ifdef CONFIG_PAX_RAP +#ifdef CONFIG_X86_64 + asm volatile("movl %[param1],%%edi\n\t" + "movl %[param2],%%esi\n\t" + "movl %[param3],%%edx\n\t" + "movl %[param4],%%ecx\n\t" + "movl %[param5],%%r8d\n\t" + "movl %[param6],%%r9d\n\t" + "call *%P[syscall]\n\t" + "mov %%rax,%[result]\n\t" + : [result] "=m" (regs->ax) + : [syscall] "m" (ia32_sys_call_table[nr]), + [param1] "m" (regs->bx), + [param2] "m" (regs->cx), + [param3] "m" (regs->dx), + [param4] "m" (regs->si), + [param5] "m" (regs->di), + [param6] "m" (regs->bp) + : "ax", "di", "si", "dx", "cx", "r8", "r9", "r10", "r11", "memory"); +#else + asm volatile("pushl %[param6]\n\t" + "pushl %[param5]\n\t" + "pushl %[param4]\n\t" + "pushl %[param3]\n\t" + "pushl %[param2]\n\t" + "pushl %[param1]\n\t" + "call *%P[syscall]\n\t" + "addl $6*8,%%esp\n\t" + "mov %%eax,%[result]\n\t" + : [result] "=m" (regs->ax) + : [syscall] "m" (ia32_sys_call_table[nr]), + [param1] "m" (regs->bx), + [param2] "m" (regs->cx), + [param3] "m" (regs->dx), + [param4] "m" (regs->si), + [param5] "m" (regs->di), + [param6] "m" (regs->bp) + : "ax", "dx", "cx", "memory"); +#endif +#else regs->ax = ia32_sys_call_table[nr]( (unsigned int)regs->bx, (unsigned int)regs->cx, (unsigned int)regs->dx, (unsigned int)regs->si, (unsigned int)regs->di, (unsigned int)regs->bp); +#endif } syscall_return_slowpath(regs); diff --git a/arch/x86/include/asm/fixmap.h b/arch/x86/include/asm/fixmap.h index 8554f96..6c58add 100644 --- a/arch/x86/include/asm/fixmap.h +++ b/arch/x86/include/asm/fixmap.h @@ -142,7 +142,7 @@ extern pte_t *kmap_pte; extern pte_t *pkmap_page_table; void __native_set_fixmap(enum fixed_addresses idx, pte_t pte); -void native_set_fixmap(enum fixed_addresses idx, +void native_set_fixmap(unsigned int idx, phys_addr_t phys, pgprot_t flags); #ifndef CONFIG_PARAVIRT diff --git a/arch/x86/include/asm/module.h b/arch/x86/include/asm/module.h index e3b7819..f1de876 100644 --- a/arch/x86/include/asm/module.h +++ b/arch/x86/include/asm/module.h @@ -5,6 +5,7 @@ #ifdef CONFIG_X86_64 /* X86_64 does not define MODULE_PROC_FAMILY */ +#define MODULE_PROC_FAMILY "" #elif defined CONFIG_M486 #define MODULE_PROC_FAMILY "486 " #elif defined CONFIG_M586 @@ -57,8 +58,12 @@ #error unknown processor family #endif -#ifdef CONFIG_X86_32 -# define MODULE_ARCH_VERMAGIC MODULE_PROC_FAMILY +#ifdef CONFIG_PAX_RAP +#define MODULE_PAX_RAP "RAP " +#else +#define MODULE_PAX_RAP "" #endif +#define MODULE_ARCH_VERMAGIC MODULE_PROC_FAMILY MODULE_PAX_RAP + #endif /* _ASM_X86_MODULE_H */ diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c index 70b8c46..7729875 100644 --- a/arch/x86/kernel/cpu/vmware.c +++ b/arch/x86/kernel/cpu/vmware.c @@ -262,11 +262,17 @@ static __init int activate_jump_labels(void) } arch_initcall(activate_jump_labels); +/* + * No need for any "IO delay" on VMware hypervisor + */ +static void vmware_io_delay(void) +{ +} static void __init vmware_paravirt_ops_setup(void) { pv_info.name = "VMware hypervisor"; - pv_cpu_ops.io_delay = paravirt_nop; + pv_cpu_ops.io_delay = vmware_io_delay; if (vmware_tsc_khz == 0) return; diff --git a/arch/x86/kernel/mcount_64.S b/arch/x86/kernel/mcount_64.S index 7b0d3da..3f0b195 100644 --- a/arch/x86/kernel/mcount_64.S +++ b/arch/x86/kernel/mcount_64.S @@ -186,7 +186,7 @@ GLOBAL(ftrace_graph_call) #endif /* This is weak to keep gas from relaxing the jumps */ -WEAK(ftrace_stub) +RAP_WEAK(ftrace_stub) retq END(ftrace_caller) diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c index bd4e3d4..d0f53cc 100644 --- a/arch/x86/kernel/traps.c +++ b/arch/x86/kernel/traps.c @@ -189,6 +189,10 @@ do_trap_no_signal(struct task_struct *tsk, int trapnr, char *str, if (!fixup_exception(regs, trapnr)) { tsk->thread.error_code = error_code; tsk->thread.trap_nr = trapnr; +#ifdef CONFIG_PAX_RAP + if (trapnr == X86_TRAP_UD) + str = "PAX: overwritten function pointer or return address detected"; +#endif die(str, regs, error_code); } return 0; diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c index 3feec5a..66fc0b0 100644 --- a/arch/x86/mm/pgtable.c +++ b/arch/x86/mm/pgtable.c @@ -542,7 +542,7 @@ void __native_set_fixmap(enum fixed_addresses idx, pte_t pte) fixmaps_set++; } -void native_set_fixmap(enum fixed_addresses idx, phys_addr_t phys, +void native_set_fixmap(unsigned int idx, phys_addr_t phys, pgprot_t flags) { __native_set_fixmap(idx, pfn_pte(phys >> PAGE_SHIFT, flags)); diff --git a/arch/x86/oprofile/nmi_int.c b/arch/x86/oprofile/nmi_int.c index 28c0412..56accd4 100644 --- a/arch/x86/oprofile/nmi_int.c +++ b/arch/x86/oprofile/nmi_int.c @@ -615,7 +615,7 @@ enum __force_cpu_type { static int force_cpu_type; -static int set_cpu_type(const char *str, struct kernel_param *kp) +static int set_cpu_type(const char *str, const struct kernel_param *kp) { if (!strcmp(str, "timer")) { force_cpu_type = timer; diff --git a/arch/x86/xen/xen-asm.S b/arch/x86/xen/xen-asm.S index eff224d..3da86c6 100644 --- a/arch/x86/xen/xen-asm.S +++ b/arch/x86/xen/xen-asm.S @@ -23,7 +23,7 @@ * event status with one and operation. If there are pending events, * then enter the hypervisor to get them handled. */ -ENTRY(xen_irq_enable_direct) +RAP_ENTRY(xen_irq_enable_direct) FRAME_BEGIN /* Unmask events */ movb $0, PER_CPU_VAR(xen_vcpu_info) + XEN_vcpu_info_mask @@ -51,7 +51,7 @@ ENDPATCH(xen_irq_enable_direct) * Disabling events is simply a matter of making the event mask * non-zero. */ -ENTRY(xen_irq_disable_direct) +RAP_ENTRY(xen_irq_disable_direct) movb $1, PER_CPU_VAR(xen_vcpu_info) + XEN_vcpu_info_mask ENDPATCH(xen_irq_disable_direct) ret @@ -67,7 +67,7 @@ ENDPATCH(xen_irq_disable_direct) * undefined. We need to toggle the state of the bit, because Xen and * x86 use opposite senses (mask vs enable). */ -ENTRY(xen_save_fl_direct) +RAP_ENTRY(xen_save_fl_direct) testb $0xff, PER_CPU_VAR(xen_vcpu_info) + XEN_vcpu_info_mask setz %ah addb %ah, %ah @@ -84,7 +84,7 @@ ENDPATCH(xen_save_fl_direct) * interrupt mask state, it checks for unmasked pending events and * enters the hypervisor to get them delivered if so. */ -ENTRY(xen_restore_fl_direct) +RAP_ENTRY(xen_restore_fl_direct) FRAME_BEGIN #ifdef CONFIG_X86_64 testw $X86_EFLAGS_IF, %di diff --git a/drivers/acpi/button.c b/drivers/acpi/button.c index e19f530..cc2d296 100644 --- a/drivers/acpi/button.c +++ b/drivers/acpi/button.c @@ -556,7 +556,7 @@ static int acpi_button_remove(struct acpi_device *device) return 0; } -static int param_set_lid_init_state(const char *val, struct kernel_param *kp) +static int param_set_lid_init_state(const char *val, const struct kernel_param *kp) { int result = 0; @@ -574,7 +574,7 @@ static int param_set_lid_init_state(const char *val, struct kernel_param *kp) return result; } -static int param_get_lid_init_state(char *buffer, struct kernel_param *kp) +static int param_get_lid_init_state(char *buffer, const struct kernel_param *kp) { switch (lid_init_state) { case ACPI_BUTTON_LID_INIT_OPEN: diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c index 48e19d0..6a57da4 100644 --- a/drivers/acpi/ec.c +++ b/drivers/acpi/ec.c @@ -1910,7 +1910,7 @@ static const struct dev_pm_ops acpi_ec_pm = { SET_SYSTEM_SLEEP_PM_OPS(acpi_ec_suspend, acpi_ec_resume) }; -static int param_set_event_clearing(const char *val, struct kernel_param *kp) +static int param_set_event_clearing(const char *val, const struct kernel_param *kp) { int result = 0; @@ -1928,7 +1928,7 @@ static int param_set_event_clearing(const char *val, struct kernel_param *kp) return result; } -static int param_get_event_clearing(char *buffer, struct kernel_param *kp) +static int param_get_event_clearing(char *buffer, const struct kernel_param *kp) { switch (ec_event_clearing) { case ACPI_EC_EVT_TIMING_STATUS: diff --git a/drivers/acpi/sysfs.c b/drivers/acpi/sysfs.c index 703c26e..9636a12 100644 --- a/drivers/acpi/sysfs.c +++ b/drivers/acpi/sysfs.c @@ -227,7 +227,7 @@ module_param_cb(trace_method_name, ¶m_ops_trace_method, &trace_method_name, module_param_cb(trace_debug_layer, ¶m_ops_trace_attrib, &acpi_gbl_trace_dbg_layer, 0644); module_param_cb(trace_debug_level, ¶m_ops_trace_attrib, &acpi_gbl_trace_dbg_level, 0644); -static int param_set_trace_state(const char *val, struct kernel_param *kp) +static int param_set_trace_state(const char *val, const struct kernel_param *kp) { acpi_status status; const char *method = trace_method_name; @@ -263,7 +263,7 @@ static int param_set_trace_state(const char *val, struct kernel_param *kp) return 0; } -static int param_get_trace_state(char *buffer, struct kernel_param *kp) +static int param_get_trace_state(char *buffer, const struct kernel_param *kp) { if (!(acpi_gbl_trace_flags & ACPI_TRACE_ENABLED)) return sprintf(buffer, "disable"); @@ -292,7 +292,7 @@ MODULE_PARM_DESC(aml_debug_output, "To enable/disable the ACPI Debug Object output."); /* /sys/module/acpi/parameters/acpica_version */ -static int param_get_acpica_version(char *buffer, struct kernel_param *kp) +static int param_get_acpica_version(char *buffer, const struct kernel_param *kp) { int result; diff --git a/drivers/char/ipmi/ipmi_poweroff.c b/drivers/char/ipmi/ipmi_poweroff.c index 9f2e3be..676c910 100644 --- a/drivers/char/ipmi/ipmi_poweroff.c +++ b/drivers/char/ipmi/ipmi_poweroff.c @@ -66,7 +66,7 @@ static void (*specific_poweroff_func)(ipmi_user_t user); /* Holds the old poweroff function so we can restore it on removal. */ static void (*old_poweroff_func)(void); -static int set_param_ifnum(const char *val, struct kernel_param *kp) +static int set_param_ifnum(const char *val, const struct kernel_param *kp) { int rv = param_set_int(val, kp); if (rv) diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c index a112c01..4f0b0f2 100644 --- a/drivers/char/ipmi/ipmi_si_intf.c +++ b/drivers/char/ipmi/ipmi_si_intf.c @@ -1344,7 +1344,7 @@ static unsigned int num_slave_addrs; #define IPMI_MEM_ADDR_SPACE 1 static const char * const addr_space_to_str[] = { "i/o", "mem" }; -static int hotmod_handler(const char *val, struct kernel_param *kp); +static int hotmod_handler(const char *val, const struct kernel_param *kp); module_param_call(hotmod, hotmod_handler, NULL, NULL, 0200); MODULE_PARM_DESC(hotmod, "Add and remove interfaces. See" @@ -1814,7 +1814,7 @@ static struct smi_info *smi_info_alloc(void) return info; } -static int hotmod_handler(const char *val, struct kernel_param *kp) +static int hotmod_handler(const char *val, const struct kernel_param *kp) { char *str = kstrdup(val, GFP_KERNEL); int rv; diff --git a/drivers/char/tpm/tpm-chip.c b/drivers/char/tpm/tpm-chip.c index e595013..9653af2 100644 --- a/drivers/char/tpm/tpm-chip.c +++ b/drivers/char/tpm/tpm-chip.c @@ -196,6 +196,11 @@ struct tpm_chip *tpm_chip_alloc(struct device *dev, } EXPORT_SYMBOL_GPL(tpm_chip_alloc); +static void tpm_put_device(void *dev) +{ + put_device(dev); +} + /** * tpmm_chip_alloc() - allocate a new struct tpm_chip instance * @pdev: parent device to which the chip is associated @@ -213,9 +218,7 @@ struct tpm_chip *tpmm_chip_alloc(struct device *pdev, if (IS_ERR(chip)) return chip; - rc = devm_add_action_or_reset(pdev, - (void (*)(void *)) put_device, - &chip->dev); + rc = devm_add_action_or_reset(pdev, tpm_put_device, &chip->dev); if (rc) return ERR_PTR(rc); diff --git a/drivers/edac/edac_mc_sysfs.c b/drivers/edac/edac_mc_sysfs.c index 4e0f8e7..bea71fb 100644 --- a/drivers/edac/edac_mc_sysfs.c +++ b/drivers/edac/edac_mc_sysfs.c @@ -50,7 +50,7 @@ int edac_mc_get_poll_msec(void) return edac_mc_poll_msec; } -static int edac_set_poll_msec(const char *val, struct kernel_param *kp) +static int edac_set_poll_msec(const char *val, const struct kernel_param *kp) { unsigned long l; int ret; diff --git a/drivers/firmware/dmi-id.c b/drivers/firmware/dmi-id.c index 44c0139..9cbd4a3 100644 --- a/drivers/firmware/dmi-id.c +++ b/drivers/firmware/dmi-id.c @@ -159,9 +159,14 @@ static int dmi_dev_uevent(struct device *dev, struct kobj_uevent_env *env) return 0; } +static void dmi_dev_release(struct device *dev) +{ + kfree(dev); +} + static struct class dmi_class = { .name = "dmi", - .dev_release = (void(*)(struct device *)) kfree, + .dev_release = dmi_dev_release, .dev_uevent = dmi_dev_uevent, }; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadow.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadow.c index 7deb81b..bb22bc2 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadow.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadow.c @@ -154,11 +154,16 @@ shadow_fw_init(struct nvkm_bios *bios, const char *name) return (void *)fw; } +static void shadow_fw_fini(void *fw) +{ + release_firmware(fw); +} + static const struct nvbios_source shadow_fw = { .name = "firmware", .init = shadow_fw_init, - .fini = (void(*)(void *))release_firmware, + .fini = shadow_fw_fini, .read = shadow_fw_read, .rw = false, }; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowpci.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowpci.c index 9b91da0..b3fa90d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowpci.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/shadowpci.c @@ -111,11 +111,16 @@ platform_init(struct nvkm_bios *bios, const char *name) return ERR_PTR(ret); } +static void platform_fini(void *data) +{ + kfree(data); +} + const struct nvbios_source nvbios_platform = { .name = "PLATFORM", .init = platform_init, - .fini = (void(*)(void *))kfree, + .fini = platform_fini, .read = pcirom_read, .rw = true, }; diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/secboot/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/secboot/priv.h index a9a8a0e..2ad6d62 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/secboot/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/secboot/priv.h @@ -226,8 +226,8 @@ struct gm200_secboot_func { int gm200_secboot_init(struct nvkm_secboot *); void *gm200_secboot_dtor(struct nvkm_secboot *); -int gm200_secboot_reset(struct nvkm_secboot *, u32); -int gm200_secboot_start(struct nvkm_secboot *, u32); +int gm200_secboot_reset(struct nvkm_secboot *, enum nvkm_secboot_falcon); +int gm200_secboot_start(struct nvkm_secboot *, enum nvkm_secboot_falcon); int gm20x_secboot_prepare_blobs(struct gm200_secboot *); diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c index 4388dde..f089485 100644 --- a/drivers/gpu/drm/radeon/radeon_kms.c +++ b/drivers/gpu/drm/radeon/radeon_kms.c @@ -830,7 +830,7 @@ u32 radeon_get_vblank_counter_kms(struct drm_device *dev, unsigned int pipe) * Enable the interrupt on the requested crtc (all asics). * Returns 0 on success, -EINVAL on failure. */ -int radeon_enable_vblank_kms(struct drm_device *dev, int crtc) +int radeon_enable_vblank_kms(struct drm_device *dev, unsigned int crtc) { struct radeon_device *rdev = dev->dev_private; unsigned long irqflags; @@ -856,7 +856,7 @@ int radeon_enable_vblank_kms(struct drm_device *dev, int crtc) * * Disable the interrupt on the requested crtc (all asics). */ -void radeon_disable_vblank_kms(struct drm_device *dev, int crtc) +void radeon_disable_vblank_kms(struct drm_device *dev, unsigned int crtc) { struct radeon_device *rdev = dev->dev_private; unsigned long irqflags; @@ -885,7 +885,7 @@ void radeon_disable_vblank_kms(struct drm_device *dev, int crtc) * scanout position. (all asics). * Returns postive status flags on success, negative error on failure. */ -int radeon_get_vblank_timestamp_kms(struct drm_device *dev, int crtc, +int radeon_get_vblank_timestamp_kms(struct drm_device *dev, unsigned int crtc, int *max_error, struct timeval *vblank_time, unsigned flags) diff --git a/drivers/hid/hid-magicmouse.c b/drivers/hid/hid-magicmouse.c index 20b40ad..7eb5632 100644 --- a/drivers/hid/hid-magicmouse.c +++ b/drivers/hid/hid-magicmouse.c @@ -34,7 +34,7 @@ module_param(emulate_scroll_wheel, bool, 0644); MODULE_PARM_DESC(emulate_scroll_wheel, "Emulate a scroll wheel"); static unsigned int scroll_speed = 32; -static int param_set_scroll_speed(const char *val, struct kernel_param *kp) { +static int param_set_scroll_speed(const char *val, const struct kernel_param *kp) { unsigned long speed; if (!val || kstrtoul(val, 0, &speed) || speed > 63) return -EINVAL; diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c index d127ace..6ee866f 100644 --- a/drivers/ide/ide.c +++ b/drivers/ide/ide.c @@ -244,7 +244,7 @@ struct chs_geom { static unsigned int ide_disks; static struct chs_geom ide_disks_chs[MAX_HWIFS * MAX_DRIVES]; -static int ide_set_disk_chs(const char *str, struct kernel_param *kp) +static int ide_set_disk_chs(const char *str, const struct kernel_param *kp) { unsigned int a, b, c = 0, h = 0, s = 0, i, j = 1; @@ -328,7 +328,7 @@ static void ide_dev_apply_params(ide_drive_t *drive, u8 unit) static unsigned int ide_ignore_cable; -static int ide_set_ignore_cable(const char *s, struct kernel_param *kp) +static int ide_set_ignore_cable(const char *s, const struct kernel_param *kp) { int i, j = 1; diff --git a/drivers/md/md.c b/drivers/md/md.c index 24925f2..c92cce0 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -5095,7 +5095,7 @@ static struct kobject *md_probe(dev_t dev, int *part, void *data) return NULL; } -static int add_named_array(const char *val, struct kernel_param *kp) +static int add_named_array(const char *val, const struct kernel_param *kp) { /* val must be "md_*" where * is not all digits. * We allocate an array with a large free minor number, and @@ -8960,11 +8960,11 @@ static __exit void md_exit(void) subsys_initcall(md_init); module_exit(md_exit) -static int get_ro(char *buffer, struct kernel_param *kp) +static int get_ro(char *buffer, const struct kernel_param *kp) { return sprintf(buffer, "%d", start_readonly); } -static int set_ro(const char *val, struct kernel_param *kp) +static int set_ro(const char *val, const struct kernel_param *kp) { return kstrtouint(val, 10, (unsigned int *)&start_readonly); } diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c index 302e284..93781d6 100644 --- a/drivers/media/usb/uvc/uvc_driver.c +++ b/drivers/media/usb/uvc/uvc_driver.c @@ -2078,7 +2078,7 @@ static int uvc_reset_resume(struct usb_interface *intf) * Module parameters */ -static int uvc_clock_param_get(char *buffer, struct kernel_param *kp) +static int uvc_clock_param_get(char *buffer, const struct kernel_param *kp) { if (uvc_clock_param == CLOCK_MONOTONIC) return sprintf(buffer, "CLOCK_MONOTONIC"); @@ -2086,7 +2086,7 @@ static int uvc_clock_param_get(char *buffer, struct kernel_param *kp) return sprintf(buffer, "CLOCK_REALTIME"); } -static int uvc_clock_param_set(const char *val, struct kernel_param *kp) +static int uvc_clock_param_set(const char *val, const struct kernel_param *kp) { if (strncasecmp(val, "clock_", strlen("clock_")) == 0) val += strlen("clock_"); diff --git a/drivers/message/fusion/mptbase.c b/drivers/message/fusion/mptbase.c index 89c7ed1..1cdab6d 100644 --- a/drivers/message/fusion/mptbase.c +++ b/drivers/message/fusion/mptbase.c @@ -99,7 +99,7 @@ module_param(mpt_channel_mapping, int, 0); MODULE_PARM_DESC(mpt_channel_mapping, " Mapping id's to channels (default=0)"); static int mpt_debug_level; -static int mpt_set_debug_level(const char *val, struct kernel_param *kp); +static int mpt_set_debug_level(const char *val, const struct kernel_param *kp); module_param_call(mpt_debug_level, mpt_set_debug_level, param_get_int, &mpt_debug_level, 0600); MODULE_PARM_DESC(mpt_debug_level, @@ -242,7 +242,7 @@ pci_enable_io_access(struct pci_dev *pdev) pci_write_config_word(pdev, PCI_COMMAND, command_reg); } -static int mpt_set_debug_level(const char *val, struct kernel_param *kp) +static int mpt_set_debug_level(const char *val, const struct kernel_param *kp) { int ret = param_set_int(val, kp); MPT_ADAPTER *ioc; diff --git a/drivers/misc/kgdbts.c b/drivers/misc/kgdbts.c index 99635dd..fd78533 100644 --- a/drivers/misc/kgdbts.c +++ b/drivers/misc/kgdbts.c @@ -1130,7 +1130,7 @@ static void kgdbts_put_char(u8 chr) ts.run_test(0, chr); } -static int param_set_kgdbts_var(const char *kmessage, struct kernel_param *kp) +static int param_set_kgdbts_var(const char *kmessage, const struct kernel_param *kp) { int len = strlen(kmessage); diff --git a/drivers/mtd/devices/block2mtd.c b/drivers/mtd/devices/block2mtd.c index 7c887f1..62fd690 100644 --- a/drivers/mtd/devices/block2mtd.c +++ b/drivers/mtd/devices/block2mtd.c @@ -431,7 +431,7 @@ static int block2mtd_setup2(const char *val) } -static int block2mtd_setup(const char *val, struct kernel_param *kp) +static int block2mtd_setup(const char *val, const struct kernel_param *kp) { #ifdef MODULE return block2mtd_setup2(val); diff --git a/drivers/mtd/devices/phram.c b/drivers/mtd/devices/phram.c index 8b66e52..7287696 100644 --- a/drivers/mtd/devices/phram.c +++ b/drivers/mtd/devices/phram.c @@ -266,7 +266,7 @@ static int phram_setup(const char *val) return ret; } -static int phram_param_call(const char *val, struct kernel_param *kp) +static int phram_param_call(const char *val, const struct kernel_param *kp) { #ifdef MODULE return phram_setup(val); diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c index 85d54f3..e1da78f 100644 --- a/drivers/mtd/ubi/build.c +++ b/drivers/mtd/ubi/build.c @@ -1389,7 +1389,7 @@ static int __init bytes_str_to_int(const char *str) * This function returns zero in case of success and a negative error code in * case of error. */ -static int __init ubi_mtd_param_parse(const char *val, struct kernel_param *kp) +static int __init ubi_mtd_param_parse(const char *val, const struct kernel_param *kp) { int i, len; struct mtd_dev_param *p; diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c index 1fb8010..0a8dc20 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c @@ -5621,7 +5621,7 @@ static int bnx2x_get_link_speed_duplex(struct bnx2x_phy *phy, return 0; } -static int bnx2x_link_settings_status(struct bnx2x_phy *phy, +static u8 bnx2x_link_settings_status(struct bnx2x_phy *phy, struct link_params *params, struct link_vars *vars) { @@ -5695,7 +5695,7 @@ static int bnx2x_link_settings_status(struct bnx2x_phy *phy, return rc; } -static int bnx2x_warpcore_read_status(struct bnx2x_phy *phy, +static u8 bnx2x_warpcore_read_status(struct bnx2x_phy *phy, struct link_params *params, struct link_vars *vars) { @@ -7436,7 +7436,7 @@ static void bnx2x_8073_specific_func(struct bnx2x_phy *phy, } } -static int bnx2x_8073_config_init(struct bnx2x_phy *phy, +static void bnx2x_8073_config_init(struct bnx2x_phy *phy, struct link_params *params, struct link_vars *vars) { @@ -7499,7 +7499,7 @@ static int bnx2x_8073_config_init(struct bnx2x_phy *phy, if (params->loopback_mode == LOOPBACK_EXT) { bnx2x_807x_force_10G(bp, phy); DP(NETIF_MSG_LINK, "Forced speed 10G on 807X\n"); - return 0; + return; } else { bnx2x_cl45_write(bp, phy, MDIO_PMA_DEVAD, MDIO_PMA_REG_BCM_CTRL, 0x0002); @@ -7581,7 +7581,6 @@ static int bnx2x_8073_config_init(struct bnx2x_phy *phy, bnx2x_cl45_write(bp, phy, MDIO_AN_DEVAD, MDIO_AN_REG_CTRL, 0x1200); DP(NETIF_MSG_LINK, "807x Autoneg Restart: Advertise 1G=%x, 10G=%x\n", ((val & (1<<5)) > 0), ((val & (1<<7)) > 0)); - return 0; } static u8 bnx2x_8073_read_status(struct bnx2x_phy *phy, @@ -7748,7 +7747,7 @@ static void bnx2x_8073_link_reset(struct bnx2x_phy *phy, /******************************************************************/ /* BCM8705 PHY SECTION */ /******************************************************************/ -static int bnx2x_8705_config_init(struct bnx2x_phy *phy, +static void bnx2x_8705_config_init(struct bnx2x_phy *phy, struct link_params *params, struct link_vars *vars) { @@ -7772,7 +7771,6 @@ static int bnx2x_8705_config_init(struct bnx2x_phy *phy, MDIO_WIS_DEVAD, MDIO_WIS_REG_LASI_CNTL, 0x1); /* BCM8705 doesn't have microcode, hence the 0 */ bnx2x_save_spirom_version(bp, params->port, params->shmem_base, 0); - return 0; } static u8 bnx2x_8705_read_status(struct bnx2x_phy *phy, @@ -8959,7 +8957,7 @@ static u8 bnx2x_8706_8726_read_status(struct bnx2x_phy *phy, /******************************************************************/ /* BCM8706 PHY SECTION */ /******************************************************************/ -static u8 bnx2x_8706_config_init(struct bnx2x_phy *phy, +static void bnx2x_8706_config_init(struct bnx2x_phy *phy, struct link_params *params, struct link_vars *vars) { @@ -9061,11 +9059,9 @@ static u8 bnx2x_8706_config_init(struct bnx2x_phy *phy, bnx2x_cl45_write(bp, phy, MDIO_PMA_DEVAD, MDIO_PMA_REG_DIGITAL_CTRL, tmp1); } - - return 0; } -static int bnx2x_8706_read_status(struct bnx2x_phy *phy, +static u8 bnx2x_8706_read_status(struct bnx2x_phy *phy, struct link_params *params, struct link_vars *vars) { @@ -9142,7 +9138,7 @@ static u8 bnx2x_8726_read_status(struct bnx2x_phy *phy, } -static int bnx2x_8726_config_init(struct bnx2x_phy *phy, +static void bnx2x_8726_config_init(struct bnx2x_phy *phy, struct link_params *params, struct link_vars *vars) { @@ -9223,8 +9219,6 @@ static int bnx2x_8726_config_init(struct bnx2x_phy *phy, phy->tx_preemphasis[1]); } - return 0; - } static void bnx2x_8726_link_reset(struct bnx2x_phy *phy, @@ -9360,7 +9354,7 @@ static void bnx2x_8727_config_speed(struct bnx2x_phy *phy, } } -static int bnx2x_8727_config_init(struct bnx2x_phy *phy, +static void bnx2x_8727_config_init(struct bnx2x_phy *phy, struct link_params *params, struct link_vars *vars) { @@ -9442,8 +9436,6 @@ static int bnx2x_8727_config_init(struct bnx2x_phy *phy, MDIO_PMA_DEVAD, MDIO_PMA_REG_PHY_IDENTIFIER, (tmp2 & 0x7fff)); } - - return 0; } static void bnx2x_8727_handle_mod_abs(struct bnx2x_phy *phy, @@ -10018,7 +10010,7 @@ static int bnx2x_848xx_cmn_config_init(struct bnx2x_phy *phy, return 0; } -static int bnx2x_8481_config_init(struct bnx2x_phy *phy, +static void bnx2x_8481_config_init(struct bnx2x_phy *phy, struct link_params *params, struct link_vars *vars) { @@ -10032,7 +10024,7 @@ static int bnx2x_8481_config_init(struct bnx2x_phy *phy, bnx2x_wait_reset_complete(bp, phy, params); bnx2x_cl45_write(bp, phy, MDIO_PMA_DEVAD, MDIO_PMA_REG_CTRL, 1<<15); - return bnx2x_848xx_cmn_config_init(phy, params, vars); + bnx2x_848xx_cmn_config_init(phy, params, vars); } #define PHY848xx_CMDHDLR_WAIT 300 @@ -10282,7 +10274,7 @@ static u8 bnx2x_84833_get_reset_gpios(struct bnx2x *bp, return reset_gpios; } -static int bnx2x_84833_hw_reset_phy(struct bnx2x_phy *phy, +static void bnx2x_84833_hw_reset_phy(struct bnx2x_phy *phy, struct link_params *params) { struct bnx2x *bp = params->bp; @@ -10311,8 +10303,6 @@ static int bnx2x_84833_hw_reset_phy(struct bnx2x_phy *phy, udelay(10); DP(NETIF_MSG_LINK, "84833 hw reset on pin values 0x%x\n", reset_gpios); - - return 0; } static int bnx2x_8483x_disable_eee(struct bnx2x_phy *phy, @@ -10355,7 +10345,7 @@ static int bnx2x_8483x_enable_eee(struct bnx2x_phy *phy, } #define PHY84833_CONSTANT_LATENCY 1193 -static int bnx2x_848x3_config_init(struct bnx2x_phy *phy, +static void bnx2x_848x3_config_init(struct bnx2x_phy *phy, struct link_params *params, struct link_vars *vars) { @@ -10502,7 +10492,7 @@ static int bnx2x_848x3_config_init(struct bnx2x_phy *phy, if (rc) { DP(NETIF_MSG_LINK, "Failed to configure EEE timers\n"); bnx2x_8483x_disable_eee(phy, params, vars); - return rc; + return; } if ((phy->req_duplex == DUPLEX_FULL) && @@ -10514,7 +10504,7 @@ static int bnx2x_848x3_config_init(struct bnx2x_phy *phy, rc = bnx2x_8483x_disable_eee(phy, params, vars); if (rc) { DP(NETIF_MSG_LINK, "Failed to set EEE advertisement\n"); - return rc; + return; } } else { vars->eee_status &= ~SHMEM_EEE_SUPPORTED_MASK; @@ -10553,7 +10543,6 @@ static int bnx2x_848x3_config_init(struct bnx2x_phy *phy, MDIO_84833_TOP_CFG_XGPHY_STRAP1, (u16)~MDIO_84833_SUPER_ISOLATE); } - return rc; } static u8 bnx2x_848xx_read_status(struct bnx2x_phy *phy, @@ -11113,7 +11102,7 @@ static void bnx2x_54618se_specific_func(struct bnx2x_phy *phy, } } -static int bnx2x_54618se_config_init(struct bnx2x_phy *phy, +static void bnx2x_54618se_config_init(struct bnx2x_phy *phy, struct link_params *params, struct link_vars *vars) { @@ -11315,8 +11304,6 @@ static int bnx2x_54618se_config_init(struct bnx2x_phy *phy, bnx2x_cl22_write(bp, phy, MDIO_PMA_REG_CTRL, autoneg_val); - - return 0; } @@ -11540,7 +11527,7 @@ static void bnx2x_7101_config_loopback(struct bnx2x_phy *phy, MDIO_XS_DEVAD, MDIO_XS_SFX7101_XGXS_TEST1, 0x100); } -static int bnx2x_7101_config_init(struct bnx2x_phy *phy, +static void bnx2x_7101_config_init(struct bnx2x_phy *phy, struct link_params *params, struct link_vars *vars) { @@ -11577,7 +11564,6 @@ static int bnx2x_7101_config_init(struct bnx2x_phy *phy, MDIO_PMA_DEVAD, MDIO_PMA_REG_7101_VER2, &fw_ver2); bnx2x_save_spirom_version(bp, params->port, (u32)(fw_ver1<<16 | fw_ver2), phy->ver_addr); - return 0; } static u8 bnx2x_7101_read_status(struct bnx2x_phy *phy, @@ -11746,9 +11732,9 @@ static const struct bnx2x_phy phy_serdes = { .speed_cap_mask = 0, .req_duplex = 0, .rsrv = 0, - .config_init = (config_init_t)bnx2x_xgxs_config_init, - .read_status = (read_status_t)bnx2x_link_settings_status, - .link_reset = (link_reset_t)bnx2x_int_link_reset, + .config_init = bnx2x_xgxs_config_init, + .read_status = bnx2x_link_settings_status, + .link_reset = bnx2x_int_link_reset, .config_loopback = (config_loopback_t)NULL, .format_fw_ver = (format_fw_ver_t)NULL, .hw_reset = (hw_reset_t)NULL, @@ -11782,14 +11768,14 @@ static const struct bnx2x_phy phy_xgxs = { .speed_cap_mask = 0, .req_duplex = 0, .rsrv = 0, - .config_init = (config_init_t)bnx2x_xgxs_config_init, - .read_status = (read_status_t)bnx2x_link_settings_status, - .link_reset = (link_reset_t)bnx2x_int_link_reset, - .config_loopback = (config_loopback_t)bnx2x_set_xgxs_loopback, + .config_init = bnx2x_xgxs_config_init, + .read_status = bnx2x_link_settings_status, + .link_reset = bnx2x_int_link_reset, + .config_loopback = bnx2x_set_xgxs_loopback, .format_fw_ver = (format_fw_ver_t)NULL, .hw_reset = (hw_reset_t)NULL, .set_link_led = (set_link_led_t)NULL, - .phy_specific_func = (phy_specific_func_t)bnx2x_xgxs_specific_func + .phy_specific_func = bnx2x_xgxs_specific_func }; static const struct bnx2x_phy phy_warpcore = { .type = PORT_HW_CFG_XGXS_EXT_PHY_TYPE_DIRECT, @@ -11820,12 +11806,12 @@ static const struct bnx2x_phy phy_warpcore = { .speed_cap_mask = 0, /* req_duplex = */0, /* rsrv = */0, - .config_init = (config_init_t)bnx2x_warpcore_config_init, - .read_status = (read_status_t)bnx2x_warpcore_read_status, - .link_reset = (link_reset_t)bnx2x_warpcore_link_reset, - .config_loopback = (config_loopback_t)bnx2x_set_warpcore_loopback, + .config_init = bnx2x_warpcore_config_init, + .read_status = bnx2x_warpcore_read_status, + .link_reset = bnx2x_warpcore_link_reset, + .config_loopback = bnx2x_set_warpcore_loopback, .format_fw_ver = (format_fw_ver_t)NULL, - .hw_reset = (hw_reset_t)bnx2x_warpcore_hw_reset, + .hw_reset = bnx2x_warpcore_hw_reset, .set_link_led = (set_link_led_t)NULL, .phy_specific_func = (phy_specific_func_t)NULL }; @@ -11851,13 +11837,13 @@ static const struct bnx2x_phy phy_7101 = { .speed_cap_mask = 0, .req_duplex = 0, .rsrv = 0, - .config_init = (config_init_t)bnx2x_7101_config_init, - .read_status = (read_status_t)bnx2x_7101_read_status, - .link_reset = (link_reset_t)bnx2x_common_ext_link_reset, - .config_loopback = (config_loopback_t)bnx2x_7101_config_loopback, - .format_fw_ver = (format_fw_ver_t)bnx2x_7101_format_ver, - .hw_reset = (hw_reset_t)bnx2x_7101_hw_reset, - .set_link_led = (set_link_led_t)bnx2x_7101_set_link_led, + .config_init = bnx2x_7101_config_init, + .read_status = bnx2x_7101_read_status, + .link_reset = bnx2x_common_ext_link_reset, + .config_loopback = bnx2x_7101_config_loopback, + .format_fw_ver = bnx2x_7101_format_ver, + .hw_reset = bnx2x_7101_hw_reset, + .set_link_led = bnx2x_7101_set_link_led, .phy_specific_func = (phy_specific_func_t)NULL }; static const struct bnx2x_phy phy_8073 = { @@ -11882,14 +11868,14 @@ static const struct bnx2x_phy phy_8073 = { .speed_cap_mask = 0, .req_duplex = 0, .rsrv = 0, - .config_init = (config_init_t)bnx2x_8073_config_init, - .read_status = (read_status_t)bnx2x_8073_read_status, - .link_reset = (link_reset_t)bnx2x_8073_link_reset, + .config_init = bnx2x_8073_config_init, + .read_status = bnx2x_8073_read_status, + .link_reset = bnx2x_8073_link_reset, .config_loopback = (config_loopback_t)NULL, - .format_fw_ver = (format_fw_ver_t)bnx2x_format_ver, + .format_fw_ver = bnx2x_format_ver, .hw_reset = (hw_reset_t)NULL, .set_link_led = (set_link_led_t)NULL, - .phy_specific_func = (phy_specific_func_t)bnx2x_8073_specific_func + .phy_specific_func = bnx2x_8073_specific_func }; static const struct bnx2x_phy phy_8705 = { .type = PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8705, @@ -11910,11 +11896,11 @@ static const struct bnx2x_phy phy_8705 = { .speed_cap_mask = 0, .req_duplex = 0, .rsrv = 0, - .config_init = (config_init_t)bnx2x_8705_config_init, - .read_status = (read_status_t)bnx2x_8705_read_status, - .link_reset = (link_reset_t)bnx2x_common_ext_link_reset, + .config_init = bnx2x_8705_config_init, + .read_status = bnx2x_8705_read_status, + .link_reset = bnx2x_common_ext_link_reset, .config_loopback = (config_loopback_t)NULL, - .format_fw_ver = (format_fw_ver_t)bnx2x_null_format_ver, + .format_fw_ver = bnx2x_null_format_ver, .hw_reset = (hw_reset_t)NULL, .set_link_led = (set_link_led_t)NULL, .phy_specific_func = (phy_specific_func_t)NULL @@ -11939,11 +11925,11 @@ static const struct bnx2x_phy phy_8706 = { .speed_cap_mask = 0, .req_duplex = 0, .rsrv = 0, - .config_init = (config_init_t)bnx2x_8706_config_init, - .read_status = (read_status_t)bnx2x_8706_read_status, - .link_reset = (link_reset_t)bnx2x_common_ext_link_reset, + .config_init = bnx2x_8706_config_init, + .read_status = bnx2x_8706_read_status, + .link_reset = bnx2x_common_ext_link_reset, .config_loopback = (config_loopback_t)NULL, - .format_fw_ver = (format_fw_ver_t)bnx2x_format_ver, + .format_fw_ver = bnx2x_format_ver, .hw_reset = (hw_reset_t)NULL, .set_link_led = (set_link_led_t)NULL, .phy_specific_func = (phy_specific_func_t)NULL @@ -11971,11 +11957,11 @@ static const struct bnx2x_phy phy_8726 = { .speed_cap_mask = 0, .req_duplex = 0, .rsrv = 0, - .config_init = (config_init_t)bnx2x_8726_config_init, - .read_status = (read_status_t)bnx2x_8726_read_status, - .link_reset = (link_reset_t)bnx2x_8726_link_reset, - .config_loopback = (config_loopback_t)bnx2x_8726_config_loopback, - .format_fw_ver = (format_fw_ver_t)bnx2x_format_ver, + .config_init = bnx2x_8726_config_init, + .read_status = bnx2x_8726_read_status, + .link_reset = bnx2x_8726_link_reset, + .config_loopback = bnx2x_8726_config_loopback, + .format_fw_ver = bnx2x_format_ver, .hw_reset = (hw_reset_t)NULL, .set_link_led = (set_link_led_t)NULL, .phy_specific_func = (phy_specific_func_t)NULL @@ -12002,14 +11988,14 @@ static const struct bnx2x_phy phy_8727 = { .speed_cap_mask = 0, .req_duplex = 0, .rsrv = 0, - .config_init = (config_init_t)bnx2x_8727_config_init, - .read_status = (read_status_t)bnx2x_8727_read_status, - .link_reset = (link_reset_t)bnx2x_8727_link_reset, + .config_init = bnx2x_8727_config_init, + .read_status = bnx2x_8727_read_status, + .link_reset = bnx2x_8727_link_reset, .config_loopback = (config_loopback_t)NULL, - .format_fw_ver = (format_fw_ver_t)bnx2x_format_ver, - .hw_reset = (hw_reset_t)bnx2x_8727_hw_reset, - .set_link_led = (set_link_led_t)bnx2x_8727_set_link_led, - .phy_specific_func = (phy_specific_func_t)bnx2x_8727_specific_func + .format_fw_ver = bnx2x_format_ver, + .hw_reset = bnx2x_8727_hw_reset, + .set_link_led = bnx2x_8727_set_link_led, + .phy_specific_func = bnx2x_8727_specific_func }; static const struct bnx2x_phy phy_8481 = { .type = PORT_HW_CFG_XGXS_EXT_PHY_TYPE_BCM8481, @@ -12037,13 +12023,13 @@ static const struct bnx2x_phy phy_8481 = { .speed_cap_mask = 0, .req_duplex = 0, .rsrv = 0, - .config_init = (config_init_t)bnx2x_8481_config_init, - .read_status = (read_status_t)bnx2x_848xx_read_status, - .link_reset = (link_reset_t)bnx2x_8481_link_reset, + .config_init = bnx2x_8481_config_init, + .read_status = bnx2x_848xx_read_status, + .link_reset = bnx2x_8481_link_reset, .config_loopback = (config_loopback_t)NULL, - .format_fw_ver = (format_fw_ver_t)bnx2x_848xx_format_ver, - .hw_reset = (hw_reset_t)bnx2x_8481_hw_reset, - .set_link_led = (set_link_led_t)bnx2x_848xx_set_link_led, + .format_fw_ver = bnx2x_848xx_format_ver, + .hw_reset = bnx2x_8481_hw_reset, + .set_link_led = bnx2x_848xx_set_link_led, .phy_specific_func = (phy_specific_func_t)NULL }; @@ -12074,14 +12060,14 @@ static const struct bnx2x_phy phy_84823 = { .speed_cap_mask = 0, .req_duplex = 0, .rsrv = 0, - .config_init = (config_init_t)bnx2x_848x3_config_init, - .read_status = (read_status_t)bnx2x_848xx_read_status, - .link_reset = (link_reset_t)bnx2x_848x3_link_reset, + .config_init = bnx2x_848x3_config_init, + .read_status = bnx2x_848xx_read_status, + .link_reset = bnx2x_848x3_link_reset, .config_loopback = (config_loopback_t)NULL, - .format_fw_ver = (format_fw_ver_t)bnx2x_848xx_format_ver, + .format_fw_ver = bnx2x_848xx_format_ver, .hw_reset = (hw_reset_t)NULL, - .set_link_led = (set_link_led_t)bnx2x_848xx_set_link_led, - .phy_specific_func = (phy_specific_func_t)bnx2x_848xx_specific_func + .set_link_led = bnx2x_848xx_set_link_led, + .phy_specific_func = bnx2x_848xx_specific_func }; static const struct bnx2x_phy phy_84833 = { @@ -12109,14 +12095,14 @@ static const struct bnx2x_phy phy_84833 = { .speed_cap_mask = 0, .req_duplex = 0, .rsrv = 0, - .config_init = (config_init_t)bnx2x_848x3_config_init, - .read_status = (read_status_t)bnx2x_848xx_read_status, - .link_reset = (link_reset_t)bnx2x_848x3_link_reset, + .config_init = bnx2x_848x3_config_init, + .read_status = bnx2x_848xx_read_status, + .link_reset = bnx2x_848x3_link_reset, .config_loopback = (config_loopback_t)NULL, - .format_fw_ver = (format_fw_ver_t)bnx2x_848xx_format_ver, - .hw_reset = (hw_reset_t)bnx2x_84833_hw_reset_phy, - .set_link_led = (set_link_led_t)bnx2x_848xx_set_link_led, - .phy_specific_func = (phy_specific_func_t)bnx2x_848xx_specific_func + .format_fw_ver = bnx2x_848xx_format_ver, + .hw_reset = bnx2x_84833_hw_reset_phy, + .set_link_led = bnx2x_848xx_set_link_led, + .phy_specific_func = bnx2x_848xx_specific_func }; static const struct bnx2x_phy phy_84834 = { @@ -12143,14 +12129,14 @@ static const struct bnx2x_phy phy_84834 = { .speed_cap_mask = 0, .req_duplex = 0, .rsrv = 0, - .config_init = (config_init_t)bnx2x_848x3_config_init, - .read_status = (read_status_t)bnx2x_848xx_read_status, - .link_reset = (link_reset_t)bnx2x_848x3_link_reset, + .config_init = bnx2x_848x3_config_init, + .read_status = bnx2x_848xx_read_status, + .link_reset = bnx2x_848x3_link_reset, .config_loopback = (config_loopback_t)NULL, - .format_fw_ver = (format_fw_ver_t)bnx2x_848xx_format_ver, - .hw_reset = (hw_reset_t)bnx2x_84833_hw_reset_phy, - .set_link_led = (set_link_led_t)bnx2x_848xx_set_link_led, - .phy_specific_func = (phy_specific_func_t)bnx2x_848xx_specific_func + .format_fw_ver = bnx2x_848xx_format_ver, + .hw_reset = bnx2x_84833_hw_reset_phy, + .set_link_led = bnx2x_848xx_set_link_led, + .phy_specific_func = bnx2x_848xx_specific_func }; static const struct bnx2x_phy phy_84858 = { @@ -12177,14 +12163,14 @@ static const struct bnx2x_phy phy_84858 = { .speed_cap_mask = 0, .req_duplex = 0, .rsrv = 0, - .config_init = (config_init_t)bnx2x_848x3_config_init, - .read_status = (read_status_t)bnx2x_848xx_read_status, - .link_reset = (link_reset_t)bnx2x_848x3_link_reset, + .config_init = bnx2x_848x3_config_init, + .read_status = bnx2x_848xx_read_status, + .link_reset = bnx2x_848x3_link_reset, .config_loopback = (config_loopback_t)NULL, - .format_fw_ver = (format_fw_ver_t)bnx2x_8485x_format_ver, - .hw_reset = (hw_reset_t)bnx2x_84833_hw_reset_phy, - .set_link_led = (set_link_led_t)bnx2x_848xx_set_link_led, - .phy_specific_func = (phy_specific_func_t)bnx2x_848xx_specific_func + .format_fw_ver = bnx2x_8485x_format_ver, + .hw_reset = bnx2x_84833_hw_reset_phy, + .set_link_led = bnx2x_848xx_set_link_led, + .phy_specific_func = bnx2x_848xx_specific_func }; static const struct bnx2x_phy phy_54618se = { @@ -12211,14 +12197,14 @@ static const struct bnx2x_phy phy_54618se = { .speed_cap_mask = 0, /* req_duplex = */0, /* rsrv = */0, - .config_init = (config_init_t)bnx2x_54618se_config_init, - .read_status = (read_status_t)bnx2x_54618se_read_status, - .link_reset = (link_reset_t)bnx2x_54618se_link_reset, - .config_loopback = (config_loopback_t)bnx2x_54618se_config_loopback, + .config_init = bnx2x_54618se_config_init, + .read_status = bnx2x_54618se_read_status, + .link_reset = bnx2x_54618se_link_reset, + .config_loopback = bnx2x_54618se_config_loopback, .format_fw_ver = (format_fw_ver_t)NULL, .hw_reset = (hw_reset_t)NULL, - .set_link_led = (set_link_led_t)bnx2x_5461x_set_link_led, - .phy_specific_func = (phy_specific_func_t)bnx2x_54618se_specific_func + .set_link_led = bnx2x_5461x_set_link_led, + .phy_specific_func = bnx2x_54618se_specific_func }; /*****************************************************************/ /* */ diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h index b7d2511..a625bae 100644 --- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h +++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.h @@ -126,7 +126,7 @@ struct link_vars; struct link_params; struct bnx2x_phy; -typedef u8 (*config_init_t)(struct bnx2x_phy *phy, struct link_params *params, +typedef void (*config_init_t)(struct bnx2x_phy *phy, struct link_params *params, struct link_vars *vars); typedef u8 (*read_status_t)(struct bnx2x_phy *phy, struct link_params *params, struct link_vars *vars); @@ -134,7 +134,7 @@ typedef void (*link_reset_t)(struct bnx2x_phy *phy, struct link_params *params); typedef void (*config_loopback_t)(struct bnx2x_phy *phy, struct link_params *params); -typedef u8 (*format_fw_ver_t)(u32 raw, u8 *str, u16 *len); +typedef int (*format_fw_ver_t)(u32 raw, u8 *str, u16 *len); typedef void (*hw_reset_t)(struct bnx2x_phy *phy, struct link_params *params); typedef void (*set_link_led_t)(struct bnx2x_phy *phy, struct link_params *params, u8 mode); diff --git a/drivers/net/ethernet/brocade/bna/bfa_cs.h b/drivers/net/ethernet/brocade/bna/bfa_cs.h index 1d11d66..8f7a3cb 100644 --- a/drivers/net/ethernet/brocade/bna/bfa_cs.h +++ b/drivers/net/ethernet/brocade/bna/bfa_cs.h @@ -34,10 +34,19 @@ struct bfa_sm_table { int state; /*!< state machine encoding */ char *name; /*!< state name for display */ }; -#define BFA_SM(_sm) ((bfa_sm_t)(_sm)) +#define BFA_SM(_sm) (_sm) + +#define bfa_sm_set_state(_sm, _state) ((_sm)->sm = (_state)) +#define bfa_sm_cmp_state(_sm, _state) ((_sm)->sm == (_state)) /* State machine with entry actions. */ -typedef void (*bfa_fsm_t)(void *fsm, int event); +struct bfa_ioc; +enum ioc_event; +struct bfa_iocpf; +enum iocpf_event; + +typedef void (*bfa_fsm_ioc_t)(struct bfa_ioc *fsm, enum ioc_event event); +typedef void (*bfa_fsm_iocpf_t)(struct bfa_iocpf *fsm, enum iocpf_event event); /* oc - object class eg. bfa_ioc * st - state, eg. reset @@ -49,16 +58,37 @@ typedef void (*bfa_fsm_t)(void *fsm, int event); static void oc ## _sm_ ## st ## _entry(otype * fsm) #define bfa_fsm_set_state(_fsm, _state) do { \ - (_fsm)->fsm = (bfa_fsm_t)(_state); \ + (_fsm)->fsm = (_state); \ _state ## _entry(_fsm); \ } while (0) #define bfa_fsm_send_event(_fsm, _event) ((_fsm)->fsm((_fsm), (_event))) -#define bfa_fsm_cmp_state(_fsm, _state) \ - ((_fsm)->fsm == (bfa_fsm_t)(_state)) +#define bfa_fsm_cmp_state(_fsm, _state) ((_fsm)->fsm == (_state)) + +/* For converting from state machine function to state encoding. */ +struct iocpf_sm_table { + bfa_fsm_iocpf_t sm; /*!< state machine function */ + int state; /*!< state machine encoding */ + char *name; /*!< state name for display */ +}; +struct ioc_sm_table { + bfa_fsm_ioc_t sm; /*!< state machine function */ + int state; /*!< state machine encoding */ + char *name; /*!< state name for display */ +}; + +static inline int +iocpf_sm_to_state(const struct iocpf_sm_table *smt, bfa_fsm_iocpf_t sm) +{ + int i = 0; + + while (smt[i].sm && smt[i].sm != sm) + i++; + return smt[i].state; +} static inline int -bfa_sm_to_state(const struct bfa_sm_table *smt, bfa_sm_t sm) +ioc_sm_to_state(const struct ioc_sm_table *smt, bfa_fsm_ioc_t sm) { int i = 0; diff --git a/drivers/net/ethernet/brocade/bna/bfa_ioc.c b/drivers/net/ethernet/brocade/bna/bfa_ioc.c index 9e59663..3564807 100644 --- a/drivers/net/ethernet/brocade/bna/bfa_ioc.c +++ b/drivers/net/ethernet/brocade/bna/bfa_ioc.c @@ -122,7 +122,7 @@ bfa_fsm_state_decl(bfa_ioc, disabling, struct bfa_ioc, enum ioc_event); bfa_fsm_state_decl(bfa_ioc, disabled, struct bfa_ioc, enum ioc_event); bfa_fsm_state_decl(bfa_ioc, hwfail, struct bfa_ioc, enum ioc_event); -static struct bfa_sm_table ioc_sm_table[] = { +static struct ioc_sm_table ioc_sm_table[] = { {BFA_SM(bfa_ioc_sm_uninit), BFA_IOC_UNINIT}, {BFA_SM(bfa_ioc_sm_reset), BFA_IOC_RESET}, {BFA_SM(bfa_ioc_sm_enabling), BFA_IOC_ENABLING}, @@ -191,7 +191,7 @@ bfa_fsm_state_decl(bfa_iocpf, disabling_sync, struct bfa_iocpf, enum iocpf_event); bfa_fsm_state_decl(bfa_iocpf, disabled, struct bfa_iocpf, enum iocpf_event); -static struct bfa_sm_table iocpf_sm_table[] = { +static struct iocpf_sm_table iocpf_sm_table[] = { {BFA_SM(bfa_iocpf_sm_reset), BFA_IOCPF_RESET}, {BFA_SM(bfa_iocpf_sm_fwcheck), BFA_IOCPF_FWMISMATCH}, {BFA_SM(bfa_iocpf_sm_mismatch), BFA_IOCPF_FWMISMATCH}, @@ -2862,12 +2862,12 @@ static enum bfa_ioc_state bfa_ioc_get_state(struct bfa_ioc *ioc) { enum bfa_iocpf_state iocpf_st; - enum bfa_ioc_state ioc_st = bfa_sm_to_state(ioc_sm_table, ioc->fsm); + enum bfa_ioc_state ioc_st = ioc_sm_to_state(ioc_sm_table, ioc->fsm); if (ioc_st == BFA_IOC_ENABLING || ioc_st == BFA_IOC_FAIL || ioc_st == BFA_IOC_INITFAIL) { - iocpf_st = bfa_sm_to_state(iocpf_sm_table, ioc->iocpf.fsm); + iocpf_st = iocpf_sm_to_state(iocpf_sm_table, ioc->iocpf.fsm); switch (iocpf_st) { case BFA_IOCPF_SEMWAIT: @@ -2985,7 +2985,7 @@ bfa_nw_iocpf_timeout(struct bfa_ioc *ioc) { enum bfa_iocpf_state iocpf_st; - iocpf_st = bfa_sm_to_state(iocpf_sm_table, ioc->iocpf.fsm); + iocpf_st = iocpf_sm_to_state(iocpf_sm_table, ioc->iocpf.fsm); if (iocpf_st == BFA_IOCPF_HWINIT) bfa_ioc_poll_fwinit(ioc); diff --git a/drivers/net/ethernet/brocade/bna/bfa_ioc.h b/drivers/net/ethernet/brocade/bna/bfa_ioc.h index 2c0b4c0..97873eb 100644 --- a/drivers/net/ethernet/brocade/bna/bfa_ioc.h +++ b/drivers/net/ethernet/brocade/bna/bfa_ioc.h @@ -156,7 +156,7 @@ struct bfa_ioc_notify { } while (0) struct bfa_iocpf { - bfa_fsm_t fsm; + bfa_fsm_iocpf_t fsm; struct bfa_ioc *ioc; bool fw_mismatch_notified; bool auto_recover; @@ -164,7 +164,7 @@ struct bfa_iocpf { }; struct bfa_ioc { - bfa_fsm_t fsm; + bfa_fsm_ioc_t fsm; struct bfa *bfa; struct bfa_pcidev pcidev; struct timer_list ioc_timer; diff --git a/drivers/net/ethernet/brocade/bna/bfa_msgq.h b/drivers/net/ethernet/brocade/bna/bfa_msgq.h index 66bc8b5..bf64466 100644 --- a/drivers/net/ethernet/brocade/bna/bfa_msgq.h +++ b/drivers/net/ethernet/brocade/bna/bfa_msgq.h @@ -63,8 +63,10 @@ enum bfa_msgq_cmdq_flags { BFA_MSGQ_CMDQ_F_DB_UPDATE = 1, }; +enum cmdq_event; + struct bfa_msgq_cmdq { - bfa_fsm_t fsm; + void (*fsm)(struct bfa_msgq_cmdq *, enum cmdq_event); enum bfa_msgq_cmdq_flags flags; u16 producer_index; @@ -89,8 +91,10 @@ enum bfa_msgq_rspq_flags { typedef void (*bfa_msgq_mcfunc_t)(void *cbarg, struct bfi_msgq_mhdr *mhdr); +enum rspq_event; + struct bfa_msgq_rspq { - bfa_fsm_t fsm; + void (*fsm)(struct bfa_msgq_rspq *, enum rspq_event); enum bfa_msgq_rspq_flags flags; u16 producer_index; diff --git a/drivers/net/ethernet/brocade/bna/bna_enet.c b/drivers/net/ethernet/brocade/bna/bna_enet.c index 4e5c387..0791dab 100644 --- a/drivers/net/ethernet/brocade/bna/bna_enet.c +++ b/drivers/net/ethernet/brocade/bna/bna_enet.c @@ -1265,7 +1265,7 @@ bna_enet_mtu_get(struct bna_enet *enet) void bna_enet_enable(struct bna_enet *enet) { - if (enet->fsm != (bfa_sm_t)bna_enet_sm_stopped) + if (enet->fsm != bna_enet_sm_stopped) return; enet->flags |= BNA_ENET_F_ENABLED; @@ -1676,10 +1676,10 @@ bna_cb_ioceth_reset(void *arg) } static struct bfa_ioc_cbfn bna_ioceth_cbfn = { - bna_cb_ioceth_enable, - bna_cb_ioceth_disable, - bna_cb_ioceth_hbfail, - bna_cb_ioceth_reset + .enable_cbfn = bna_cb_ioceth_enable, + .disable_cbfn = bna_cb_ioceth_disable, + .hbfail_cbfn = bna_cb_ioceth_hbfail, + .reset_cbfn = bna_cb_ioceth_reset }; static void bna_attr_init(struct bna_ioceth *ioceth) @@ -1759,12 +1759,12 @@ bna_ioceth_uninit(struct bna_ioceth *ioceth) void bna_ioceth_enable(struct bna_ioceth *ioceth) { - if (ioceth->fsm == (bfa_fsm_t)bna_ioceth_sm_ready) { + if (ioceth->fsm == bna_ioceth_sm_ready) { bnad_cb_ioceth_ready(ioceth->bna->bnad); return; } - if (ioceth->fsm == (bfa_fsm_t)bna_ioceth_sm_stopped) + if (ioceth->fsm == bna_ioceth_sm_stopped) bfa_fsm_send_event(ioceth, IOCETH_E_ENABLE); } diff --git a/drivers/net/ethernet/brocade/bna/bna_tx_rx.c b/drivers/net/ethernet/brocade/bna/bna_tx_rx.c index 95bc470..c12be9f 100644 --- a/drivers/net/ethernet/brocade/bna/bna_tx_rx.c +++ b/drivers/net/ethernet/brocade/bna/bna_tx_rx.c @@ -1964,7 +1964,7 @@ static void bna_rx_stop(struct bna_rx *rx) { rx->rx_flags &= ~BNA_RX_F_ENET_STARTED; - if (rx->fsm == (bfa_fsm_t) bna_rx_sm_stopped) + if (rx->fsm == bna_rx_sm_stopped) bna_rx_mod_cb_rx_stopped(&rx->bna->rx_mod, rx); else { rx->stop_cbfn = bna_rx_mod_cb_rx_stopped; @@ -2543,7 +2543,7 @@ bna_rx_destroy(struct bna_rx *rx) void bna_rx_enable(struct bna_rx *rx) { - if (rx->fsm != (bfa_sm_t)bna_rx_sm_stopped) + if (rx->fsm != bna_rx_sm_stopped) return; rx->rx_flags |= BNA_RX_F_ENABLED; @@ -3531,7 +3531,7 @@ bna_tx_destroy(struct bna_tx *tx) void bna_tx_enable(struct bna_tx *tx) { - if (tx->fsm != (bfa_sm_t)bna_tx_sm_stopped) + if (tx->fsm != bna_tx_sm_stopped) return; tx->flags |= BNA_TX_F_ENABLED; diff --git a/drivers/net/ethernet/brocade/bna/bna_types.h b/drivers/net/ethernet/brocade/bna/bna_types.h index c438d03..4653f43 100644 --- a/drivers/net/ethernet/brocade/bna/bna_types.h +++ b/drivers/net/ethernet/brocade/bna/bna_types.h @@ -320,8 +320,10 @@ struct bna_attr { /* IOCEth */ +enum bna_ioceth_event; + struct bna_ioceth { - bfa_fsm_t fsm; + void (*fsm)(struct bna_ioceth *, enum bna_ioceth_event); struct bfa_ioc ioc; struct bna_attr attr; @@ -342,8 +344,10 @@ struct bna_pause_config { enum bna_status rx_pause; }; +enum bna_enet_event; + struct bna_enet { - bfa_fsm_t fsm; + void (*fsm)(struct bna_enet *, enum bna_enet_event); enum bna_enet_flags flags; enum bna_enet_type type; @@ -368,8 +372,10 @@ struct bna_enet { /* Ethport */ +enum bna_ethport_event; + struct bna_ethport { - bfa_fsm_t fsm; + void (*fsm)(struct bna_ethport *, enum bna_ethport_event); enum bna_ethport_flags flags; enum bna_link_status link_status; @@ -462,13 +468,15 @@ struct bna_txq { }; /* Tx object */ +enum bna_tx_event; + struct bna_tx { /* This should be the first one */ struct list_head qe; int rid; int hw_id; - bfa_fsm_t fsm; + void (*fsm)(struct bna_tx *, enum bna_tx_event); enum bna_tx_flags flags; enum bna_tx_type type; @@ -706,8 +714,10 @@ struct bna_rxp { }; /* RxF structure (hardware Rx Function) */ +enum bna_rxf_event; + struct bna_rxf { - bfa_fsm_t fsm; + void (*fsm)(struct bna_rxf *, enum bna_rxf_event); struct bfa_msgq_cmd_entry msgq_cmd; union { @@ -777,13 +787,15 @@ struct bna_rxf { }; /* Rx object */ +enum bna_rx_event; + struct bna_rx { /* This should be the first one */ struct list_head qe; int rid; int hw_id; - bfa_fsm_t fsm; + void (*fsm)(struct bna_rx *, enum bna_rx_event); enum bna_rx_type type; diff --git a/drivers/net/ethernet/brocade/bna/bnad.c b/drivers/net/ethernet/brocade/bna/bnad.c index f42f672..daed6bd 100644 --- a/drivers/net/ethernet/brocade/bna/bnad.c +++ b/drivers/net/ethernet/brocade/bna/bnad.c @@ -1100,8 +1100,9 @@ bnad_cb_tx_resume(struct bnad *bnad, struct bna_tx *tx) * Free all TxQs buffers and then notify TX_E_CLEANUP_DONE to Tx fsm. */ static void -bnad_tx_cleanup(struct delayed_work *work) +bnad_tx_cleanup(struct work_struct *_work) { + struct delayed_work *work = (struct delayed_work *)_work; struct bnad_tx_info *tx_info = container_of(work, struct bnad_tx_info, tx_cleanup_work); struct bnad *bnad = NULL; @@ -1179,7 +1180,7 @@ bnad_cb_rx_stall(struct bnad *bnad, struct bna_rx *rx) * Free all RxQs buffers and then notify RX_E_CLEANUP_DONE to Rx fsm. */ static void -bnad_rx_cleanup(void *work) +bnad_rx_cleanup(struct work_struct *work) { struct bnad_rx_info *rx_info = container_of(work, struct bnad_rx_info, rx_cleanup_work); @@ -2003,8 +2004,7 @@ bnad_setup_tx(struct bnad *bnad, u32 tx_id) } tx_info->tx = tx; - INIT_DELAYED_WORK(&tx_info->tx_cleanup_work, - (work_func_t)bnad_tx_cleanup); + INIT_DELAYED_WORK(&tx_info->tx_cleanup_work, bnad_tx_cleanup); /* Register ISR for the Tx object */ if (intr_info->intr_type == BNA_INTR_T_MSIX) { @@ -2260,8 +2260,7 @@ bnad_setup_rx(struct bnad *bnad, u32 rx_id) rx_info->rx = rx; spin_unlock_irqrestore(&bnad->bna_lock, flags); - INIT_WORK(&rx_info->rx_cleanup_work, - (work_func_t)(bnad_rx_cleanup)); + INIT_WORK(&rx_info->rx_cleanup_work, bnad_rx_cleanup); /* * Init NAPI, so that state is set to NAPI_STATE_SCHED, diff --git a/drivers/pci/pcie/aspm.c b/drivers/pci/pcie/aspm.c index b0916b1..a3335ec 100644 --- a/drivers/pci/pcie/aspm.c +++ b/drivers/pci/pcie/aspm.c @@ -782,7 +782,7 @@ void pci_disable_link_state(struct pci_dev *pdev, int state) } EXPORT_SYMBOL(pci_disable_link_state); -static int pcie_aspm_set_policy(const char *val, struct kernel_param *kp) +static int pcie_aspm_set_policy(const char *val, const struct kernel_param *kp) { int i; struct pcie_link_state *link; @@ -809,7 +809,7 @@ static int pcie_aspm_set_policy(const char *val, struct kernel_param *kp) return 0; } -static int pcie_aspm_get_policy(char *buffer, struct kernel_param *kp) +static int pcie_aspm_get_policy(char *buffer, const struct kernel_param *kp) { int i, cnt = 0; for (i = 0; i < ARRAY_SIZE(policy_str); i++) diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c index b65ce75..60ee94e 100644 --- a/drivers/platform/x86/thinkpad_acpi.c +++ b/drivers/platform/x86/thinkpad_acpi.c @@ -9526,7 +9526,7 @@ static struct ibm_init_struct ibms_init[] __initdata = { }, }; -static int __init set_ibm_param(const char *val, struct kernel_param *kp) +static int __init set_ibm_param(const char *val, const struct kernel_param *kp) { unsigned int i; struct ibm_struct *ibm; diff --git a/drivers/scsi/aacraid/aachba.c b/drivers/scsi/aacraid/aachba.c index 6678d1f..0293b70 100644 --- a/drivers/scsi/aacraid/aachba.c +++ b/drivers/scsi/aacraid/aachba.c @@ -770,6 +770,11 @@ static int aac_probe_container_callback1(struct scsi_cmnd * scsicmd) return 0; } +static void aac_probe_container_scsi_done(struct scsi_cmnd * scsicmd) +{ + scsicmd->device = NULL; +} + int aac_probe_container(struct aac_dev *dev, int cid) { struct scsi_cmnd *scsicmd = kmalloc(sizeof(*scsicmd), GFP_KERNEL); @@ -782,7 +787,7 @@ int aac_probe_container(struct aac_dev *dev, int cid) return -ENOMEM; } scsicmd->list.next = NULL; - scsicmd->scsi_done = (void (*)(struct scsi_cmnd*))aac_probe_container_callback1; + scsicmd->scsi_done = aac_probe_container_scsi_done; scsicmd->device = scsidev; scsidev->sdev_state = 0; diff --git a/drivers/scsi/aic7xxx/aic79xx.h b/drivers/scsi/aic7xxx/aic79xx.h index d47b527..f2c4a89 100644 --- a/drivers/scsi/aic7xxx/aic79xx.h +++ b/drivers/scsi/aic7xxx/aic79xx.h @@ -1046,7 +1046,7 @@ typedef enum { typedef uint8_t ahd_mode_state; -typedef void ahd_callback_t (void *); +typedef void ahd_linux_callback_t (u_long); struct ahd_completion { diff --git a/drivers/scsi/aic7xxx/aic79xx_core.c b/drivers/scsi/aic7xxx/aic79xx_core.c index 109e2c9..7d3c9b5 100644 --- a/drivers/scsi/aic7xxx/aic79xx_core.c +++ b/drivers/scsi/aic7xxx/aic79xx_core.c @@ -207,7 +207,7 @@ static void ahd_add_scb_to_free_list(struct ahd_softc *ahd, static u_int ahd_rem_wscb(struct ahd_softc *ahd, u_int scbid, u_int prev, u_int next, u_int tid); static void ahd_reset_current_bus(struct ahd_softc *ahd); -static ahd_callback_t ahd_stat_timer; +static ahd_linux_callback_t ahd_stat_timer; #ifdef AHD_DUMP_SEQ static void ahd_dumpseq(struct ahd_softc *ahd); #endif @@ -7041,10 +7041,9 @@ static const char *termstat_strings[] = { /***************************** Timer Facilities *******************************/ #define ahd_timer_init init_timer #define ahd_timer_stop del_timer_sync -typedef void ahd_linux_callback_t (u_long); static void -ahd_timer_reset(ahd_timer_t *timer, int usec, ahd_callback_t *func, void *arg) +ahd_timer_reset(ahd_timer_t *timer, int usec, ahd_linux_callback_t *func, void *arg) { struct ahd_softc *ahd; @@ -7052,7 +7051,7 @@ ahd_timer_reset(ahd_timer_t *timer, int usec, ahd_callback_t *func, void *arg) del_timer(timer); timer->data = (u_long)arg; timer->expires = jiffies + (usec * HZ)/1000000; - timer->function = (ahd_linux_callback_t*)func; + timer->function = func; add_timer(timer); } @@ -8878,9 +8877,9 @@ ahd_reset_channel(struct ahd_softc *ahd, char channel, int initiate_reset) /**************************** Statistics Processing ***************************/ static void -ahd_stat_timer(void *arg) +ahd_stat_timer(unsigned long arg) { - struct ahd_softc *ahd = arg; + struct ahd_softc *ahd = (struct ahd_softc *)arg; u_long s; int enint_coal; diff --git a/drivers/scsi/bfa/bfa.h b/drivers/scsi/bfa/bfa.h index 0e119d8..1bf8a49 100644 --- a/drivers/scsi/bfa/bfa.h +++ b/drivers/scsi/bfa/bfa.h @@ -225,8 +225,10 @@ struct bfa_faa_args_s { bfa_boolean_t busy; }; +enum iocfc_event; + struct bfa_iocfc_s { - bfa_fsm_t fsm; + void (*fsm)(struct bfa_iocfc_s *, enum iocfc_event); struct bfa_s *bfa; struct bfa_iocfc_cfg_s cfg; u32 req_cq_pi[BFI_IOC_MAX_CQS]; diff --git a/drivers/scsi/bfa/bfa_core.c b/drivers/scsi/bfa/bfa_core.c index 7209afa..2450c12 100644 --- a/drivers/scsi/bfa/bfa_core.c +++ b/drivers/scsi/bfa/bfa_core.c @@ -1919,15 +1919,13 @@ bfa_comp_process(struct bfa_s *bfa, struct list_head *comp_q) struct list_head *qe; struct list_head *qen; struct bfa_cb_qe_s *hcb_qe; - bfa_cb_cbfn_status_t cbfn; list_for_each_safe(qe, qen, comp_q) { hcb_qe = (struct bfa_cb_qe_s *) qe; if (hcb_qe->pre_rmv) { /* qe is invalid after return, dequeue before cbfn() */ list_del(qe); - cbfn = (bfa_cb_cbfn_status_t)(hcb_qe->cbfn); - cbfn(hcb_qe->cbarg, hcb_qe->fw_status); + hcb_qe->cbfn(hcb_qe->cbarg, hcb_qe->fw_status); } else hcb_qe->cbfn(hcb_qe->cbarg, BFA_TRUE); } diff --git a/drivers/scsi/bfa/bfa_cs.h b/drivers/scsi/bfa/bfa_cs.h index df6760c..3b22f4d 100644 --- a/drivers/scsi/bfa/bfa_cs.h +++ b/drivers/scsi/bfa/bfa_cs.h @@ -184,8 +184,6 @@ bfa_q_is_on_q_func(struct list_head *q, struct list_head *qe) * @ BFA state machine interfaces */ -typedef void (*bfa_sm_t)(void *sm, int event); - /* * oc - object class eg. bfa_ioc * st - state, eg. reset @@ -195,20 +193,75 @@ typedef void (*bfa_sm_t)(void *sm, int event); #define bfa_sm_state_decl(oc, st, otype, etype) \ static void oc ## _sm_ ## st(otype * fsm, etype event) -#define bfa_sm_set_state(_sm, _state) ((_sm)->sm = (bfa_sm_t)(_state)) +#define bfa_sm_set_state(_sm, _state) ((_sm)->sm = (_state)) #define bfa_sm_send_event(_sm, _event) ((_sm)->sm((_sm), (_event))) #define bfa_sm_get_state(_sm) ((_sm)->sm) -#define bfa_sm_cmp_state(_sm, _state) ((_sm)->sm == (bfa_sm_t)(_state)) +#define bfa_sm_cmp_state(_sm, _state) ((_sm)->sm == (_state)) /* * For converting from state machine function to state encoding. */ -struct bfa_sm_table_s { - bfa_sm_t sm; /* state machine function */ +struct bfa_iocpf_s; +enum iocpf_event; +typedef void (*bfa_fsm_iocpf_t)(struct bfa_iocpf_s *, enum iocpf_event); + +struct iocpf_sm_table_s { + bfa_fsm_iocpf_t sm; /* state machine function */ + int state; /* state machine encoding */ + char *name; /* state name for display */ +}; + +struct bfa_ioc_s; +enum ioc_event; +typedef void (*bfa_fsm_ioc_t)(struct bfa_ioc_s *, enum ioc_event); + +struct ioc_sm_table_s { + bfa_fsm_ioc_t sm; /* state machine function */ int state; /* state machine encoding */ char *name; /* state name for display */ }; -#define BFA_SM(_sm) ((bfa_sm_t)(_sm)) + +struct bfa_fcs_rport_s; +enum rport_event; +typedef void(*bfa_fcs_rport_t)(struct bfa_fcs_rport_s *, enum rport_event); + +struct rport_sm_table_s { + bfa_fcs_rport_t sm; /* state machine function */ + int state; /* state machine encoding */ + char *name; /* state name for display */ +}; + +struct bfa_fcs_vport_s; +enum bfa_fcs_vport_event; +typedef void(*bfa_fcs_vport_t)(struct bfa_fcs_vport_s *, enum bfa_fcs_vport_event); + +struct vport_sm_table_s { + bfa_fcs_vport_t sm; /* state machine function */ + int state; /* state machine encoding */ + char *name; /* state name for display */ +}; + +struct bfa_fcs_itnim_s; +enum bfa_fcs_itnim_event; +typedef void(*bfa_fcs_itnim_t)(struct bfa_fcs_itnim_s *, enum bfa_fcs_itnim_event); + +struct itnim_sm_table_s { + bfa_fcs_itnim_t sm; /* state machine function */ + int state; /* state machine encoding */ + char *name; /* state name for display */ +}; + +struct bfa_fcport_s; +enum bfa_fcport_sm_event; +typedef void(*bfa_fcport_t)(struct bfa_fcport_s *, enum bfa_fcport_sm_event); + +struct fcport_sm_table_s { + bfa_fcport_t sm; /* state machine function */ + int state; /* state machine encoding */ + char *name; /* state name for display */ +}; + +#define BFA_SM(_sm) (_sm) /* * State machine with entry actions. @@ -226,17 +279,66 @@ typedef void (*bfa_fsm_t)(void *fsm, int event); static void oc ## _sm_ ## st ## _entry(otype * fsm) #define bfa_fsm_set_state(_fsm, _state) do { \ - (_fsm)->fsm = (bfa_fsm_t)(_state); \ + (_fsm)->fsm = (_state); \ _state ## _entry(_fsm); \ } while (0) #define bfa_fsm_send_event(_fsm, _event) ((_fsm)->fsm((_fsm), (_event))) #define bfa_fsm_get_state(_fsm) ((_fsm)->fsm) -#define bfa_fsm_cmp_state(_fsm, _state) \ - ((_fsm)->fsm == (bfa_fsm_t)(_state)) +#define bfa_fsm_cmp_state(_fsm, _state) ((_fsm)->fsm == (_state)) + +static inline int +iocpf_sm_to_state(struct iocpf_sm_table_s *smt, bfa_fsm_iocpf_t sm) +{ + int i = 0; + + while (smt[i].sm && smt[i].sm != sm) + i++; + return smt[i].state; +} + +static inline int +ioc_sm_to_state(struct ioc_sm_table_s *smt, bfa_fsm_ioc_t sm) +{ + int i = 0; + + while (smt[i].sm && smt[i].sm != sm) + i++; + return smt[i].state; +} + +static inline int +rport_sm_to_state(struct rport_sm_table_s *smt, bfa_fcs_rport_t sm) +{ + int i = 0; + + while (smt[i].sm && smt[i].sm != sm) + i++; + return smt[i].state; +} + +static inline int +vport_sm_to_state(struct vport_sm_table_s *smt, bfa_fcs_vport_t sm) +{ + int i = 0; + + while (smt[i].sm && smt[i].sm != sm) + i++; + return smt[i].state; +} + +static inline int +itnim_sm_to_state(struct itnim_sm_table_s *smt, bfa_fcs_itnim_t sm) +{ + int i = 0; + + while (smt[i].sm && smt[i].sm != sm) + i++; + return smt[i].state; +} static inline int -bfa_sm_to_state(struct bfa_sm_table_s *smt, bfa_sm_t sm) +fcport_sm_to_state(struct fcport_sm_table_s *smt, bfa_fcport_t sm) { int i = 0; diff --git a/drivers/scsi/bfa/bfa_fcpim.h b/drivers/scsi/bfa/bfa_fcpim.h index e93921d..0617a43 100644 --- a/drivers/scsi/bfa/bfa_fcpim.h +++ b/drivers/scsi/bfa/bfa_fcpim.h @@ -165,9 +165,11 @@ struct bfa_fcp_mod_s { /* * BFA IO (initiator mode) */ +enum bfa_ioim_event; + struct bfa_ioim_s { struct list_head qe; /* queue elememt */ - bfa_sm_t sm; /* BFA ioim state machine */ + void (*sm)(struct bfa_ioim_s *, enum bfa_ioim_event);/* BFA ioim state machine */ struct bfa_s *bfa; /* BFA module */ struct bfa_fcpim_s *fcpim; /* parent fcpim module */ struct bfa_itnim_s *itnim; /* i-t-n nexus for this IO */ @@ -197,9 +199,11 @@ struct bfa_ioim_sp_s { /* * BFA Task management command (initiator mode) */ +enum bfa_tskim_event; + struct bfa_tskim_s { struct list_head qe; - bfa_sm_t sm; + void (*sm)(struct bfa_tskim_s *, enum bfa_tskim_event); struct bfa_s *bfa; /* BFA module */ struct bfa_fcpim_s *fcpim; /* parent fcpim module */ struct bfa_itnim_s *itnim; /* i-t-n nexus for this IO */ @@ -219,9 +223,11 @@ struct bfa_tskim_s { /* * BFA i-t-n (initiator mode) */ +enum bfa_itnim_event; + struct bfa_itnim_s { struct list_head qe; /* queue element */ - bfa_sm_t sm; /* i-t-n im BFA state machine */ + void (*sm)(struct bfa_itnim_s *, enum bfa_itnim_event);/* i-t-n im BFA state machine */ struct bfa_s *bfa; /* bfa instance */ struct bfa_rport_s *rport; /* bfa rport */ void *ditn; /* driver i-t-n structure */ diff --git a/drivers/scsi/bfa/bfa_fcs.c b/drivers/scsi/bfa/bfa_fcs.c index 1e7e139..c2031dd 100644 --- a/drivers/scsi/bfa/bfa_fcs.c +++ b/drivers/scsi/bfa/bfa_fcs.c @@ -39,10 +39,21 @@ struct bfa_fcs_mod_s { #define BFA_FCS_MODULE(_mod) { _mod ## _modinit, _mod ## _modexit } static struct bfa_fcs_mod_s fcs_modules[] = { - { bfa_fcs_port_attach, NULL, NULL }, - { bfa_fcs_uf_attach, NULL, NULL }, - { bfa_fcs_fabric_attach, bfa_fcs_fabric_modinit, - bfa_fcs_fabric_modexit }, + { + .attach = bfa_fcs_port_attach, + .modinit = NULL, + .modexit = NULL + }, + { + .attach = bfa_fcs_uf_attach, + .modinit = NULL, + .modexit = NULL + }, + { + .attach = bfa_fcs_fabric_attach, + .modinit = bfa_fcs_fabric_modinit, + .modexit = bfa_fcs_fabric_modexit + }, }; /* diff --git a/drivers/scsi/bfa/bfa_fcs.h b/drivers/scsi/bfa/bfa_fcs.h index 0f797a5..73b170a 100644 --- a/drivers/scsi/bfa/bfa_fcs.h +++ b/drivers/scsi/bfa/bfa_fcs.h @@ -67,8 +67,10 @@ struct bfa_fcs_s; #define BFA_FCS_PID_IS_WKA(pid) ((bfa_ntoh3b(pid) > 0xFFF000) ? 1 : 0) #define BFA_FCS_MAX_RPORT_LOGINS 1024 +enum vport_ns_event; + struct bfa_fcs_lport_ns_s { - bfa_sm_t sm; /* state machine */ + void (*sm)(struct bfa_fcs_lport_ns_s *, enum vport_ns_event);/* state machine */ struct bfa_timer_s timer; struct bfa_fcs_lport_s *port; /* parent port */ struct bfa_fcxp_s *fcxp; @@ -77,18 +79,20 @@ struct bfa_fcs_lport_ns_s { u8 num_rsnn_nn_retries; }; +enum port_scn_event; struct bfa_fcs_lport_scn_s { - bfa_sm_t sm; /* state machine */ + void (*sm)(struct bfa_fcs_lport_scn_s *, enum port_scn_event);/* state machine */ struct bfa_timer_s timer; struct bfa_fcs_lport_s *port; /* parent port */ struct bfa_fcxp_s *fcxp; struct bfa_fcxp_wqe_s fcxp_wqe; }; +enum port_fdmi_event; struct bfa_fcs_lport_fdmi_s { - bfa_sm_t sm; /* state machine */ + void (*sm)(struct bfa_fcs_lport_fdmi_s *, enum port_fdmi_event);/* state machine */ struct bfa_timer_s timer; struct bfa_fcs_lport_ms_s *ms; /* parent ms */ struct bfa_fcxp_s *fcxp; @@ -97,9 +101,10 @@ struct bfa_fcs_lport_fdmi_s { u8 rsvd[3]; }; +enum port_ms_event; struct bfa_fcs_lport_ms_s { - bfa_sm_t sm; /* state machine */ + void (*sm)(struct bfa_fcs_lport_ms_s *, enum port_ms_event);/* state machine */ struct bfa_timer_s timer; struct bfa_fcs_lport_s *port; /* parent port */ struct bfa_fcxp_s *fcxp; @@ -139,10 +144,11 @@ union bfa_fcs_lport_topo_u { struct bfa_fcs_lport_n2n_s pn2n; }; +enum bfa_fcs_lport_event; struct bfa_fcs_lport_s { struct list_head qe; /* used by port/vport */ - bfa_sm_t sm; /* state machine */ + void (*sm)(struct bfa_fcs_lport_s *, enum bfa_fcs_lport_event); /* state machine */ struct bfa_fcs_fabric_s *fabric; /* parent fabric */ struct bfa_lport_cfg_s port_cfg; /* port configuration */ struct bfa_timer_s link_timer; /* timer for link offline */ @@ -179,10 +185,11 @@ enum bfa_fcs_fabric_type { BFA_FCS_FABRIC_LOOP = 3, }; +enum bfa_fcs_fabric_event; struct bfa_fcs_fabric_s { struct list_head qe; /* queue element */ - bfa_sm_t sm; /* state machine */ + void (*sm)(struct bfa_fcs_fabric_s *, enum bfa_fcs_fabric_event); /* state machine */ struct bfa_fcs_s *fcs; /* FCS instance */ struct bfa_fcs_lport_s bport; /* base logical port */ enum bfa_fcs_fabric_type fab_type; /* fabric type */ @@ -355,9 +362,11 @@ void bfa_fcs_lport_scn_process_rscn(struct bfa_fcs_lport_s *port, struct fchs_s *rx_frame, u32 len); void bfa_fcs_lport_lip_scn_online(bfa_fcs_lport_t *port); +enum bfa_fcs_vport_event; + struct bfa_fcs_vport_s { struct list_head qe; /* queue elem */ - bfa_sm_t sm; /* state machine */ + void (*sm)(struct bfa_fcs_vport_s *, enum bfa_fcs_vport_event);/* state machine */ bfa_fcs_lport_t lport; /* logical port */ struct bfa_timer_s timer; struct bfad_vport_s *vport_drv; /* Driver private */ @@ -409,8 +418,10 @@ struct bfa_fcs_tin_s; struct bfa_fcs_iprp_s; /* Rport Features (RPF) */ +enum rpf_event; + struct bfa_fcs_rpf_s { - bfa_sm_t sm; /* state machine */ + void (*sm)(struct bfa_fcs_rpf_s *, enum rpf_event); /* state machine */ struct bfa_fcs_rport_s *rport; /* parent rport */ struct bfa_timer_s timer; /* general purpose timer */ struct bfa_fcxp_s *fcxp; /* FCXP needed for discarding */ @@ -425,6 +436,8 @@ struct bfa_fcs_rpf_s { */ }; +enum rport_event; + struct bfa_fcs_rport_s { struct list_head qe; /* used by port/vport */ struct bfa_fcs_lport_s *port; /* parent FCS port */ @@ -441,7 +454,7 @@ struct bfa_fcs_rport_s { wwn_t pwwn; /* port wwn of rport */ wwn_t nwwn; /* node wwn of rport */ struct bfa_rport_symname_s psym_name; /* port symbolic name */ - bfa_sm_t sm; /* state machine */ + void (*sm)(struct bfa_fcs_rport_s *, enum rport_event); /* state machine */ struct bfa_timer_s timer; /* general purpose timer */ struct bfa_fcs_itnim_s *itnim; /* ITN initiator mode role */ struct bfa_fcs_tin_s *tin; /* ITN initiator mode role */ @@ -502,9 +515,10 @@ void bfa_fcs_rpf_rport_offline(struct bfa_fcs_rport_s *rport); * forward declarations */ struct bfad_itnim_s; +enum bfa_fcs_itnim_event; struct bfa_fcs_itnim_s { - bfa_sm_t sm; /* state machine */ + void (*sm)(struct bfa_fcs_itnim_s *, enum bfa_fcs_itnim_event);/* state machine */ struct bfa_fcs_rport_s *rport; /* parent remote rport */ struct bfad_itnim_s *itnim_drv; /* driver peer instance */ struct bfa_fcs_s *fcs; /* fcs instance */ diff --git a/drivers/scsi/bfa/bfa_fcs_fcpim.c b/drivers/scsi/bfa/bfa_fcs_fcpim.c index 2e3b19e..7a9b729 100644 --- a/drivers/scsi/bfa/bfa_fcs_fcpim.c +++ b/drivers/scsi/bfa/bfa_fcs_fcpim.c @@ -60,7 +60,7 @@ static void bfa_fcs_itnim_sm_hcb_offline(struct bfa_fcs_itnim_s *itnim, static void bfa_fcs_itnim_sm_initiator(struct bfa_fcs_itnim_s *itnim, enum bfa_fcs_itnim_event event); -static struct bfa_sm_table_s itnim_sm_table[] = { +static struct itnim_sm_table_s itnim_sm_table[] = { {BFA_SM(bfa_fcs_itnim_sm_offline), BFA_ITNIM_OFFLINE}, {BFA_SM(bfa_fcs_itnim_sm_prli_send), BFA_ITNIM_PRLI_SEND}, {BFA_SM(bfa_fcs_itnim_sm_prli), BFA_ITNIM_PRLI_SENT}, @@ -673,7 +673,7 @@ bfa_status_t bfa_fcs_itnim_get_online_state(struct bfa_fcs_itnim_s *itnim) { bfa_trc(itnim->fcs, itnim->rport->pid); - switch (bfa_sm_to_state(itnim_sm_table, itnim->sm)) { + switch (itnim_sm_to_state(itnim_sm_table, itnim->sm)) { case BFA_ITNIM_ONLINE: case BFA_ITNIM_INITIATIOR: return BFA_STATUS_OK; @@ -773,7 +773,7 @@ bfa_fcs_itnim_attr_get(struct bfa_fcs_lport_s *port, wwn_t rpwwn, if (itnim == NULL) return BFA_STATUS_NO_FCPIM_NEXUS; - attr->state = bfa_sm_to_state(itnim_sm_table, itnim->sm); + attr->state = itnim_sm_to_state(itnim_sm_table, itnim->sm); attr->retry = itnim->seq_rec; attr->rec_support = itnim->rec_support; attr->conf_comp = itnim->conf_comp; diff --git a/drivers/scsi/bfa/bfa_fcs_lport.c b/drivers/scsi/bfa/bfa_fcs_lport.c index 4ddda72..ccf40a3 100644 --- a/drivers/scsi/bfa/bfa_fcs_lport.c +++ b/drivers/scsi/bfa/bfa_fcs_lport.c @@ -90,15 +90,26 @@ static struct { void (*offline) (struct bfa_fcs_lport_s *port); } __port_action[] = { { - bfa_fcs_lport_unknown_init, bfa_fcs_lport_unknown_online, - bfa_fcs_lport_unknown_offline}, { - bfa_fcs_lport_fab_init, bfa_fcs_lport_fab_online, - bfa_fcs_lport_fab_offline}, { - bfa_fcs_lport_n2n_init, bfa_fcs_lport_n2n_online, - bfa_fcs_lport_n2n_offline}, { - bfa_fcs_lport_loop_init, bfa_fcs_lport_loop_online, - bfa_fcs_lport_loop_offline}, - }; + .init = bfa_fcs_lport_unknown_init, + .online = bfa_fcs_lport_unknown_online, + .offline = bfa_fcs_lport_unknown_offline + }, + { + .init = bfa_fcs_lport_fab_init, + .online = bfa_fcs_lport_fab_online, + .offline = bfa_fcs_lport_fab_offline + }, + { + .init = bfa_fcs_lport_n2n_init, + .online = bfa_fcs_lport_n2n_online, + .offline = bfa_fcs_lport_n2n_offline + }, + { + .init = bfa_fcs_lport_loop_init, + .online = bfa_fcs_lport_loop_online, + .offline = bfa_fcs_lport_loop_offline + }, +}; /* * fcs_port_sm FCS logical port state machine @@ -6040,7 +6051,7 @@ static void bfa_fcs_vport_sm_stopping(struct bfa_fcs_vport_s *vport, static void bfa_fcs_vport_sm_logo_for_stop(struct bfa_fcs_vport_s *vport, enum bfa_fcs_vport_event event); -static struct bfa_sm_table_s vport_sm_table[] = { +static struct vport_sm_table_s vport_sm_table[] = { {BFA_SM(bfa_fcs_vport_sm_uninit), BFA_FCS_VPORT_UNINIT}, {BFA_SM(bfa_fcs_vport_sm_created), BFA_FCS_VPORT_CREATED}, {BFA_SM(bfa_fcs_vport_sm_offline), BFA_FCS_VPORT_OFFLINE}, @@ -6871,7 +6882,7 @@ bfa_fcs_vport_get_attr(struct bfa_fcs_vport_s *vport, memset(attr, 0, sizeof(struct bfa_vport_attr_s)); bfa_fcs_lport_get_attr(&vport->lport, &attr->port_attr); - attr->vport_state = bfa_sm_to_state(vport_sm_table, vport->sm); + attr->vport_state = vport_sm_to_state(vport_sm_table, vport->sm); } diff --git a/drivers/scsi/bfa/bfa_fcs_rport.c b/drivers/scsi/bfa/bfa_fcs_rport.c index de50349..6d676be 100644 --- a/drivers/scsi/bfa/bfa_fcs_rport.c +++ b/drivers/scsi/bfa/bfa_fcs_rport.c @@ -144,7 +144,7 @@ static void bfa_fcs_rport_sm_fc4_off_delete(struct bfa_fcs_rport_s *rport, static void bfa_fcs_rport_sm_delete_pending(struct bfa_fcs_rport_s *rport, enum rport_event event); -static struct bfa_sm_table_s rport_sm_table[] = { +static struct rport_sm_table_s rport_sm_table[] = { {BFA_SM(bfa_fcs_rport_sm_uninit), BFA_RPORT_UNINIT}, {BFA_SM(bfa_fcs_rport_sm_plogi_sending), BFA_RPORT_PLOGI}, {BFA_SM(bfa_fcs_rport_sm_plogiacc_sending), BFA_RPORT_ONLINE}, @@ -2980,7 +2980,7 @@ bfa_fcs_rport_send_ls_rjt(struct bfa_fcs_rport_s *rport, struct fchs_s *rx_fchs, int bfa_fcs_rport_get_state(struct bfa_fcs_rport_s *rport) { - return bfa_sm_to_state(rport_sm_table, rport->sm); + return rport_sm_to_state(rport_sm_table, rport->sm); } diff --git a/drivers/scsi/bfa/bfa_ioc.c b/drivers/scsi/bfa/bfa_ioc.c index a1ada4a..6ed9ba2 100644 --- a/drivers/scsi/bfa/bfa_ioc.c +++ b/drivers/scsi/bfa/bfa_ioc.c @@ -148,7 +148,7 @@ bfa_fsm_state_decl(bfa_ioc, disabling, struct bfa_ioc_s, enum ioc_event); bfa_fsm_state_decl(bfa_ioc, disabled, struct bfa_ioc_s, enum ioc_event); bfa_fsm_state_decl(bfa_ioc, hwfail, struct bfa_ioc_s, enum ioc_event); -static struct bfa_sm_table_s ioc_sm_table[] = { +static struct ioc_sm_table_s ioc_sm_table[] = { {BFA_SM(bfa_ioc_sm_uninit), BFA_IOC_UNINIT}, {BFA_SM(bfa_ioc_sm_reset), BFA_IOC_RESET}, {BFA_SM(bfa_ioc_sm_enabling), BFA_IOC_ENABLING}, @@ -236,7 +236,7 @@ bfa_fsm_state_decl(bfa_iocpf, disabling_sync, struct bfa_iocpf_s, enum iocpf_event); bfa_fsm_state_decl(bfa_iocpf, disabled, struct bfa_iocpf_s, enum iocpf_event); -static struct bfa_sm_table_s iocpf_sm_table[] = { +static struct iocpf_sm_table_s iocpf_sm_table[] = { {BFA_SM(bfa_iocpf_sm_reset), BFA_IOCPF_RESET}, {BFA_SM(bfa_iocpf_sm_fwcheck), BFA_IOCPF_FWMISMATCH}, {BFA_SM(bfa_iocpf_sm_mismatch), BFA_IOCPF_FWMISMATCH}, @@ -2830,12 +2830,12 @@ enum bfa_ioc_state bfa_ioc_get_state(struct bfa_ioc_s *ioc) { enum bfa_iocpf_state iocpf_st; - enum bfa_ioc_state ioc_st = bfa_sm_to_state(ioc_sm_table, ioc->fsm); + enum bfa_ioc_state ioc_st = ioc_sm_to_state(ioc_sm_table, ioc->fsm); if (ioc_st == BFA_IOC_ENABLING || ioc_st == BFA_IOC_FAIL || ioc_st == BFA_IOC_INITFAIL) { - iocpf_st = bfa_sm_to_state(iocpf_sm_table, ioc->iocpf.fsm); + iocpf_st = iocpf_sm_to_state(iocpf_sm_table, ioc->iocpf.fsm); switch (iocpf_st) { case BFA_IOCPF_SEMWAIT: diff --git a/drivers/scsi/bfa/bfa_ioc.h b/drivers/scsi/bfa/bfa_ioc.h index 713745d..6b6950b 100644 --- a/drivers/scsi/bfa/bfa_ioc.h +++ b/drivers/scsi/bfa/bfa_ioc.h @@ -286,16 +286,20 @@ struct bfa_ioc_notify_s { (__notify)->cbarg = (__cbarg); \ } while (0) +enum iocpf_event; + struct bfa_iocpf_s { - bfa_fsm_t fsm; + void (*fsm)(struct bfa_iocpf_s *, enum iocpf_event); struct bfa_ioc_s *ioc; bfa_boolean_t fw_mismatch_notified; bfa_boolean_t auto_recover; u32 poll_time; }; +enum ioc_event; + struct bfa_ioc_s { - bfa_fsm_t fsm; + void (*fsm)(struct bfa_ioc_s *, enum ioc_event); struct bfa_s *bfa; struct bfa_pcidev_s pcidev; struct bfa_timer_mod_s *timer_mod; @@ -779,8 +783,10 @@ struct bfa_dconf_s { }; #pragma pack() +enum bfa_dconf_event; + struct bfa_dconf_mod_s { - bfa_sm_t sm; + void (*sm)(struct bfa_dconf_mod_s *, enum bfa_dconf_event); u8 instance; bfa_boolean_t read_data_valid; bfa_boolean_t min_cfg; diff --git a/drivers/scsi/bfa/bfa_modules.h b/drivers/scsi/bfa/bfa_modules.h index 53135f2..640621b 100644 --- a/drivers/scsi/bfa/bfa_modules.h +++ b/drivers/scsi/bfa/bfa_modules.h @@ -79,12 +79,12 @@ enum { \ extern struct bfa_module_s hal_mod_ ## __mod; \ struct bfa_module_s hal_mod_ ## __mod = { \ - bfa_ ## __mod ## _meminfo, \ - bfa_ ## __mod ## _attach, \ - bfa_ ## __mod ## _detach, \ - bfa_ ## __mod ## _start, \ - bfa_ ## __mod ## _stop, \ - bfa_ ## __mod ## _iocdisable, \ + .meminfo = bfa_ ## __mod ## _meminfo, \ + .attach = bfa_ ## __mod ## _attach, \ + .detach = bfa_ ## __mod ## _detach, \ + .start = bfa_ ## __mod ## _start, \ + .stop = bfa_ ## __mod ## _stop, \ + .iocdisable = bfa_ ## __mod ## _iocdisable, \ } #define BFA_CACHELINE_SZ (256) diff --git a/drivers/scsi/bfa/bfa_svc.c b/drivers/scsi/bfa/bfa_svc.c index 12de292..ec9f0ab 100644 --- a/drivers/scsi/bfa/bfa_svc.c +++ b/drivers/scsi/bfa/bfa_svc.c @@ -225,7 +225,7 @@ static void bfa_fcport_ln_sm_up_dn_nf(struct bfa_fcport_ln_s *ln, static void bfa_fcport_ln_sm_up_dn_up_nf(struct bfa_fcport_ln_s *ln, enum bfa_fcport_ln_sm_event event); -static struct bfa_sm_table_s hal_port_sm_table[] = { +static struct fcport_sm_table_s hal_port_sm_table[] = { {BFA_SM(bfa_fcport_sm_uninit), BFA_PORT_ST_UNINIT}, {BFA_SM(bfa_fcport_sm_enabling_qwait), BFA_PORT_ST_ENABLING_QWAIT}, {BFA_SM(bfa_fcport_sm_enabling), BFA_PORT_ST_ENABLING}, @@ -3642,7 +3642,7 @@ bfa_fcport_isr(struct bfa_s *bfa, struct bfi_msg_s *msg) fcport->event_arg.i2hmsg = i2hmsg; bfa_trc(bfa, msg->mhdr.msg_id); - bfa_trc(bfa, bfa_sm_to_state(hal_port_sm_table, fcport->sm)); + bfa_trc(bfa, fcport_sm_to_state(hal_port_sm_table, fcport->sm)); switch (msg->mhdr.msg_id) { case BFI_FCPORT_I2H_ENABLE_RSP: @@ -4077,7 +4077,7 @@ bfa_fcport_get_attr(struct bfa_s *bfa, struct bfa_port_attr_s *attr) attr->pport_cfg.path_tov = bfa_fcpim_path_tov_get(bfa); attr->pport_cfg.q_depth = bfa_fcpim_qdepth_get(bfa); - attr->port_state = bfa_sm_to_state(hal_port_sm_table, fcport->sm); + attr->port_state = fcport_sm_to_state(hal_port_sm_table, fcport->sm); attr->fec_state = fcport->fec_state; @@ -4159,7 +4159,7 @@ bfa_fcport_is_disabled(struct bfa_s *bfa) { struct bfa_fcport_s *fcport = BFA_FCPORT_MOD(bfa); - return bfa_sm_to_state(hal_port_sm_table, fcport->sm) == + return fcport_sm_to_state(hal_port_sm_table, fcport->sm) == BFA_PORT_ST_DISABLED; } @@ -4169,7 +4169,7 @@ bfa_fcport_is_dport(struct bfa_s *bfa) { struct bfa_fcport_s *fcport = BFA_FCPORT_MOD(bfa); - return (bfa_sm_to_state(hal_port_sm_table, fcport->sm) == + return (fcport_sm_to_state(hal_port_sm_table, fcport->sm) == BFA_PORT_ST_DPORT); } @@ -4178,7 +4178,7 @@ bfa_fcport_is_ddport(struct bfa_s *bfa) { struct bfa_fcport_s *fcport = BFA_FCPORT_MOD(bfa); - return (bfa_sm_to_state(hal_port_sm_table, fcport->sm) == + return (fcport_sm_to_state(hal_port_sm_table, fcport->sm) == BFA_PORT_ST_DDPORT); } diff --git a/drivers/scsi/bfa/bfa_svc.h b/drivers/scsi/bfa/bfa_svc.h index ea2278b..6f51a73 100644 --- a/drivers/scsi/bfa/bfa_svc.h +++ b/drivers/scsi/bfa/bfa_svc.h @@ -160,6 +160,8 @@ struct bfa_fcxp_rsp_info_s { u32 rsp_maxlen; /* max response length expected */ }; +typedef void (*bfa_sm_t)(void *sm, int event); + struct bfa_fcxp_s { struct list_head qe; /* fcxp queue element */ bfa_sm_t sm; /* state machine */ @@ -295,9 +297,11 @@ struct bfa_rport_info_s { /* * BFA rport data structure */ +enum bfa_rport_event; + struct bfa_rport_s { struct list_head qe; /* queue element */ - bfa_sm_t sm; /* state machine */ + void (*sm)(struct bfa_rport_s *, enum bfa_rport_event);/* state machine */ struct bfa_s *bfa; /* backpointer to BFA */ void *rport_drv; /* fcs/driver rport object */ u16 fw_handle; /* firmware rport handle */ @@ -388,10 +392,12 @@ void bfa_uf_res_recfg(struct bfa_s *bfa, u16 num_uf_fw); /* * LPS - bfa lport login/logout service interface */ +enum bfa_lps_event; + struct bfa_lps_s { struct list_head qe; /* queue element */ struct bfa_s *bfa; /* parent bfa instance */ - bfa_sm_t sm; /* finite state machine */ + void (*sm)(struct bfa_lps_s *, enum bfa_lps_event);/* finite state machine */ u8 bfa_tag; /* lport tag */ u8 fw_tag; /* lport fw tag */ u8 reqq; /* lport request queue */ @@ -450,9 +456,11 @@ void bfa_lps_isr(struct bfa_s *bfa, struct bfi_msg_s *msg); /* * Link notification data structure */ +enum bfa_fcport_ln_sm_event; + struct bfa_fcport_ln_s { struct bfa_fcport_s *fcport; - bfa_sm_t sm; + void (*sm)(struct bfa_fcport_ln_s *, enum bfa_fcport_ln_sm_event); struct bfa_cb_qe_s ln_qe; /* BFA callback queue elem for ln */ enum bfa_port_linkstate ln_event; /* ln event for callback */ }; @@ -466,7 +474,7 @@ struct bfa_fcport_trunk_s { */ struct bfa_fcport_s { struct bfa_s *bfa; /* parent BFA instance */ - bfa_sm_t sm; /* port state machine */ + void (*sm)(struct bfa_fcport_s *, enum bfa_fcport_sm_event); /* port state machine */ wwn_t nwwn; /* node wwn of physical port */ wwn_t pwwn; /* port wwn of physical oprt */ enum bfa_port_speed speed_sup; @@ -714,9 +722,11 @@ struct bfa_fcdiag_lb_s { u32 status; }; +enum bfa_dport_sm_event; + struct bfa_dport_s { struct bfa_s *bfa; /* Back pointer to BFA */ - bfa_sm_t sm; /* finite state machine */ + void (*sm)(struct bfa_dport_s *, enum bfa_dport_sm_event);/* finite state machine */ struct bfa_reqq_wait_s reqq_wait; bfa_cb_diag_t cbfn; void *cbarg; diff --git a/drivers/scsi/bfa/bfad.c b/drivers/scsi/bfa/bfad.c index 9d253cb..bb533ea 100644 --- a/drivers/scsi/bfa/bfad.c +++ b/drivers/scsi/bfa/bfad.c @@ -408,6 +408,16 @@ bfad_hcb_comp(void *arg, bfa_status_t status) complete(&fcomp->comp); } +void +bfad_stats_comp(void *arg, bfa_boolean_t _status) +{ + struct bfad_hal_comp *fcomp = (struct bfad_hal_comp *)arg; + bfa_status_t status = (bfa_status_t)_status; + + fcomp->status = status; + complete(&fcomp->comp); +} + /* * bfa_init callback */ @@ -1442,7 +1452,7 @@ bfad_pci_remove(struct pci_dev *pdev) * PCI Error Recovery entry, error detected. */ static pci_ers_result_t -bfad_pci_error_detected(struct pci_dev *pdev, pci_channel_state_t state) +bfad_pci_error_detected(struct pci_dev *pdev, enum pci_channel_state state) { struct bfad_s *bfad = pci_get_drvdata(pdev); unsigned long flags; diff --git a/drivers/scsi/bfa/bfad_bsg.c b/drivers/scsi/bfa/bfad_bsg.c index d1ad020..661c0f9 100644 --- a/drivers/scsi/bfa/bfad_bsg.c +++ b/drivers/scsi/bfa/bfad_bsg.c @@ -2145,7 +2145,7 @@ bfad_iocmd_fcport_get_stats(struct bfad_s *bfad, void *cmd) struct bfa_cb_pending_q_s cb_qe; init_completion(&fcomp.comp); - bfa_pending_q_init(&cb_qe, (bfa_cb_cbfn_t)bfad_hcb_comp, + bfa_pending_q_init(&cb_qe, bfad_stats_comp, &fcomp, &iocmd->stats); spin_lock_irqsave(&bfad->bfad_lock, flags); iocmd->status = bfa_fcport_get_stats(&bfad->bfa, &cb_qe); @@ -2169,7 +2169,7 @@ bfad_iocmd_fcport_reset_stats(struct bfad_s *bfad, void *cmd) struct bfa_cb_pending_q_s cb_qe; init_completion(&fcomp.comp); - bfa_pending_q_init(&cb_qe, (bfa_cb_cbfn_t)bfad_hcb_comp, &fcomp, NULL); + bfa_pending_q_init(&cb_qe, bfad_stats_comp, &fcomp, NULL); spin_lock_irqsave(&bfad->bfad_lock, flags); iocmd->status = bfa_fcport_clear_stats(&bfad->bfa, &cb_qe); @@ -2453,7 +2453,7 @@ bfad_iocmd_qos_get_stats(struct bfad_s *bfad, void *cmd) struct bfa_fcport_s *fcport = BFA_FCPORT_MOD(&bfad->bfa); init_completion(&fcomp.comp); - bfa_pending_q_init(&cb_qe, (bfa_cb_cbfn_t)bfad_hcb_comp, + bfa_pending_q_init(&cb_qe, bfad_stats_comp, &fcomp, &iocmd->stats); spin_lock_irqsave(&bfad->bfad_lock, flags); @@ -2484,7 +2484,7 @@ bfad_iocmd_qos_reset_stats(struct bfad_s *bfad, void *cmd) struct bfa_fcport_s *fcport = BFA_FCPORT_MOD(&bfad->bfa); init_completion(&fcomp.comp); - bfa_pending_q_init(&cb_qe, (bfa_cb_cbfn_t)bfad_hcb_comp, + bfa_pending_q_init(&cb_qe, bfad_stats_comp, &fcomp, NULL); spin_lock_irqsave(&bfad->bfad_lock, flags); diff --git a/drivers/scsi/bfa/bfad_drv.h b/drivers/scsi/bfa/bfad_drv.h index f9e8620..807a983 100644 --- a/drivers/scsi/bfa/bfad_drv.h +++ b/drivers/scsi/bfa/bfad_drv.h @@ -187,8 +187,10 @@ union bfad_tmp_buf { /* * BFAD (PCI function) data structure */ +enum bfad_sm_event; + struct bfad_s { - bfa_sm_t sm; /* state machine */ + void (*sm)(struct bfad_s *, enum bfad_sm_event); /* state machine */ struct list_head list_entry; struct bfa_s bfa; struct bfa_fcs_s bfa_fcs; @@ -309,6 +311,7 @@ void bfad_fcs_stop(struct bfad_s *bfad); void bfad_remove_intr(struct bfad_s *bfad); void bfad_hal_mem_release(struct bfad_s *bfad); void bfad_hcb_comp(void *arg, bfa_status_t status); +void bfad_stats_comp(void *arg, bfa_boolean_t _status); int bfad_setup_intr(struct bfad_s *bfad); void bfad_remove_intr(struct bfad_s *bfad); diff --git a/drivers/scsi/csiostor/csio_defs.h b/drivers/scsi/csiostor/csio_defs.h index c38017b..3268e62 100644 --- a/drivers/scsi/csiostor/csio_defs.h +++ b/drivers/scsi/csiostor/csio_defs.h @@ -73,7 +73,8 @@ csio_list_deleted(struct list_head *list) #define csio_list_prev(elem) (((struct list_head *)(elem))->prev) /* State machine */ -typedef void (*csio_sm_state_t)(void *, uint32_t); +struct csio_sm; +typedef void (*csio_sm_state_t)(struct csio_sm *, uint32_t); struct csio_sm { struct list_head sm_list; @@ -81,9 +82,9 @@ struct csio_sm { }; static inline void -csio_set_state(void *smp, void *state) +csio_set_state(struct csio_sm *smp, csio_sm_state_t state) { - ((struct csio_sm *)smp)->sm_state = (csio_sm_state_t)state; + smp->sm_state = state; } static inline void @@ -93,21 +94,21 @@ csio_init_state(struct csio_sm *smp, void *state) } static inline void -csio_post_event(void *smp, uint32_t evt) +csio_post_event(struct csio_sm *smp, uint32_t evt) { - ((struct csio_sm *)smp)->sm_state(smp, evt); + smp->sm_state(smp, evt); } static inline csio_sm_state_t -csio_get_state(void *smp) +csio_get_state(struct csio_sm *smp) { - return ((struct csio_sm *)smp)->sm_state; + return smp->sm_state; } static inline bool -csio_match_state(void *smp, void *state) +csio_match_state(struct csio_sm *smp, csio_sm_state_t state) { - return (csio_get_state(smp) == (csio_sm_state_t)state); + return (csio_get_state(smp) == state); } #define CSIO_ASSERT(cond) BUG_ON(!(cond)) diff --git a/drivers/scsi/csiostor/csio_hw.c b/drivers/scsi/csiostor/csio_hw.c index 622bdab..1a31d41 100644 --- a/drivers/scsi/csiostor/csio_hw.c +++ b/drivers/scsi/csiostor/csio_hw.c @@ -89,15 +89,15 @@ static void csio_mgmtm_cleanup(struct csio_mgmtm *); static void csio_hw_mbm_cleanup(struct csio_hw *); /* State machine forward declarations */ -static void csio_hws_uninit(struct csio_hw *, enum csio_hw_ev); -static void csio_hws_configuring(struct csio_hw *, enum csio_hw_ev); -static void csio_hws_initializing(struct csio_hw *, enum csio_hw_ev); -static void csio_hws_ready(struct csio_hw *, enum csio_hw_ev); -static void csio_hws_quiescing(struct csio_hw *, enum csio_hw_ev); -static void csio_hws_quiesced(struct csio_hw *, enum csio_hw_ev); -static void csio_hws_resetting(struct csio_hw *, enum csio_hw_ev); -static void csio_hws_removing(struct csio_hw *, enum csio_hw_ev); -static void csio_hws_pcierr(struct csio_hw *, enum csio_hw_ev); +static void csio_hws_uninit(struct csio_sm *, uint32_t); +static void csio_hws_configuring(struct csio_sm *, uint32_t); +static void csio_hws_initializing(struct csio_sm *, uint32_t); +static void csio_hws_ready(struct csio_sm *, uint32_t); +static void csio_hws_quiescing(struct csio_sm *, uint32_t); +static void csio_hws_quiesced(struct csio_sm *, uint32_t); +static void csio_hws_resetting(struct csio_sm *, uint32_t); +static void csio_hws_removing(struct csio_sm *, uint32_t); +static void csio_hws_pcierr(struct csio_sm *, uint32_t); static void csio_hw_initialize(struct csio_hw *hw); static void csio_evtq_stop(struct csio_hw *hw); @@ -105,12 +105,12 @@ static void csio_evtq_start(struct csio_hw *hw); int csio_is_hw_ready(struct csio_hw *hw) { - return csio_match_state(hw, csio_hws_ready); + return csio_match_state(&hw->sm, csio_hws_ready); } int csio_is_hw_removing(struct csio_hw *hw) { - return csio_match_state(hw, csio_hws_removing); + return csio_match_state(&hw->sm, csio_hws_removing); } @@ -2326,8 +2326,11 @@ csio_hw_fatal_err(struct csio_hw *hw) * */ static void -csio_hws_uninit(struct csio_hw *hw, enum csio_hw_ev evt) +csio_hws_uninit(struct csio_sm *_hw, uint32_t _evt) { + struct csio_hw *hw = container_of(_hw, struct csio_hw, sm); + enum csio_hw_ev evt = _evt; + hw->prev_evt = hw->cur_evt; hw->cur_evt = evt; CSIO_INC_STATS(hw, n_evt_sm[evt]); @@ -2351,8 +2354,11 @@ csio_hws_uninit(struct csio_hw *hw, enum csio_hw_ev evt) * */ static void -csio_hws_configuring(struct csio_hw *hw, enum csio_hw_ev evt) +csio_hws_configuring(struct csio_sm *_hw, uint32_t _evt) { + struct csio_hw *hw = container_of(_hw, struct csio_hw, sm); + enum csio_hw_ev evt = _evt; + hw->prev_evt = hw->cur_evt; hw->cur_evt = evt; CSIO_INC_STATS(hw, n_evt_sm[evt]); @@ -2389,8 +2395,11 @@ csio_hws_configuring(struct csio_hw *hw, enum csio_hw_ev evt) * */ static void -csio_hws_initializing(struct csio_hw *hw, enum csio_hw_ev evt) +csio_hws_initializing(struct csio_sm *_hw, uint32_t _evt) { + struct csio_hw *hw = container_of(_hw, struct csio_hw, sm); + enum csio_hw_ev evt = _evt; + hw->prev_evt = hw->cur_evt; hw->cur_evt = evt; CSIO_INC_STATS(hw, n_evt_sm[evt]); @@ -2427,8 +2436,11 @@ csio_hws_initializing(struct csio_hw *hw, enum csio_hw_ev evt) * */ static void -csio_hws_ready(struct csio_hw *hw, enum csio_hw_ev evt) +csio_hws_ready(struct csio_sm *_hw, uint32_t _evt) { + struct csio_hw *hw = container_of(_hw, struct csio_hw, sm); + enum csio_hw_ev evt = _evt; + /* Remember the event */ hw->evtflag = evt; @@ -2476,8 +2488,11 @@ csio_hws_ready(struct csio_hw *hw, enum csio_hw_ev evt) * */ static void -csio_hws_quiescing(struct csio_hw *hw, enum csio_hw_ev evt) +csio_hws_quiescing(struct csio_sm *_hw, uint32_t _evt) { + struct csio_hw *hw = container_of(_hw, struct csio_hw, sm); + enum csio_hw_ev evt = _evt; + hw->prev_evt = hw->cur_evt; hw->cur_evt = evt; CSIO_INC_STATS(hw, n_evt_sm[evt]); @@ -2536,8 +2551,11 @@ csio_hws_quiescing(struct csio_hw *hw, enum csio_hw_ev evt) * */ static void -csio_hws_quiesced(struct csio_hw *hw, enum csio_hw_ev evt) +csio_hws_quiesced(struct csio_sm *_hw, uint32_t _evt) { + struct csio_hw *hw = container_of(_hw, struct csio_hw, sm); + enum csio_hw_ev evt = _evt; + hw->prev_evt = hw->cur_evt; hw->cur_evt = evt; CSIO_INC_STATS(hw, n_evt_sm[evt]); @@ -2561,8 +2579,11 @@ csio_hws_quiesced(struct csio_hw *hw, enum csio_hw_ev evt) * */ static void -csio_hws_resetting(struct csio_hw *hw, enum csio_hw_ev evt) +csio_hws_resetting(struct csio_sm *_hw, uint32_t _evt) { + struct csio_hw *hw = container_of(_hw, struct csio_hw, sm); + enum csio_hw_ev evt = _evt; + hw->prev_evt = hw->cur_evt; hw->cur_evt = evt; CSIO_INC_STATS(hw, n_evt_sm[evt]); @@ -2587,8 +2608,11 @@ csio_hws_resetting(struct csio_hw *hw, enum csio_hw_ev evt) * */ static void -csio_hws_removing(struct csio_hw *hw, enum csio_hw_ev evt) +csio_hws_removing(struct csio_sm *_hw, uint32_t _evt) { + struct csio_hw *hw = container_of(_hw, struct csio_hw, sm); + enum csio_hw_ev evt = _evt; + hw->prev_evt = hw->cur_evt; hw->cur_evt = evt; CSIO_INC_STATS(hw, n_evt_sm[evt]); @@ -2622,8 +2646,11 @@ csio_hws_removing(struct csio_hw *hw, enum csio_hw_ev evt) * */ static void -csio_hws_pcierr(struct csio_hw *hw, enum csio_hw_ev evt) +csio_hws_pcierr(struct csio_sm *_hw, uint32_t _evt) { + struct csio_hw *hw = container_of(_hw, struct csio_hw, sm); + enum csio_hw_ev evt = _evt; + hw->prev_evt = hw->cur_evt; hw->cur_evt = evt; CSIO_INC_STATS(hw, n_evt_sm[evt]); diff --git a/drivers/scsi/csiostor/csio_init.c b/drivers/scsi/csiostor/csio_init.c index dbe416f..25a9a5b 100644 --- a/drivers/scsi/csiostor/csio_init.c +++ b/drivers/scsi/csiostor/csio_init.c @@ -1053,7 +1053,7 @@ static void csio_remove_one(struct pci_dev *pdev) * */ static pci_ers_result_t -csio_pci_error_detected(struct pci_dev *pdev, pci_channel_state_t state) +csio_pci_error_detected(struct pci_dev *pdev, enum pci_channel_state state) { struct csio_hw *hw = pci_get_drvdata(pdev); diff --git a/drivers/scsi/csiostor/csio_lnode.c b/drivers/scsi/csiostor/csio_lnode.c index c00b2ff..da72dbc 100644 --- a/drivers/scsi/csiostor/csio_lnode.c +++ b/drivers/scsi/csiostor/csio_lnode.c @@ -55,10 +55,10 @@ int csio_fdmi_enable = 1; #define PORT_ID_PTR(_x) ((uint8_t *)(&_x) + 1) /* Lnode SM declarations */ -static void csio_lns_uninit(struct csio_lnode *, enum csio_ln_ev); -static void csio_lns_online(struct csio_lnode *, enum csio_ln_ev); -static void csio_lns_ready(struct csio_lnode *, enum csio_ln_ev); -static void csio_lns_offline(struct csio_lnode *, enum csio_ln_ev); +static void csio_lns_uninit(struct csio_sm *, uint32_t); +static void csio_lns_online(struct csio_sm *, uint32_t); +static void csio_lns_ready(struct csio_sm *, uint32_t); +static void csio_lns_offline(struct csio_sm *, uint32_t); static int csio_ln_mgmt_submit_req(struct csio_ioreq *, void (*io_cbfn) (struct csio_hw *, struct csio_ioreq *), @@ -1077,7 +1077,7 @@ csio_handle_link_down(struct csio_hw *hw, uint8_t portid, uint32_t fcfi, int csio_is_lnode_ready(struct csio_lnode *ln) { - return (csio_get_state(ln) == ((csio_sm_state_t)csio_lns_ready)); + return (csio_get_state(&ln->sm) == csio_lns_ready); } /*****************************************************************************/ @@ -1093,8 +1093,10 @@ csio_is_lnode_ready(struct csio_lnode *ln) * Return - none. */ static void -csio_lns_uninit(struct csio_lnode *ln, enum csio_ln_ev evt) +csio_lns_uninit(struct csio_sm *_ln, uint32_t _evt) { + struct csio_lnode *ln = container_of(_ln, struct csio_lnode, sm); + enum csio_ln_ev evt = _evt; struct csio_hw *hw = csio_lnode_to_hw(ln); struct csio_lnode *rln = hw->rln; int rv; @@ -1146,8 +1148,10 @@ csio_lns_uninit(struct csio_lnode *ln, enum csio_ln_ev evt) * Return - none. */ static void -csio_lns_online(struct csio_lnode *ln, enum csio_ln_ev evt) +csio_lns_online(struct csio_sm *_ln, uint32_t _evt) { + struct csio_lnode *ln = container_of(_ln, struct csio_lnode, sm); + enum csio_ln_ev evt = _evt; struct csio_hw *hw = csio_lnode_to_hw(ln); CSIO_INC_STATS(ln, n_evt_sm[evt]); @@ -1198,8 +1202,10 @@ csio_lns_online(struct csio_lnode *ln, enum csio_ln_ev evt) * Return - none. */ static void -csio_lns_ready(struct csio_lnode *ln, enum csio_ln_ev evt) +csio_lns_ready(struct csio_sm *_ln, uint32_t _evt) { + struct csio_lnode *ln = container_of(_ln, struct csio_lnode, sm); + enum csio_ln_ev evt = _evt; struct csio_hw *hw = csio_lnode_to_hw(ln); CSIO_INC_STATS(ln, n_evt_sm[evt]); @@ -1272,8 +1278,10 @@ csio_lns_ready(struct csio_lnode *ln, enum csio_ln_ev evt) * Return - none. */ static void -csio_lns_offline(struct csio_lnode *ln, enum csio_ln_ev evt) +csio_lns_offline(struct csio_sm *_ln, uint32_t _evt) { + struct csio_lnode *ln = container_of(_ln, struct csio_lnode, sm); + enum csio_ln_ev evt = _evt; struct csio_hw *hw = csio_lnode_to_hw(ln); struct csio_lnode *rln = hw->rln; int rv; @@ -1349,15 +1357,15 @@ csio_free_fcfinfo(struct kref *kref) void csio_lnode_state_to_str(struct csio_lnode *ln, int8_t *str) { - if (csio_get_state(ln) == ((csio_sm_state_t)csio_lns_uninit)) { + if (csio_get_state(&ln->sm) == csio_lns_uninit) { strcpy(str, "UNINIT"); return; } - if (csio_get_state(ln) == ((csio_sm_state_t)csio_lns_ready)) { + if (csio_get_state(&ln->sm) == csio_lns_ready) { strcpy(str, "READY"); return; } - if (csio_get_state(ln) == ((csio_sm_state_t)csio_lns_offline)) { + if (csio_get_state(&ln->sm) == csio_lns_offline) { strcpy(str, "OFFLINE"); return; } diff --git a/drivers/scsi/csiostor/csio_rnode.c b/drivers/scsi/csiostor/csio_rnode.c index e9c3b04..4ba3a59 100644 --- a/drivers/scsi/csiostor/csio_rnode.c +++ b/drivers/scsi/csiostor/csio_rnode.c @@ -46,10 +46,10 @@ static int csio_rnode_init(struct csio_rnode *, struct csio_lnode *); static void csio_rnode_exit(struct csio_rnode *); /* Static machine forward declarations */ -static void csio_rns_uninit(struct csio_rnode *, enum csio_rn_ev); -static void csio_rns_ready(struct csio_rnode *, enum csio_rn_ev); -static void csio_rns_offline(struct csio_rnode *, enum csio_rn_ev); -static void csio_rns_disappeared(struct csio_rnode *, enum csio_rn_ev); +static void csio_rns_uninit(struct csio_sm *, uint32_t); +static void csio_rns_ready(struct csio_sm *, uint32_t); +static void csio_rns_offline(struct csio_sm *, uint32_t); +static void csio_rns_disappeared(struct csio_sm *, uint32_t); /* RNF event mapping */ static enum csio_rn_ev fwevt_to_rnevt[] = { @@ -88,13 +88,13 @@ static enum csio_rn_ev fwevt_to_rnevt[] = { int csio_is_rnode_ready(struct csio_rnode *rn) { - return csio_match_state(rn, csio_rns_ready); + return csio_match_state(&rn->sm, csio_rns_ready); } static int csio_is_rnode_uninit(struct csio_rnode *rn) { - return csio_match_state(rn, csio_rns_uninit); + return csio_match_state(&rn->sm, csio_rns_uninit); } static int @@ -601,8 +601,10 @@ __csio_unreg_rnode(struct csio_rnode *rn) * */ static void -csio_rns_uninit(struct csio_rnode *rn, enum csio_rn_ev evt) +csio_rns_uninit(struct csio_sm *_rn, uint32_t _evt) { + struct csio_rnode *rn = container_of(_rn, struct csio_rnode, sm); + enum csio_rn_ev evt = _evt; struct csio_lnode *ln = csio_rnode_to_lnode(rn); int ret = 0; @@ -641,8 +643,10 @@ csio_rns_uninit(struct csio_rnode *rn, enum csio_rn_ev evt) * */ static void -csio_rns_ready(struct csio_rnode *rn, enum csio_rn_ev evt) +csio_rns_ready(struct csio_sm *_rn, uint32_t _evt) { + struct csio_rnode *rn = container_of(_rn, struct csio_rnode, sm); + enum csio_rn_ev evt = _evt; struct csio_lnode *ln = csio_rnode_to_lnode(rn); int ret = 0; @@ -726,8 +730,10 @@ csio_rns_ready(struct csio_rnode *rn, enum csio_rn_ev evt) * */ static void -csio_rns_offline(struct csio_rnode *rn, enum csio_rn_ev evt) +csio_rns_offline(struct csio_sm *_rn, uint32_t _evt) { + struct csio_rnode *rn = container_of(_rn, struct csio_rnode, sm); + enum csio_rn_ev evt = _evt; struct csio_lnode *ln = csio_rnode_to_lnode(rn); int ret = 0; @@ -785,8 +791,10 @@ csio_rns_offline(struct csio_rnode *rn, enum csio_rn_ev evt) * */ static void -csio_rns_disappeared(struct csio_rnode *rn, enum csio_rn_ev evt) +csio_rns_disappeared(struct csio_sm *_rn, uint32_t _evt) { + struct csio_rnode *rn = container_of(_rn, struct csio_rnode, sm); + enum csio_rn_ev evt = _evt; struct csio_lnode *ln = csio_rnode_to_lnode(rn); int ret = 0; diff --git a/drivers/scsi/csiostor/csio_scsi.c b/drivers/scsi/csiostor/csio_scsi.c index 89a52b9..0262e39 100644 --- a/drivers/scsi/csiostor/csio_scsi.c +++ b/drivers/scsi/csiostor/csio_scsi.c @@ -65,12 +65,12 @@ static int csio_ddp_descs = 128; static int csio_do_abrt_cls(struct csio_hw *, struct csio_ioreq *, bool); -static void csio_scsis_uninit(struct csio_ioreq *, enum csio_scsi_ev); -static void csio_scsis_io_active(struct csio_ioreq *, enum csio_scsi_ev); -static void csio_scsis_tm_active(struct csio_ioreq *, enum csio_scsi_ev); -static void csio_scsis_aborting(struct csio_ioreq *, enum csio_scsi_ev); -static void csio_scsis_closing(struct csio_ioreq *, enum csio_scsi_ev); -static void csio_scsis_shost_cmpl_await(struct csio_ioreq *, enum csio_scsi_ev); +static void csio_scsis_uninit(struct csio_sm *, uint32_t); +static void csio_scsis_io_active(struct csio_sm *, uint32_t); +static void csio_scsis_tm_active(struct csio_sm *, uint32_t); +static void csio_scsis_aborting(struct csio_sm *, uint32_t); +static void csio_scsis_closing(struct csio_sm *, uint32_t); +static void csio_scsis_shost_cmpl_await(struct csio_sm *, uint32_t); /* * csio_scsi_match_io - Match an ioreq with the given SCSI level data. @@ -700,8 +700,10 @@ csio_scsi_abrt_cls(struct csio_ioreq *req, bool abort) /* START: SCSI SM */ /*****************************************************************************/ static void -csio_scsis_uninit(struct csio_ioreq *req, enum csio_scsi_ev evt) +csio_scsis_uninit(struct csio_sm *_req, uint32_t _evt) { + struct csio_ioreq *req = container_of(_req, struct csio_ioreq, sm); + enum csio_scsi_ev evt = _evt; struct csio_hw *hw = req->lnode->hwp; struct csio_scsim *scsim = csio_hw_to_scsim(hw); @@ -770,8 +772,10 @@ csio_scsis_uninit(struct csio_ioreq *req, enum csio_scsi_ev evt) } static void -csio_scsis_io_active(struct csio_ioreq *req, enum csio_scsi_ev evt) +csio_scsis_io_active(struct csio_sm *_req, uint32_t _evt) { + struct csio_ioreq *req = container_of(_req, struct csio_ioreq, sm); + enum csio_scsi_ev evt = _evt; struct csio_hw *hw = req->lnode->hwp; struct csio_scsim *scm = csio_hw_to_scsim(hw); struct csio_rnode *rn; @@ -842,8 +846,10 @@ csio_scsis_io_active(struct csio_ioreq *req, enum csio_scsi_ev evt) } static void -csio_scsis_tm_active(struct csio_ioreq *req, enum csio_scsi_ev evt) +csio_scsis_tm_active(struct csio_sm *_req, uint32_t _evt) { + struct csio_ioreq *req = container_of(_req, struct csio_ioreq, sm); + enum csio_scsi_ev evt = _evt; struct csio_hw *hw = req->lnode->hwp; struct csio_scsim *scm = csio_hw_to_scsim(hw); @@ -885,8 +891,10 @@ csio_scsis_tm_active(struct csio_ioreq *req, enum csio_scsi_ev evt) } static void -csio_scsis_aborting(struct csio_ioreq *req, enum csio_scsi_ev evt) +csio_scsis_aborting(struct csio_sm *_req, uint32_t _evt) { + struct csio_ioreq *req = container_of(_req, struct csio_ioreq, sm); + enum csio_scsi_ev evt = _evt; struct csio_hw *hw = req->lnode->hwp; struct csio_scsim *scm = csio_hw_to_scsim(hw); @@ -982,8 +990,10 @@ csio_scsis_aborting(struct csio_ioreq *req, enum csio_scsi_ev evt) } static void -csio_scsis_closing(struct csio_ioreq *req, enum csio_scsi_ev evt) +csio_scsis_closing(struct csio_sm *_req, uint32_t _evt) { + struct csio_ioreq *req = container_of(_req, struct csio_ioreq, sm); + enum csio_scsi_ev evt = _evt; struct csio_hw *hw = req->lnode->hwp; struct csio_scsim *scm = csio_hw_to_scsim(hw); @@ -1046,8 +1056,11 @@ csio_scsis_closing(struct csio_ioreq *req, enum csio_scsi_ev evt) } static void -csio_scsis_shost_cmpl_await(struct csio_ioreq *req, enum csio_scsi_ev evt) +csio_scsis_shost_cmpl_await(struct csio_sm *_req, uint32_t _evt) { + struct csio_ioreq *req = container_of(_req, struct csio_ioreq, sm); + enum csio_scsi_ev evt = _evt; + switch (evt) { case CSIO_SCSIE_ABORT: case CSIO_SCSIE_CLOSE: diff --git a/drivers/scsi/fcoe/fcoe_transport.c b/drivers/scsi/fcoe/fcoe_transport.c index 375c536..618843b 100644 --- a/drivers/scsi/fcoe/fcoe_transport.c +++ b/drivers/scsi/fcoe/fcoe_transport.c @@ -32,13 +32,13 @@ MODULE_AUTHOR("Open-FCoE.org"); MODULE_DESCRIPTION("FIP discovery protocol and FCoE transport for FCoE HBAs"); MODULE_LICENSE("GPL v2"); -static int fcoe_transport_create(const char *, struct kernel_param *); -static int fcoe_transport_destroy(const char *, struct kernel_param *); +static int fcoe_transport_create(const char *, const struct kernel_param *); +static int fcoe_transport_destroy(const char *, const struct kernel_param *); static int fcoe_transport_show(char *buffer, const struct kernel_param *kp); static struct fcoe_transport *fcoe_transport_lookup(struct net_device *device); static struct fcoe_transport *fcoe_netdev_map_lookup(struct net_device *device); -static int fcoe_transport_enable(const char *, struct kernel_param *); -static int fcoe_transport_disable(const char *, struct kernel_param *); +static int fcoe_transport_enable(const char *, const struct kernel_param *); +static int fcoe_transport_disable(const char *, const struct kernel_param *); static int libfcoe_device_notification(struct notifier_block *notifier, ulong event, void *ptr); @@ -865,7 +865,7 @@ EXPORT_SYMBOL(fcoe_ctlr_destroy_store); * * Returns: 0 for success */ -static int fcoe_transport_create(const char *buffer, struct kernel_param *kp) +static int fcoe_transport_create(const char *buffer, const struct kernel_param *kp) { int rc = -ENODEV; struct net_device *netdev = NULL; @@ -930,7 +930,7 @@ static int fcoe_transport_create(const char *buffer, struct kernel_param *kp) * * Returns: 0 for success */ -static int fcoe_transport_destroy(const char *buffer, struct kernel_param *kp) +static int fcoe_transport_destroy(const char *buffer, const struct kernel_param *kp) { int rc = -ENODEV; struct net_device *netdev = NULL; @@ -974,7 +974,7 @@ static int fcoe_transport_destroy(const char *buffer, struct kernel_param *kp) * * Returns: 0 for success */ -static int fcoe_transport_disable(const char *buffer, struct kernel_param *kp) +static int fcoe_transport_disable(const char *buffer, const struct kernel_param *kp) { int rc = -ENODEV; struct net_device *netdev = NULL; @@ -1008,7 +1008,7 @@ static int fcoe_transport_disable(const char *buffer, struct kernel_param *kp) * * Returns: 0 for success */ -static int fcoe_transport_enable(const char *buffer, struct kernel_param *kp) +static int fcoe_transport_enable(const char *buffer, const struct kernel_param *kp) { int rc = -ENODEV; struct net_device *netdev = NULL; diff --git a/drivers/scsi/ipr.c b/drivers/scsi/ipr.c index 5324741..7cf2ceb 100644 --- a/drivers/scsi/ipr.c +++ b/drivers/scsi/ipr.c @@ -948,7 +948,7 @@ static void ipr_send_command(struct ipr_cmnd *ipr_cmd) **/ static void ipr_do_req(struct ipr_cmnd *ipr_cmd, void (*done) (struct ipr_cmnd *), - void (*timeout_func) (struct ipr_cmnd *), u32 timeout) + void (*timeout_func) (unsigned long), u32 timeout) { list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); @@ -956,7 +956,7 @@ static void ipr_do_req(struct ipr_cmnd *ipr_cmd, ipr_cmd->timer.data = (unsigned long) ipr_cmd; ipr_cmd->timer.expires = jiffies + timeout; - ipr_cmd->timer.function = (void (*)(unsigned long))timeout_func; + ipr_cmd->timer.function = timeout_func; add_timer(&ipr_cmd->timer); @@ -1038,7 +1038,7 @@ static void ipr_init_ioadl(struct ipr_cmnd *ipr_cmd, dma_addr_t dma_addr, * none **/ static void ipr_send_blocking_cmd(struct ipr_cmnd *ipr_cmd, - void (*timeout_func) (struct ipr_cmnd *ipr_cmd), + void (*timeout_func) (unsigned long ipr_cmd), u32 timeout) { struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; @@ -2622,8 +2622,9 @@ static void ipr_process_error(struct ipr_cmnd *ipr_cmd) * Return value: * none **/ -static void ipr_timeout(struct ipr_cmnd *ipr_cmd) +static void ipr_timeout(unsigned long _ipr_cmd) { + struct ipr_cmnd *ipr_cmd = (struct ipr_cmnd *)_ipr_cmd; unsigned long lock_flags = 0; struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; @@ -2654,8 +2655,9 @@ static void ipr_timeout(struct ipr_cmnd *ipr_cmd) * Return value: * none **/ -static void ipr_oper_timeout(struct ipr_cmnd *ipr_cmd) +static void ipr_oper_timeout(unsigned long _ipr_cmd) { + struct ipr_cmnd *ipr_cmd = (struct ipr_cmnd *)_ipr_cmd; unsigned long lock_flags = 0; struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; @@ -5348,8 +5350,9 @@ static void ipr_bus_reset_done(struct ipr_cmnd *ipr_cmd) * Return value: * none **/ -static void ipr_abort_timeout(struct ipr_cmnd *ipr_cmd) +static void ipr_abort_timeout(unsigned long _ipr_cmd) { + struct ipr_cmnd *ipr_cmd = (struct ipr_cmnd *)_ipr_cmd; struct ipr_cmnd *reset_cmd; struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; struct ipr_cmd_pkt *cmd_pkt; @@ -8125,8 +8128,9 @@ static int ipr_ioafp_identify_hrrq(struct ipr_cmnd *ipr_cmd) * Return value: * none **/ -static void ipr_reset_timer_done(struct ipr_cmnd *ipr_cmd) +static void ipr_reset_timer_done(unsigned long _ipr_cmd) { + struct ipr_cmnd *ipr_cmd = (struct ipr_cmnd *)_ipr_cmd; struct ipr_ioa_cfg *ioa_cfg = ipr_cmd->ioa_cfg; unsigned long lock_flags = 0; @@ -8164,7 +8168,7 @@ static void ipr_reset_start_timer(struct ipr_cmnd *ipr_cmd, ipr_cmd->timer.data = (unsigned long) ipr_cmd; ipr_cmd->timer.expires = jiffies + timeout; - ipr_cmd->timer.function = (void (*)(unsigned long))ipr_reset_timer_done; + ipr_cmd->timer.function = ipr_reset_timer_done; add_timer(&ipr_cmd->timer); } @@ -8250,7 +8254,7 @@ static int ipr_reset_next_stage(struct ipr_cmnd *ipr_cmd) ipr_cmd->timer.data = (unsigned long) ipr_cmd; ipr_cmd->timer.expires = jiffies + stage_time * HZ; - ipr_cmd->timer.function = (void (*)(unsigned long))ipr_oper_timeout; + ipr_cmd->timer.function = ipr_oper_timeout; ipr_cmd->done = ipr_reset_ioa_job; add_timer(&ipr_cmd->timer); @@ -8322,7 +8326,7 @@ static int ipr_reset_enable_ioa(struct ipr_cmnd *ipr_cmd) ipr_cmd->timer.data = (unsigned long) ipr_cmd; ipr_cmd->timer.expires = jiffies + (ioa_cfg->transop_timeout * HZ); - ipr_cmd->timer.function = (void (*)(unsigned long))ipr_oper_timeout; + ipr_cmd->timer.function = ipr_oper_timeout; ipr_cmd->done = ipr_reset_ioa_job; add_timer(&ipr_cmd->timer); list_add_tail(&ipr_cmd->queue, &ipr_cmd->hrrq->hrrq_pending_q); @@ -9310,7 +9314,7 @@ static void ipr_pci_perm_failure(struct pci_dev *pdev) * PCI_ERS_RESULT_NEED_RESET or PCI_ERS_RESULT_DISCONNECT */ static pci_ers_result_t ipr_pci_error_detected(struct pci_dev *pdev, - pci_channel_state_t state) + enum pci_channel_state state) { switch (state) { case pci_channel_io_frozen: diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c index a1a5ceb..8e83e34 100644 --- a/drivers/scsi/mpt3sas/mpt3sas_base.c +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c @@ -105,7 +105,7 @@ _base_get_ioc_facts(struct MPT3SAS_ADAPTER *ioc); * */ static int -_scsih_set_fwfault_debug(const char *val, struct kernel_param *kp) +_scsih_set_fwfault_debug(const char *val, const struct kernel_param *kp) { int ret = param_set_int(val, kp); struct MPT3SAS_ADAPTER *ioc; diff --git a/drivers/scsi/mpt3sas/mpt3sas_scsih.c b/drivers/scsi/mpt3sas/mpt3sas_scsih.c index f84a608..7b4dfd4 100644 --- a/drivers/scsi/mpt3sas/mpt3sas_scsih.c +++ b/drivers/scsi/mpt3sas/mpt3sas_scsih.c @@ -280,7 +280,7 @@ struct _scsi_io_transfer { * Note: The logging levels are defined in mpt3sas_debug.h. */ static int -_scsih_set_debug_level(const char *val, struct kernel_param *kp) +_scsih_set_debug_level(const char *val, const struct kernel_param *kp) { int ret = param_set_int(val, kp); struct MPT3SAS_ADAPTER *ioc; diff --git a/drivers/scsi/pmcraid.c b/drivers/scsi/pmcraid.c index 68a5c34..1f67db5 100644 --- a/drivers/scsi/pmcraid.c +++ b/drivers/scsi/pmcraid.c @@ -557,8 +557,9 @@ static void pmcraid_reset_type(struct pmcraid_instance *pinstance) static void pmcraid_ioa_reset(struct pmcraid_cmd *); -static void pmcraid_bist_done(struct pmcraid_cmd *cmd) +static void pmcraid_bist_done(unsigned long _cmd) { + struct pmcraid_cmd *cmd = (struct pmcraid_cmd *)_cmd; struct pmcraid_instance *pinstance = cmd->drv_inst; unsigned long lock_flags; int rc; @@ -573,8 +574,7 @@ static void pmcraid_bist_done(struct pmcraid_cmd *cmd) cmd->timer.expires = jiffies + cmd->time_left; cmd->time_left = 0; cmd->timer.data = (unsigned long)cmd; - cmd->timer.function = - (void (*)(unsigned long))pmcraid_bist_done; + cmd->timer.function = pmcraid_bist_done; add_timer(&cmd->timer); } else { cmd->time_left = 0; @@ -607,7 +607,7 @@ static void pmcraid_start_bist(struct pmcraid_cmd *cmd) cmd->time_left = msecs_to_jiffies(PMCRAID_BIST_TIMEOUT); cmd->timer.data = (unsigned long)cmd; cmd->timer.expires = jiffies + msecs_to_jiffies(PMCRAID_BIST_TIMEOUT); - cmd->timer.function = (void (*)(unsigned long))pmcraid_bist_done; + cmd->timer.function = pmcraid_bist_done; add_timer(&cmd->timer); } @@ -617,8 +617,9 @@ static void pmcraid_start_bist(struct pmcraid_cmd *cmd) * Return value * None */ -static void pmcraid_reset_alert_done(struct pmcraid_cmd *cmd) +static void pmcraid_reset_alert_done(unsigned long _cmd) { + struct pmcraid_cmd *cmd = (struct pmcraid_cmd *)_cmd; struct pmcraid_instance *pinstance = cmd->drv_inst; u32 status = ioread32(pinstance->ioa_status); unsigned long lock_flags; @@ -639,8 +640,7 @@ static void pmcraid_reset_alert_done(struct pmcraid_cmd *cmd) cmd->time_left -= PMCRAID_CHECK_FOR_RESET_TIMEOUT; cmd->timer.data = (unsigned long)cmd; cmd->timer.expires = jiffies + PMCRAID_CHECK_FOR_RESET_TIMEOUT; - cmd->timer.function = - (void (*)(unsigned long))pmcraid_reset_alert_done; + cmd->timer.function = pmcraid_reset_alert_done; add_timer(&cmd->timer); } } @@ -678,8 +678,7 @@ static void pmcraid_reset_alert(struct pmcraid_cmd *cmd) cmd->time_left = PMCRAID_RESET_TIMEOUT; cmd->timer.data = (unsigned long)cmd; cmd->timer.expires = jiffies + PMCRAID_CHECK_FOR_RESET_TIMEOUT; - cmd->timer.function = - (void (*)(unsigned long))pmcraid_reset_alert_done; + cmd->timer.function = pmcraid_reset_alert_done; add_timer(&cmd->timer); iowrite32(DOORBELL_IOA_RESET_ALERT, @@ -704,8 +703,9 @@ static void pmcraid_reset_alert(struct pmcraid_cmd *cmd) * Return value: * None */ -static void pmcraid_timeout_handler(struct pmcraid_cmd *cmd) +static void pmcraid_timeout_handler(unsigned long _cmd) { + struct pmcraid_cmd *cmd = (struct pmcraid_cmd *)_cmd; struct pmcraid_instance *pinstance = cmd->drv_inst; unsigned long lock_flags; @@ -920,7 +920,7 @@ static void pmcraid_send_cmd( struct pmcraid_cmd *cmd, void (*cmd_done) (struct pmcraid_cmd *), unsigned long timeout, - void (*timeout_func) (struct pmcraid_cmd *) + void (*timeout_func) (unsigned long) ) { /* initialize done function */ @@ -930,7 +930,7 @@ static void pmcraid_send_cmd( /* setup timeout handler */ cmd->timer.data = (unsigned long)cmd; cmd->timer.expires = jiffies + timeout; - cmd->timer.function = (void (*)(unsigned long))timeout_func; + cmd->timer.function = timeout_func; add_timer(&cmd->timer); } @@ -1968,7 +1968,7 @@ static void pmcraid_soft_reset(struct pmcraid_cmd *cmd) cmd->timer.data = (unsigned long)cmd; cmd->timer.expires = jiffies + msecs_to_jiffies(PMCRAID_TRANSOP_TIMEOUT); - cmd->timer.function = (void (*)(unsigned long))pmcraid_timeout_handler; + cmd->timer.function = pmcraid_timeout_handler; if (!timer_pending(&cmd->timer)) add_timer(&cmd->timer); diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index bff9689..1e7c772 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -845,8 +845,9 @@ static void qlt_undelete_sess(struct qla_tgt_sess *sess) sess->deleted = 0; } -static void qlt_del_sess_work_fn(struct delayed_work *work) +static void qlt_del_sess_work_fn(struct work_struct *_work) { + struct delayed_work *work = container_of(_work, struct delayed_work, work); struct qla_tgt *tgt = container_of(work, struct qla_tgt, sess_del_work); struct scsi_qla_host *vha = tgt->vha; @@ -6080,8 +6081,7 @@ int qlt_add_target(struct qla_hw_data *ha, struct scsi_qla_host *base_vha) init_waitqueue_head(&tgt->waitQ); INIT_LIST_HEAD(&tgt->sess_list); INIT_LIST_HEAD(&tgt->del_sess_list); - INIT_DELAYED_WORK(&tgt->sess_del_work, - (void (*)(struct work_struct *))qlt_del_sess_work_fn); + INIT_DELAYED_WORK(&tgt->sess_del_work, qlt_del_sess_work_fn); spin_lock_init(&tgt->sess_work_lock); INIT_WORK(&tgt->sess_work, qlt_sess_work_fn); INIT_LIST_HEAD(&tgt->sess_works_list); diff --git a/drivers/tty/serial/kgdboc.c b/drivers/tty/serial/kgdboc.c index a260cde..1b99d3b 100644 --- a/drivers/tty/serial/kgdboc.c +++ b/drivers/tty/serial/kgdboc.c @@ -245,7 +245,7 @@ static void kgdboc_put_char(u8 chr) kgdb_tty_line, chr); } -static int param_set_kgdboc_var(const char *kmessage, struct kernel_param *kp) +static int param_set_kgdboc_var(const char *kmessage, const struct kernel_param *kp) { int len = strlen(kmessage); diff --git a/drivers/video/console/dummycon.c b/drivers/video/console/dummycon.c index b90ef96..12f6ec5 100644 --- a/drivers/video/console/dummycon.c +++ b/drivers/video/console/dummycon.c @@ -41,12 +41,55 @@ static void dummycon_init(struct vc_data *vc, int init) vc_resize(vc, DUMMY_COLUMNS, DUMMY_ROWS); } -static int dummycon_dummy(void) +static void dummycon_deinit(struct vc_data *a) +{ +} + +static void dummycon_clear(struct vc_data *a, int b, int c, int d, int e) +{ +} + +static void dummycon_putc(struct vc_data *a, int b, int c, int d) +{ +} + +static void dummycon_putcs(struct vc_data *a, const unsigned short *b, int c, int d, int e) +{ +} + +static void dummycon_cursor(struct vc_data *a, int b) +{ +} + +static int dummycon_scroll(struct vc_data *a, int b, int c, int d, int e) +{ + return 0; +} + +static int dummycon_switch(struct vc_data *a) { return 0; } -#define DUMMY (void *)dummycon_dummy +static int dummycon_blank(struct vc_data *a, int b, int c) +{ + return 0; +} + +static int dummycon_font_set(struct vc_data *a, struct console_font *b, unsigned c) +{ + return 0; +} + +static int dummycon_font_default(struct vc_data *a, struct console_font *b , char *c) +{ + return 0; +} + +static int dummycon_font_copy(struct vc_data *a, int b) +{ + return 0; +} /* * The console `switch' structure for the dummy console @@ -58,16 +101,16 @@ const struct consw dummy_con = { .owner = THIS_MODULE, .con_startup = dummycon_startup, .con_init = dummycon_init, - .con_deinit = DUMMY, - .con_clear = DUMMY, - .con_putc = DUMMY, - .con_putcs = DUMMY, - .con_cursor = DUMMY, - .con_scroll = DUMMY, - .con_switch = DUMMY, - .con_blank = DUMMY, - .con_font_set = DUMMY, - .con_font_default = DUMMY, - .con_font_copy = DUMMY, + .con_deinit = dummycon_deinit, + .con_clear = dummycon_clear, + .con_putc = dummycon_putc, + .con_putcs = dummycon_putcs, + .con_cursor = dummycon_cursor, + .con_scroll = dummycon_scroll, + .con_switch = dummycon_switch, + .con_blank = dummycon_blank, + .con_font_set = dummycon_font_set, + .con_font_default = dummycon_font_default, + .con_font_copy = dummycon_font_copy, }; EXPORT_SYMBOL_GPL(dummy_con); diff --git a/fs/afs/file.c b/fs/afs/file.c index 6344aee..8f5a323 100644 --- a/fs/afs/file.c +++ b/fs/afs/file.c @@ -122,11 +122,11 @@ static void afs_file_readpage_read_complete(struct page *page, /* * read page from file, directory or symlink, given a key to use */ -int afs_page_filler(void *data, struct page *page) +int afs_page_filler(struct file *data, struct page *page) { struct inode *inode = page->mapping->host; struct afs_vnode *vnode = AFS_FS_I(inode); - struct key *key = data; + struct key *key = (struct file *)data; size_t len; off_t offset; int ret; @@ -220,14 +220,14 @@ static int afs_readpage(struct file *file, struct page *page) if (file) { key = file->private_data; ASSERT(key != NULL); - ret = afs_page_filler(key, page); + ret = afs_page_filler((struct file *)key, page); } else { struct inode *inode = page->mapping->host; key = afs_request_key(AFS_FS_S(inode->i_sb)->volume->cell); if (IS_ERR(key)) { ret = PTR_ERR(key); } else { - ret = afs_page_filler(key, page); + ret = afs_page_filler((struct file *)key, page); key_put(key); } } diff --git a/fs/afs/internal.h b/fs/afs/internal.h index 535a38d..4b012c6 100644 --- a/fs/afs/internal.h +++ b/fs/afs/internal.h @@ -493,7 +493,7 @@ extern const struct file_operations afs_file_operations; extern int afs_open(struct inode *, struct file *); extern int afs_release(struct inode *, struct file *); -extern int afs_page_filler(void *, struct page *); +extern int afs_page_filler(struct file *, struct page *); /* * flock.c diff --git a/fs/exofs/inode.c b/fs/exofs/inode.c index d8072bc..02a05c6 100644 --- a/fs/exofs/inode.c +++ b/fs/exofs/inode.c @@ -470,6 +470,11 @@ static int readpage_strip(void *data, struct page *page) return ret; } +static int readpage_filler(struct file *data, struct page *page) +{ + return readpage_strip(data, page); +} + static int exofs_readpages(struct file *file, struct address_space *mapping, struct list_head *pages, unsigned nr_pages) { @@ -478,7 +483,7 @@ static int exofs_readpages(struct file *file, struct address_space *mapping, _pcol_init(&pcol, nr_pages, mapping->host); - ret = read_cache_pages(mapping, pages, readpage_strip, &pcol); + ret = read_cache_pages(mapping, pages, readpage_filler, &pcol); if (ret) { EXOFS_ERR("read_cache_pages => %d\n", ret); return ret; diff --git a/fs/fuse/file.c b/fs/fuse/file.c index 2401c5d..36b3ad7 100644 --- a/fs/fuse/file.c +++ b/fs/fuse/file.c @@ -838,9 +838,9 @@ struct fuse_fill_data { unsigned nr_pages; }; -static int fuse_readpages_fill(void *_data, struct page *page) +static int fuse_readpages_fill(struct file *_data, struct page *page) { - struct fuse_fill_data *data = _data; + struct fuse_fill_data *data = (struct fuse_fill_data *)_data; struct fuse_req *req = data->req; struct inode *inode = data->inode; struct fuse_conn *fc = get_fuse_conn(inode); diff --git a/fs/fuse/inode.c b/fs/fuse/inode.c index 6fe6a88..c03236b 100644 --- a/fs/fuse/inode.c +++ b/fs/fuse/inode.c @@ -30,7 +30,7 @@ static struct kmem_cache *fuse_inode_cachep; struct list_head fuse_conn_list; DEFINE_MUTEX(fuse_mutex); -static int set_global_limit(const char *val, struct kernel_param *kp); +static int set_global_limit(const char *val, const struct kernel_param *kp); unsigned max_user_bgreq; module_param_call(max_user_bgreq, set_global_limit, param_get_uint, @@ -827,7 +827,7 @@ static void sanitize_global_limit(unsigned *limit) *limit = (1 << 16) - 1; } -static int set_global_limit(const char *val, struct kernel_param *kp) +static int set_global_limit(const char *val, const struct kernel_param *kp) { int rv; diff --git a/fs/lockd/clnt4xdr.c b/fs/lockd/clnt4xdr.c index d3e40db..a300f9c 100644 --- a/fs/lockd/clnt4xdr.c +++ b/fs/lockd/clnt4xdr.c @@ -379,10 +379,11 @@ static void encode_nlm4_lock(struct xdr_stream *xdr, * struct nlm4_lock alock; * }; */ -static void nlm4_xdr_enc_testargs(struct rpc_rqst *req, +static void nlm4_xdr_enc_testargs(void *req, struct xdr_stream *xdr, - const struct nlm_args *args) + void *_args) { + const struct nlm_args *args = _args; const struct nlm_lock *lock = &args->lock; encode_cookie(xdr, &args->cookie); @@ -400,10 +401,11 @@ static void nlm4_xdr_enc_testargs(struct rpc_rqst *req, * int state; * }; */ -static void nlm4_xdr_enc_lockargs(struct rpc_rqst *req, +static void nlm4_xdr_enc_lockargs(void *req, struct xdr_stream *xdr, - const struct nlm_args *args) + void *_args) { + const struct nlm_args *args = _args; const struct nlm_lock *lock = &args->lock; encode_cookie(xdr, &args->cookie); @@ -422,10 +424,11 @@ static void nlm4_xdr_enc_lockargs(struct rpc_rqst *req, * struct nlm4_lock alock; * }; */ -static void nlm4_xdr_enc_cancargs(struct rpc_rqst *req, +static void nlm4_xdr_enc_cancargs(void *req, struct xdr_stream *xdr, - const struct nlm_args *args) + void *_args) { + const struct nlm_args *args = _args; const struct nlm_lock *lock = &args->lock; encode_cookie(xdr, &args->cookie); @@ -440,10 +443,11 @@ static void nlm4_xdr_enc_cancargs(struct rpc_rqst *req, * struct nlm4_lock alock; * }; */ -static void nlm4_xdr_enc_unlockargs(struct rpc_rqst *req, +static void nlm4_xdr_enc_unlockargs(void *req, struct xdr_stream *xdr, - const struct nlm_args *args) + void *_args) { + const struct nlm_args *args = _args; const struct nlm_lock *lock = &args->lock; encode_cookie(xdr, &args->cookie); @@ -456,10 +460,12 @@ static void nlm4_xdr_enc_unlockargs(struct rpc_rqst *req, * nlm4_stat stat; * }; */ -static void nlm4_xdr_enc_res(struct rpc_rqst *req, +static void nlm4_xdr_enc_res(void *req, struct xdr_stream *xdr, - const struct nlm_res *result) + void *_result) { + const struct nlm_res *result = _result; + encode_cookie(xdr, &result->cookie); encode_nlm4_stat(xdr, result->status); } @@ -477,10 +483,12 @@ static void nlm4_xdr_enc_res(struct rpc_rqst *req, * nlm4_testrply test_stat; * }; */ -static void nlm4_xdr_enc_testres(struct rpc_rqst *req, +static void nlm4_xdr_enc_testres(void *req, struct xdr_stream *xdr, - const struct nlm_res *result) + void *_result) { + const struct nlm_res *result = _result; + encode_cookie(xdr, &result->cookie); encode_nlm4_stat(xdr, result->status); if (result->status == nlm_lck_denied) @@ -523,10 +531,11 @@ static int decode_nlm4_testrply(struct xdr_stream *xdr, return error; } -static int nlm4_xdr_dec_testres(struct rpc_rqst *req, +static int nlm4_xdr_dec_testres(void *req, struct xdr_stream *xdr, - struct nlm_res *result) + void *_result) { + struct nlm_res *result = _result; int error; error = decode_cookie(xdr, &result->cookie); @@ -543,10 +552,11 @@ static int nlm4_xdr_dec_testres(struct rpc_rqst *req, * nlm4_stat stat; * }; */ -static int nlm4_xdr_dec_res(struct rpc_rqst *req, +static int nlm4_xdr_dec_res(void *req, struct xdr_stream *xdr, - struct nlm_res *result) + void *_result) { + struct nlm_res *result = _result; int error; error = decode_cookie(xdr, &result->cookie); @@ -566,8 +576,8 @@ static int nlm4_xdr_dec_res(struct rpc_rqst *req, #define PROC(proc, argtype, restype) \ [NLMPROC_##proc] = { \ .p_proc = NLMPROC_##proc, \ - .p_encode = (kxdreproc_t)nlm4_xdr_enc_##argtype, \ - .p_decode = (kxdrdproc_t)nlm4_xdr_dec_##restype, \ + .p_encode = nlm4_xdr_enc_##argtype, \ + .p_decode = nlm4_xdr_dec_##restype, \ .p_arglen = NLM4_##argtype##_sz, \ .p_replen = NLM4_##restype##_sz, \ .p_statidx = NLMPROC_##proc, \ diff --git a/fs/lockd/clntxdr.c b/fs/lockd/clntxdr.c index 3e9f787..c2177b8 100644 --- a/fs/lockd/clntxdr.c +++ b/fs/lockd/clntxdr.c @@ -372,10 +372,11 @@ static void encode_nlm_lock(struct xdr_stream *xdr, * struct nlm_lock alock; * }; */ -static void nlm_xdr_enc_testargs(struct rpc_rqst *req, +static void nlm_xdr_enc_testargs(void *req, struct xdr_stream *xdr, - const struct nlm_args *args) + void *_args) { + const struct nlm_args *args = _args; const struct nlm_lock *lock = &args->lock; encode_cookie(xdr, &args->cookie); @@ -393,10 +394,11 @@ static void nlm_xdr_enc_testargs(struct rpc_rqst *req, * int state; * }; */ -static void nlm_xdr_enc_lockargs(struct rpc_rqst *req, +static void nlm_xdr_enc_lockargs(void *req, struct xdr_stream *xdr, - const struct nlm_args *args) + void *_args) { + const struct nlm_args *args = _args; const struct nlm_lock *lock = &args->lock; encode_cookie(xdr, &args->cookie); @@ -415,10 +417,11 @@ static void nlm_xdr_enc_lockargs(struct rpc_rqst *req, * struct nlm_lock alock; * }; */ -static void nlm_xdr_enc_cancargs(struct rpc_rqst *req, +static void nlm_xdr_enc_cancargs(void *req, struct xdr_stream *xdr, - const struct nlm_args *args) + void *_args) { + const struct nlm_args *args = _args; const struct nlm_lock *lock = &args->lock; encode_cookie(xdr, &args->cookie); @@ -433,10 +436,11 @@ static void nlm_xdr_enc_cancargs(struct rpc_rqst *req, * struct nlm_lock alock; * }; */ -static void nlm_xdr_enc_unlockargs(struct rpc_rqst *req, +static void nlm_xdr_enc_unlockargs(void *req, struct xdr_stream *xdr, - const struct nlm_args *args) + void *_args) { + const struct nlm_args *args = _args; const struct nlm_lock *lock = &args->lock; encode_cookie(xdr, &args->cookie); @@ -449,10 +453,11 @@ static void nlm_xdr_enc_unlockargs(struct rpc_rqst *req, * nlm_stat stat; * }; */ -static void nlm_xdr_enc_res(struct rpc_rqst *req, +static void nlm_xdr_enc_res(void *req, struct xdr_stream *xdr, - const struct nlm_res *result) + void *_result) { + const struct nlm_res *result = _result; encode_cookie(xdr, &result->cookie); encode_nlm_stat(xdr, result->status); } @@ -477,10 +482,11 @@ static void encode_nlm_testrply(struct xdr_stream *xdr, encode_nlm_holder(xdr, result); } -static void nlm_xdr_enc_testres(struct rpc_rqst *req, +static void nlm_xdr_enc_testres(void *req, struct xdr_stream *xdr, - const struct nlm_res *result) + void *_result) { + const struct nlm_res *result = _result; encode_cookie(xdr, &result->cookie); encode_nlm_stat(xdr, result->status); encode_nlm_testrply(xdr, result); @@ -521,11 +527,12 @@ static int decode_nlm_testrply(struct xdr_stream *xdr, return error; } -static int nlm_xdr_dec_testres(struct rpc_rqst *req, +static int nlm_xdr_dec_testres(void *req, struct xdr_stream *xdr, - struct nlm_res *result) + void *_result) { int error; + struct nlm_res *result = _result; error = decode_cookie(xdr, &result->cookie); if (unlikely(error)) @@ -541,11 +548,12 @@ static int nlm_xdr_dec_testres(struct rpc_rqst *req, * nlm_stat stat; * }; */ -static int nlm_xdr_dec_res(struct rpc_rqst *req, +static int nlm_xdr_dec_res(void *req, struct xdr_stream *xdr, - struct nlm_res *result) + void *_result) { int error; + struct nlm_res *result = _result; error = decode_cookie(xdr, &result->cookie); if (unlikely(error)) @@ -564,8 +572,8 @@ static int nlm_xdr_dec_res(struct rpc_rqst *req, #define PROC(proc, argtype, restype) \ [NLMPROC_##proc] = { \ .p_proc = NLMPROC_##proc, \ - .p_encode = (kxdreproc_t)nlm_xdr_enc_##argtype, \ - .p_decode = (kxdrdproc_t)nlm_xdr_dec_##restype, \ + .p_encode = nlm_xdr_enc_##argtype, \ + .p_decode = nlm_xdr_dec_##restype, \ .p_arglen = NLM_##argtype##_sz, \ .p_replen = NLM_##restype##_sz, \ .p_statidx = NLMPROC_##proc, \ diff --git a/fs/lockd/mon.c b/fs/lockd/mon.c index 19166d4..c841d52 100644 --- a/fs/lockd/mon.c +++ b/fs/lockd/mon.c @@ -475,23 +475,22 @@ static void encode_priv(struct xdr_stream *xdr, const struct nsm_args *argp) xdr_encode_opaque_fixed(p, argp->priv->data, SM_PRIV_SIZE); } -static void nsm_xdr_enc_mon(struct rpc_rqst *req, struct xdr_stream *xdr, - const struct nsm_args *argp) +static void nsm_xdr_enc_mon(void *req, struct xdr_stream *xdr, void *argp) { encode_mon_id(xdr, argp); encode_priv(xdr, argp); } -static void nsm_xdr_enc_unmon(struct rpc_rqst *req, struct xdr_stream *xdr, - const struct nsm_args *argp) +static void nsm_xdr_enc_unmon(void *req, struct xdr_stream *xdr, void *argp) { encode_mon_id(xdr, argp); } -static int nsm_xdr_dec_stat_res(struct rpc_rqst *rqstp, +static int nsm_xdr_dec_stat_res(void *rqstp, struct xdr_stream *xdr, - struct nsm_res *resp) + void *_resp) { + struct nsm_res *resp = _resp; __be32 *p; p = xdr_inline_decode(xdr, 4 + 4); @@ -505,10 +504,11 @@ static int nsm_xdr_dec_stat_res(struct rpc_rqst *rqstp, return 0; } -static int nsm_xdr_dec_stat(struct rpc_rqst *rqstp, +static int nsm_xdr_dec_stat(void *rqstp, struct xdr_stream *xdr, - struct nsm_res *resp) + void *_resp) { + struct nsm_res *resp = _resp; __be32 *p; p = xdr_inline_decode(xdr, 4); @@ -532,8 +532,8 @@ static int nsm_xdr_dec_stat(struct rpc_rqst *rqstp, static struct rpc_procinfo nsm_procedures[] = { [NSMPROC_MON] = { .p_proc = NSMPROC_MON, - .p_encode = (kxdreproc_t)nsm_xdr_enc_mon, - .p_decode = (kxdrdproc_t)nsm_xdr_dec_stat_res, + .p_encode = nsm_xdr_enc_mon, + .p_decode = nsm_xdr_dec_stat_res, .p_arglen = SM_mon_sz, .p_replen = SM_monres_sz, .p_statidx = NSMPROC_MON, @@ -541,8 +541,8 @@ static struct rpc_procinfo nsm_procedures[] = { }, [NSMPROC_UNMON] = { .p_proc = NSMPROC_UNMON, - .p_encode = (kxdreproc_t)nsm_xdr_enc_unmon, - .p_decode = (kxdrdproc_t)nsm_xdr_dec_stat, + .p_encode = nsm_xdr_enc_unmon, + .p_decode = nsm_xdr_dec_stat, .p_arglen = SM_mon_id_sz, .p_replen = SM_unmonres_sz, .p_statidx = NSMPROC_UNMON, diff --git a/fs/lockd/svc.c b/fs/lockd/svc.c index fc4084e..25d725d 100644 --- a/fs/lockd/svc.c +++ b/fs/lockd/svc.c @@ -598,7 +598,7 @@ static struct ctl_table nlm_sysctl_root[] = { */ #define param_set_min_max(name, type, which_strtol, min, max) \ -static int param_set_##name(const char *val, struct kernel_param *kp) \ +static int param_set_##name(const char *val, const struct kernel_param *kp)\ { \ char *endp; \ __typeof__(type) num = which_strtol(val, &endp, 0); \ diff --git a/fs/lockd/svc4proc.c b/fs/lockd/svc4proc.c index 09c576f..89b4d3d 100644 --- a/fs/lockd/svc4proc.c +++ b/fs/lockd/svc4proc.c @@ -72,9 +72,10 @@ nlm4svc_proc_null(struct svc_rqst *rqstp, void *argp, void *resp) * TEST: Check for conflicting lock */ static __be32 -nlm4svc_proc_test(struct svc_rqst *rqstp, struct nlm_args *argp, - struct nlm_res *resp) +nlm4svc_proc_test(struct svc_rqst *rqstp, void *_argp, void *_resp) { + struct nlm_args *argp = _argp; + struct nlm_res *resp = _resp; struct nlm_host *host; struct nlm_file *file; __be32 rc = rpc_success; @@ -99,9 +100,10 @@ nlm4svc_proc_test(struct svc_rqst *rqstp, struct nlm_args *argp, } static __be32 -nlm4svc_proc_lock(struct svc_rqst *rqstp, struct nlm_args *argp, - struct nlm_res *resp) +nlm4svc_proc_lock(struct svc_rqst *rqstp, void *_argp, void *_resp) { + struct nlm_args *argp = _argp; + struct nlm_res *resp = _resp; struct nlm_host *host; struct nlm_file *file; __be32 rc = rpc_success; @@ -141,9 +143,10 @@ nlm4svc_proc_lock(struct svc_rqst *rqstp, struct nlm_args *argp, } static __be32 -nlm4svc_proc_cancel(struct svc_rqst *rqstp, struct nlm_args *argp, - struct nlm_res *resp) +nlm4svc_proc_cancel(struct svc_rqst *rqstp, void *_argp, void *_resp) { + struct nlm_args *argp = _argp; + struct nlm_res *resp = _resp; struct nlm_host *host; struct nlm_file *file; @@ -174,9 +177,10 @@ nlm4svc_proc_cancel(struct svc_rqst *rqstp, struct nlm_args *argp, * UNLOCK: release a lock */ static __be32 -nlm4svc_proc_unlock(struct svc_rqst *rqstp, struct nlm_args *argp, - struct nlm_res *resp) +nlm4svc_proc_unlock(struct svc_rqst *rqstp, void *_argp, void *_resp) { + struct nlm_args *argp = _argp; + struct nlm_res *resp = _resp; struct nlm_host *host; struct nlm_file *file; @@ -208,9 +212,11 @@ nlm4svc_proc_unlock(struct svc_rqst *rqstp, struct nlm_args *argp, * was granted */ static __be32 -nlm4svc_proc_granted(struct svc_rqst *rqstp, struct nlm_args *argp, - struct nlm_res *resp) +nlm4svc_proc_granted(struct svc_rqst *rqstp, void *_argp, void *_resp) { + struct nlm_args *argp = _argp; + struct nlm_res *resp = _resp; + resp->cookie = argp->cookie; dprintk("lockd: GRANTED called\n"); @@ -244,7 +250,7 @@ static const struct rpc_call_ops nlm4svc_callback_ops = { * doesn't break any clients. */ static __be32 nlm4svc_callback(struct svc_rqst *rqstp, u32 proc, struct nlm_args *argp, - __be32 (*func)(struct svc_rqst *, struct nlm_args *, struct nlm_res *)) + __be32 (*func)(struct svc_rqst *, void *, void *)) { struct nlm_host *host; struct nlm_rqst *call; @@ -273,35 +279,35 @@ static __be32 nlm4svc_callback(struct svc_rqst *rqstp, u32 proc, struct nlm_args return rpc_success; } -static __be32 nlm4svc_proc_test_msg(struct svc_rqst *rqstp, struct nlm_args *argp, +static __be32 nlm4svc_proc_test_msg(struct svc_rqst *rqstp, void *argp, void *resp) { dprintk("lockd: TEST_MSG called\n"); return nlm4svc_callback(rqstp, NLMPROC_TEST_RES, argp, nlm4svc_proc_test); } -static __be32 nlm4svc_proc_lock_msg(struct svc_rqst *rqstp, struct nlm_args *argp, +static __be32 nlm4svc_proc_lock_msg(struct svc_rqst *rqstp, void *argp, void *resp) { dprintk("lockd: LOCK_MSG called\n"); return nlm4svc_callback(rqstp, NLMPROC_LOCK_RES, argp, nlm4svc_proc_lock); } -static __be32 nlm4svc_proc_cancel_msg(struct svc_rqst *rqstp, struct nlm_args *argp, +static __be32 nlm4svc_proc_cancel_msg(struct svc_rqst *rqstp, void *argp, void *resp) { dprintk("lockd: CANCEL_MSG called\n"); return nlm4svc_callback(rqstp, NLMPROC_CANCEL_RES, argp, nlm4svc_proc_cancel); } -static __be32 nlm4svc_proc_unlock_msg(struct svc_rqst *rqstp, struct nlm_args *argp, +static __be32 nlm4svc_proc_unlock_msg(struct svc_rqst *rqstp, void *argp, void *resp) { dprintk("lockd: UNLOCK_MSG called\n"); return nlm4svc_callback(rqstp, NLMPROC_UNLOCK_RES, argp, nlm4svc_proc_unlock); } -static __be32 nlm4svc_proc_granted_msg(struct svc_rqst *rqstp, struct nlm_args *argp, +static __be32 nlm4svc_proc_granted_msg(struct svc_rqst *rqstp, void *argp, void *resp) { dprintk("lockd: GRANTED_MSG called\n"); @@ -312,9 +318,10 @@ static __be32 nlm4svc_proc_granted_msg(struct svc_rqst *rqstp, struct nlm_args * * SHARE: create a DOS share or alter existing share. */ static __be32 -nlm4svc_proc_share(struct svc_rqst *rqstp, struct nlm_args *argp, - struct nlm_res *resp) +nlm4svc_proc_share(struct svc_rqst *rqstp, void *_argp, void *_resp) { + struct nlm_args *argp = _argp; + struct nlm_res *resp = _resp; struct nlm_host *host; struct nlm_file *file; @@ -345,9 +352,10 @@ nlm4svc_proc_share(struct svc_rqst *rqstp, struct nlm_args *argp, * UNSHARE: Release a DOS share. */ static __be32 -nlm4svc_proc_unshare(struct svc_rqst *rqstp, struct nlm_args *argp, - struct nlm_res *resp) +nlm4svc_proc_unshare(struct svc_rqst *rqstp, void *_argp, void *_resp) { + struct nlm_args *argp = _argp; + struct nlm_res *resp = _resp; struct nlm_host *host; struct nlm_file *file; @@ -378,9 +386,10 @@ nlm4svc_proc_unshare(struct svc_rqst *rqstp, struct nlm_args *argp, * NM_LOCK: Create an unmonitored lock */ static __be32 -nlm4svc_proc_nm_lock(struct svc_rqst *rqstp, struct nlm_args *argp, - struct nlm_res *resp) +nlm4svc_proc_nm_lock(struct svc_rqst *rqstp, void *_argp, void *resp) { + struct nlm_args *argp = _argp; + dprintk("lockd: NM_LOCK called\n"); argp->monitor = 0; /* just clean the monitor flag */ @@ -391,8 +400,7 @@ nlm4svc_proc_nm_lock(struct svc_rqst *rqstp, struct nlm_args *argp, * FREE_ALL: Release all locks and shares held by client */ static __be32 -nlm4svc_proc_free_all(struct svc_rqst *rqstp, struct nlm_args *argp, - void *resp) +nlm4svc_proc_free_all(struct svc_rqst *rqstp, void *argp, void *resp) { struct nlm_host *host; @@ -409,7 +417,7 @@ nlm4svc_proc_free_all(struct svc_rqst *rqstp, struct nlm_args *argp, * SM_NOTIFY: private callback from statd (not part of official NLM proto) */ static __be32 -nlm4svc_proc_sm_notify(struct svc_rqst *rqstp, struct nlm_reboot *argp, +nlm4svc_proc_sm_notify(struct svc_rqst *rqstp, void *argp, void *resp) { dprintk("lockd: SM_NOTIFY called\n"); @@ -429,9 +437,10 @@ nlm4svc_proc_sm_notify(struct svc_rqst *rqstp, struct nlm_reboot *argp, * client sent a GRANTED_RES, let's remove the associated block */ static __be32 -nlm4svc_proc_granted_res(struct svc_rqst *rqstp, struct nlm_res *argp, - void *resp) +nlm4svc_proc_granted_res(struct svc_rqst *rqstp, void *_argp, void *resp) { + struct nlm_res *argp = _argp; + if (!nlmsvc_ops) return rpc_success; @@ -463,9 +472,9 @@ nlm4svc_proc_granted_res(struct svc_rqst *rqstp, struct nlm_res *argp, struct nlm_void { int dummy; }; #define PROC(name, xargt, xrest, argt, rest, respsize) \ - { .pc_func = (svc_procfunc) nlm4svc_proc_##name, \ - .pc_decode = (kxdrproc_t) nlm4svc_decode_##xargt, \ - .pc_encode = (kxdrproc_t) nlm4svc_encode_##xrest, \ + { .pc_func = nlm4svc_proc_##name, \ + .pc_decode = nlm4svc_decode_##xargt, \ + .pc_encode = nlm4svc_encode_##xrest, \ .pc_release = NULL, \ .pc_argsize = sizeof(struct nlm_##argt), \ .pc_ressize = sizeof(struct nlm_##rest), \ diff --git a/fs/lockd/svcproc.c b/fs/lockd/svcproc.c index fb26b9f..a6d5582 100644 --- a/fs/lockd/svcproc.c +++ b/fs/lockd/svcproc.c @@ -102,9 +102,10 @@ nlmsvc_proc_null(struct svc_rqst *rqstp, void *argp, void *resp) * TEST: Check for conflicting lock */ static __be32 -nlmsvc_proc_test(struct svc_rqst *rqstp, struct nlm_args *argp, - struct nlm_res *resp) +nlmsvc_proc_test(struct svc_rqst *rqstp, void *_argp, void *_resp) { + struct nlm_args *argp = _argp; + struct nlm_res *resp = _resp; struct nlm_host *host; struct nlm_file *file; __be32 rc = rpc_success; @@ -130,9 +131,10 @@ nlmsvc_proc_test(struct svc_rqst *rqstp, struct nlm_args *argp, } static __be32 -nlmsvc_proc_lock(struct svc_rqst *rqstp, struct nlm_args *argp, - struct nlm_res *resp) +nlmsvc_proc_lock(struct svc_rqst *rqstp, void *_argp, void *_resp) { + struct nlm_args *argp = _argp; + struct nlm_res *resp = _resp; struct nlm_host *host; struct nlm_file *file; __be32 rc = rpc_success; @@ -172,9 +174,10 @@ nlmsvc_proc_lock(struct svc_rqst *rqstp, struct nlm_args *argp, } static __be32 -nlmsvc_proc_cancel(struct svc_rqst *rqstp, struct nlm_args *argp, - struct nlm_res *resp) +nlmsvc_proc_cancel(struct svc_rqst *rqstp, void *_argp, void *_resp) { + struct nlm_args *argp = _argp; + struct nlm_res *resp = _resp; struct nlm_host *host; struct nlm_file *file; struct net *net = SVC_NET(rqstp); @@ -206,9 +209,10 @@ nlmsvc_proc_cancel(struct svc_rqst *rqstp, struct nlm_args *argp, * UNLOCK: release a lock */ static __be32 -nlmsvc_proc_unlock(struct svc_rqst *rqstp, struct nlm_args *argp, - struct nlm_res *resp) +nlmsvc_proc_unlock(struct svc_rqst *rqstp, void *_argp, void *_resp) { + struct nlm_args *argp = _argp; + struct nlm_res *resp = _resp; struct nlm_host *host; struct nlm_file *file; struct net *net = SVC_NET(rqstp); @@ -241,9 +245,11 @@ nlmsvc_proc_unlock(struct svc_rqst *rqstp, struct nlm_args *argp, * was granted */ static __be32 -nlmsvc_proc_granted(struct svc_rqst *rqstp, struct nlm_args *argp, - struct nlm_res *resp) +nlmsvc_proc_granted(struct svc_rqst *rqstp, void *_argp, void *_resp) { + struct nlm_args *argp = _argp; + struct nlm_res *resp = _resp; + resp->cookie = argp->cookie; dprintk("lockd: GRANTED called\n"); @@ -285,7 +291,7 @@ static const struct rpc_call_ops nlmsvc_callback_ops = { * doesn't break any clients. */ static __be32 nlmsvc_callback(struct svc_rqst *rqstp, u32 proc, struct nlm_args *argp, - __be32 (*func)(struct svc_rqst *, struct nlm_args *, struct nlm_res *)) + __be32 (*func)(struct svc_rqst *, void *, void *)) { struct nlm_host *host; struct nlm_rqst *call; @@ -314,38 +320,33 @@ static __be32 nlmsvc_callback(struct svc_rqst *rqstp, u32 proc, struct nlm_args return rpc_success; } -static __be32 nlmsvc_proc_test_msg(struct svc_rqst *rqstp, struct nlm_args *argp, - void *resp) +static __be32 nlmsvc_proc_test_msg(struct svc_rqst *rqstp,void *argp, void *resp) { dprintk("lockd: TEST_MSG called\n"); return nlmsvc_callback(rqstp, NLMPROC_TEST_RES, argp, nlmsvc_proc_test); } -static __be32 nlmsvc_proc_lock_msg(struct svc_rqst *rqstp, struct nlm_args *argp, - void *resp) +static __be32 nlmsvc_proc_lock_msg(struct svc_rqst *rqstp, void *argp, void *resp) { dprintk("lockd: LOCK_MSG called\n"); return nlmsvc_callback(rqstp, NLMPROC_LOCK_RES, argp, nlmsvc_proc_lock); } -static __be32 nlmsvc_proc_cancel_msg(struct svc_rqst *rqstp, struct nlm_args *argp, - void *resp) +static __be32 nlmsvc_proc_cancel_msg(struct svc_rqst *rqstp, void *argp, void *resp) { dprintk("lockd: CANCEL_MSG called\n"); return nlmsvc_callback(rqstp, NLMPROC_CANCEL_RES, argp, nlmsvc_proc_cancel); } static __be32 -nlmsvc_proc_unlock_msg(struct svc_rqst *rqstp, struct nlm_args *argp, - void *resp) +nlmsvc_proc_unlock_msg(struct svc_rqst *rqstp, void *argp, void *resp) { dprintk("lockd: UNLOCK_MSG called\n"); return nlmsvc_callback(rqstp, NLMPROC_UNLOCK_RES, argp, nlmsvc_proc_unlock); } static __be32 -nlmsvc_proc_granted_msg(struct svc_rqst *rqstp, struct nlm_args *argp, - void *resp) +nlmsvc_proc_granted_msg(struct svc_rqst *rqstp, void *argp, void *resp) { dprintk("lockd: GRANTED_MSG called\n"); return nlmsvc_callback(rqstp, NLMPROC_GRANTED_RES, argp, nlmsvc_proc_granted); @@ -355,9 +356,10 @@ nlmsvc_proc_granted_msg(struct svc_rqst *rqstp, struct nlm_args *argp, * SHARE: create a DOS share or alter existing share. */ static __be32 -nlmsvc_proc_share(struct svc_rqst *rqstp, struct nlm_args *argp, - struct nlm_res *resp) +nlmsvc_proc_share(struct svc_rqst *rqstp, void *_argp, void *_resp) { + struct nlm_args *argp = _argp; + struct nlm_res *resp = _resp; struct nlm_host *host; struct nlm_file *file; @@ -388,9 +390,10 @@ nlmsvc_proc_share(struct svc_rqst *rqstp, struct nlm_args *argp, * UNSHARE: Release a DOS share. */ static __be32 -nlmsvc_proc_unshare(struct svc_rqst *rqstp, struct nlm_args *argp, - struct nlm_res *resp) +nlmsvc_proc_unshare(struct svc_rqst *rqstp, void *_argp, void *_resp) { + struct nlm_args *argp = _argp; + struct nlm_res *resp = _resp; struct nlm_host *host; struct nlm_file *file; @@ -421,9 +424,10 @@ nlmsvc_proc_unshare(struct svc_rqst *rqstp, struct nlm_args *argp, * NM_LOCK: Create an unmonitored lock */ static __be32 -nlmsvc_proc_nm_lock(struct svc_rqst *rqstp, struct nlm_args *argp, - struct nlm_res *resp) +nlmsvc_proc_nm_lock(struct svc_rqst *rqstp, void *_argp, void *resp) { + struct nlm_args *argp = _argp; + dprintk("lockd: NM_LOCK called\n"); argp->monitor = 0; /* just clean the monitor flag */ @@ -434,8 +438,7 @@ nlmsvc_proc_nm_lock(struct svc_rqst *rqstp, struct nlm_args *argp, * FREE_ALL: Release all locks and shares held by client */ static __be32 -nlmsvc_proc_free_all(struct svc_rqst *rqstp, struct nlm_args *argp, - void *resp) +nlmsvc_proc_free_all(struct svc_rqst *rqstp, void *argp, void *resp) { struct nlm_host *host; @@ -452,8 +455,7 @@ nlmsvc_proc_free_all(struct svc_rqst *rqstp, struct nlm_args *argp, * SM_NOTIFY: private callback from statd (not part of official NLM proto) */ static __be32 -nlmsvc_proc_sm_notify(struct svc_rqst *rqstp, struct nlm_reboot *argp, - void *resp) +nlmsvc_proc_sm_notify(struct svc_rqst *rqstp, void *argp, void *resp) { dprintk("lockd: SM_NOTIFY called\n"); @@ -472,9 +474,10 @@ nlmsvc_proc_sm_notify(struct svc_rqst *rqstp, struct nlm_reboot *argp, * client sent a GRANTED_RES, let's remove the associated block */ static __be32 -nlmsvc_proc_granted_res(struct svc_rqst *rqstp, struct nlm_res *argp, - void *resp) +nlmsvc_proc_granted_res(struct svc_rqst *rqstp, void *_argp, void *resp) { + struct nlm_res *argp = _argp; + if (!nlmsvc_ops) return rpc_success; @@ -505,9 +508,9 @@ nlmsvc_proc_granted_res(struct svc_rqst *rqstp, struct nlm_res *argp, struct nlm_void { int dummy; }; #define PROC(name, xargt, xrest, argt, rest, respsize) \ - { .pc_func = (svc_procfunc) nlmsvc_proc_##name, \ - .pc_decode = (kxdrproc_t) nlmsvc_decode_##xargt, \ - .pc_encode = (kxdrproc_t) nlmsvc_encode_##xrest, \ + { .pc_func = nlmsvc_proc_##name, \ + .pc_decode = nlmsvc_decode_##xargt, \ + .pc_encode = nlmsvc_encode_##xrest, \ .pc_release = NULL, \ .pc_argsize = sizeof(struct nlm_##argt), \ .pc_ressize = sizeof(struct nlm_##rest), \ diff --git a/fs/lockd/xdr.c b/fs/lockd/xdr.c index 5b651da..cfe0944 100644 --- a/fs/lockd/xdr.c +++ b/fs/lockd/xdr.c @@ -182,8 +182,9 @@ nlm_encode_testres(__be32 *p, struct nlm_res *resp) * First, the server side XDR functions */ int -nlmsvc_decode_testargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp) +nlmsvc_decode_testargs(void *rqstp, __be32 *p, void *_argp) { + nlm_args *argp = _argp; u32 exclusive; if (!(p = nlm_decode_cookie(p, &argp->cookie))) @@ -199,16 +200,19 @@ nlmsvc_decode_testargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp) } int -nlmsvc_encode_testres(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp) +nlmsvc_encode_testres(void *rqstp, __be32 *p, void *_resp) { + struct nlm_res *resp = _resp; + if (!(p = nlm_encode_testres(p, resp))) return 0; return xdr_ressize_check(rqstp, p); } int -nlmsvc_decode_lockargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp) +nlmsvc_decode_lockargs(void *rqstp, __be32 *p, void *_argp) { + nlm_args *argp = _argp; u32 exclusive; if (!(p = nlm_decode_cookie(p, &argp->cookie))) @@ -227,8 +231,9 @@ nlmsvc_decode_lockargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp) } int -nlmsvc_decode_cancargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp) +nlmsvc_decode_cancargs(void *rqstp, __be32 *p, void *_argp) { + nlm_args *argp = _argp; u32 exclusive; if (!(p = nlm_decode_cookie(p, &argp->cookie))) @@ -243,8 +248,10 @@ nlmsvc_decode_cancargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp) } int -nlmsvc_decode_unlockargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp) +nlmsvc_decode_unlockargs(void *rqstp, __be32 *p, void *_argp) { + nlm_args *argp = _argp; + if (!(p = nlm_decode_cookie(p, &argp->cookie)) || !(p = nlm_decode_lock(p, &argp->lock))) return 0; @@ -253,8 +260,10 @@ nlmsvc_decode_unlockargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp) } int -nlmsvc_decode_shareargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp) +nlmsvc_decode_shareargs(void *rqstp, __be32 *p, void *_argp) { + nlm_args *argp = _argp; + struct nlm_lock *lock = &argp->lock; memset(lock, 0, sizeof(*lock)); @@ -274,8 +283,10 @@ nlmsvc_decode_shareargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp) } int -nlmsvc_encode_shareres(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp) +nlmsvc_encode_shareres(void *rqstp, __be32 *p, void *_resp) { + struct nlm_res *resp = _resp; + if (!(p = nlm_encode_cookie(p, &resp->cookie))) return 0; *p++ = resp->status; @@ -284,8 +295,10 @@ nlmsvc_encode_shareres(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp) } int -nlmsvc_encode_res(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp) +nlmsvc_encode_res(void *rqstp, __be32 *p, void *_resp) { + struct nlm_res *resp = _resp; + if (!(p = nlm_encode_cookie(p, &resp->cookie))) return 0; *p++ = resp->status; @@ -293,8 +306,9 @@ nlmsvc_encode_res(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp) } int -nlmsvc_decode_notify(struct svc_rqst *rqstp, __be32 *p, struct nlm_args *argp) +nlmsvc_decode_notify(void *rqstp, __be32 *p, void *_argp) { + struct nlm_args *argp = _argp; struct nlm_lock *lock = &argp->lock; if (!(p = xdr_decode_string_inplace(p, &lock->caller, @@ -305,8 +319,10 @@ nlmsvc_decode_notify(struct svc_rqst *rqstp, __be32 *p, struct nlm_args *argp) } int -nlmsvc_decode_reboot(struct svc_rqst *rqstp, __be32 *p, struct nlm_reboot *argp) +nlmsvc_decode_reboot(void *rqstp, __be32 *p, void *_argp) { + struct nlm_reboot *argp = _argp; + if (!(p = xdr_decode_string_inplace(p, &argp->mon, &argp->len, SM_MAXSTRLEN))) return 0; argp->state = ntohl(*p++); @@ -316,8 +332,10 @@ nlmsvc_decode_reboot(struct svc_rqst *rqstp, __be32 *p, struct nlm_reboot *argp) } int -nlmsvc_decode_res(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp) +nlmsvc_decode_res(void *rqstp, __be32 *p, void *_resp) { + struct nlm_res *resp = _resp; + if (!(p = nlm_decode_cookie(p, &resp->cookie))) return 0; resp->status = *p++; @@ -325,13 +343,13 @@ nlmsvc_decode_res(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp) } int -nlmsvc_decode_void(struct svc_rqst *rqstp, __be32 *p, void *dummy) +nlmsvc_decode_void(void *rqstp, __be32 *p, void *dummy) { return xdr_argsize_check(rqstp, p); } int -nlmsvc_encode_void(struct svc_rqst *rqstp, __be32 *p, void *dummy) +nlmsvc_encode_void(void *rqstp, __be32 *p, void *dummy) { return xdr_ressize_check(rqstp, p); } diff --git a/fs/lockd/xdr4.c b/fs/lockd/xdr4.c index dfa4789..be443bd 100644 --- a/fs/lockd/xdr4.c +++ b/fs/lockd/xdr4.c @@ -179,8 +179,9 @@ nlm4_encode_testres(__be32 *p, struct nlm_res *resp) * First, the server side XDR functions */ int -nlm4svc_decode_testargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp) +nlm4svc_decode_testargs(void *rqstp, __be32 *p, void *_argp) { + nlm_args *argp = _argp; u32 exclusive; if (!(p = nlm4_decode_cookie(p, &argp->cookie))) @@ -196,7 +197,7 @@ nlm4svc_decode_testargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp) } int -nlm4svc_encode_testres(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp) +nlm4svc_encode_testres(void *rqstp, __be32 *p, void *resp) { if (!(p = nlm4_encode_testres(p, resp))) return 0; @@ -204,8 +205,9 @@ nlm4svc_encode_testres(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp) } int -nlm4svc_decode_lockargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp) +nlm4svc_decode_lockargs(void *rqstp, __be32 *p, void *_argp) { + nlm_args *argp = _argp; u32 exclusive; if (!(p = nlm4_decode_cookie(p, &argp->cookie))) @@ -224,8 +226,9 @@ nlm4svc_decode_lockargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp) } int -nlm4svc_decode_cancargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp) +nlm4svc_decode_cancargs(void *rqstp, __be32 *p, void *_argp) { + nlm_args *argp = _argp; u32 exclusive; if (!(p = nlm4_decode_cookie(p, &argp->cookie))) @@ -240,8 +243,10 @@ nlm4svc_decode_cancargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp) } int -nlm4svc_decode_unlockargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp) +nlm4svc_decode_unlockargs(void *rqstp, __be32 *p, void *_argp) { + nlm_args *argp = _argp; + if (!(p = nlm4_decode_cookie(p, &argp->cookie)) || !(p = nlm4_decode_lock(p, &argp->lock))) return 0; @@ -250,8 +255,9 @@ nlm4svc_decode_unlockargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp) } int -nlm4svc_decode_shareargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp) +nlm4svc_decode_shareargs(void *rqstp, __be32 *p, void *_argp) { + nlm_args *argp = _argp; struct nlm_lock *lock = &argp->lock; memset(lock, 0, sizeof(*lock)); @@ -271,8 +277,10 @@ nlm4svc_decode_shareargs(struct svc_rqst *rqstp, __be32 *p, nlm_args *argp) } int -nlm4svc_encode_shareres(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp) +nlm4svc_encode_shareres(void *rqstp, __be32 *p, void *_resp) { + struct nlm_res *resp = _resp; + if (!(p = nlm4_encode_cookie(p, &resp->cookie))) return 0; *p++ = resp->status; @@ -281,8 +289,10 @@ nlm4svc_encode_shareres(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp) } int -nlm4svc_encode_res(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp) +nlm4svc_encode_res(void *rqstp, __be32 *p, void *_resp) { + struct nlm_res *resp = _resp; + if (!(p = nlm4_encode_cookie(p, &resp->cookie))) return 0; *p++ = resp->status; @@ -290,8 +300,9 @@ nlm4svc_encode_res(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp) } int -nlm4svc_decode_notify(struct svc_rqst *rqstp, __be32 *p, struct nlm_args *argp) +nlm4svc_decode_notify(void *rqstp, __be32 *p, void *_argp) { + struct nlm_args *argp = _argp; struct nlm_lock *lock = &argp->lock; if (!(p = xdr_decode_string_inplace(p, &lock->caller, @@ -302,8 +313,10 @@ nlm4svc_decode_notify(struct svc_rqst *rqstp, __be32 *p, struct nlm_args *argp) } int -nlm4svc_decode_reboot(struct svc_rqst *rqstp, __be32 *p, struct nlm_reboot *argp) +nlm4svc_decode_reboot(void *rqstp, __be32 *p, void *_argp) { + struct nlm_reboot *argp = _argp; + if (!(p = xdr_decode_string_inplace(p, &argp->mon, &argp->len, SM_MAXSTRLEN))) return 0; argp->state = ntohl(*p++); @@ -313,8 +326,10 @@ nlm4svc_decode_reboot(struct svc_rqst *rqstp, __be32 *p, struct nlm_reboot *argp } int -nlm4svc_decode_res(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp) +nlm4svc_decode_res(void *rqstp, __be32 *p, void *_resp) { + struct nlm_res *resp = _resp; + if (!(p = nlm4_decode_cookie(p, &resp->cookie))) return 0; resp->status = *p++; @@ -322,13 +337,13 @@ nlm4svc_decode_res(struct svc_rqst *rqstp, __be32 *p, struct nlm_res *resp) } int -nlm4svc_decode_void(struct svc_rqst *rqstp, __be32 *p, void *dummy) +nlm4svc_decode_void(void *rqstp, __be32 *p, void *dummy) { return xdr_argsize_check(rqstp, p); } int -nlm4svc_encode_void(struct svc_rqst *rqstp, __be32 *p, void *dummy) +nlm4svc_encode_void(void *rqstp, __be32 *p, void *dummy) { return xdr_ressize_check(rqstp, p); } diff --git a/fs/logfs/dev_bdev.c b/fs/logfs/dev_bdev.c index a8329cc..b3d18fb 100644 --- a/fs/logfs/dev_bdev.c +++ b/fs/logfs/dev_bdev.c @@ -34,9 +34,8 @@ static int sync_request(struct page *page, struct block_device *bdev, int op) return submit_bio_wait(&bio); } -static int bdev_readpage(void *_sb, struct page *page) +static int bdev_readpage(struct super_block *sb, struct page *page) { - struct super_block *sb = _sb; struct block_device *bdev = logfs_super(sb)->s_bdev; int err; @@ -52,6 +51,11 @@ static int bdev_readpage(void *_sb, struct page *page) return err; } +static int bdev_filler(struct file *file, struct page *page) +{ + return bdev_readpage((struct super_block *)file, page); +} + static DECLARE_WAIT_QUEUE_HEAD(wq); static void writeseg_end_io(struct bio *bio) @@ -251,7 +255,7 @@ static struct page *bdev_find_first_sb(struct super_block *sb, u64 *ofs) { struct logfs_super *super = logfs_super(sb); struct address_space *mapping = super->s_mapping_inode->i_mapping; - filler_t *filler = bdev_readpage; + filler_t *filler = bdev_filler; *ofs = 0; return read_cache_page(mapping, 0, filler, sb); @@ -261,7 +265,7 @@ static struct page *bdev_find_last_sb(struct super_block *sb, u64 *ofs) { struct logfs_super *super = logfs_super(sb); struct address_space *mapping = super->s_mapping_inode->i_mapping; - filler_t *filler = bdev_readpage; + filler_t *filler = bdev_filler; u64 pos = (super->s_bdev->bd_inode->i_size & ~0xfffULL) - 0x1000; pgoff_t index = pos >> PAGE_SHIFT; @@ -292,6 +296,7 @@ static const struct logfs_device_ops bd_devops = { .find_last_sb = bdev_find_last_sb, .write_sb = bdev_write_sb, .readpage = bdev_readpage, + .filler = bdev_filler, .writeseg = bdev_writeseg, .erase = bdev_erase, .can_write_buf = bdev_can_write_buf, diff --git a/fs/logfs/dev_mtd.c b/fs/logfs/dev_mtd.c index b76a62b..317c6ff 100644 --- a/fs/logfs/dev_mtd.c +++ b/fs/logfs/dev_mtd.c @@ -122,9 +122,8 @@ static void logfs_mtd_sync(struct super_block *sb) mtd_sync(mtd); } -static int logfs_mtd_readpage(void *_sb, struct page *page) +static int logfs_mtd_readpage(struct super_block *sb, struct page *page) { - struct super_block *sb = _sb; int err; err = logfs_mtd_read(sb, page->index << PAGE_SHIFT, PAGE_SIZE, @@ -145,11 +144,16 @@ static int logfs_mtd_readpage(void *_sb, struct page *page) return err; } +static int logfs_mtd_filler(struct file *file, struct page *page) +{ + return logfs_mtd_readpage((struct super_block *)file, page); +} + static struct page *logfs_mtd_find_first_sb(struct super_block *sb, u64 *ofs) { struct logfs_super *super = logfs_super(sb); struct address_space *mapping = super->s_mapping_inode->i_mapping; - filler_t *filler = logfs_mtd_readpage; + filler_t *filler = logfs_mtd_filler; struct mtd_info *mtd = super->s_mtd; *ofs = 0; @@ -166,7 +170,7 @@ static struct page *logfs_mtd_find_last_sb(struct super_block *sb, u64 *ofs) { struct logfs_super *super = logfs_super(sb); struct address_space *mapping = super->s_mapping_inode->i_mapping; - filler_t *filler = logfs_mtd_readpage; + filler_t *filler = logfs_mtd_filler; struct mtd_info *mtd = super->s_mtd; *ofs = mtd->size - mtd->erasesize; @@ -254,6 +258,7 @@ static const struct logfs_device_ops mtd_devops = { .find_first_sb = logfs_mtd_find_first_sb, .find_last_sb = logfs_mtd_find_last_sb, .readpage = logfs_mtd_readpage, + .filler = logfs_mtd_filler, .writeseg = logfs_mtd_writeseg, .erase = logfs_mtd_erase, .can_write_buf = logfs_mtd_can_write_buf, diff --git a/fs/logfs/dir.c b/fs/logfs/dir.c index c87ea52..8ddacc1 100644 --- a/fs/logfs/dir.c +++ b/fs/logfs/dir.c @@ -174,7 +174,7 @@ static struct page *logfs_get_dd_page(struct inode *dir, struct dentry *dentry) if (!logfs_exist_block(dir, index)) continue; page = read_cache_page(dir->i_mapping, index, - (filler_t *)logfs_readpage, NULL); + logfs_readpage, NULL); if (IS_ERR(page)) return page; dd = kmap_atomic(page); @@ -306,7 +306,7 @@ static int logfs_readdir(struct file *file, struct dir_context *ctx) continue; } page = read_cache_page(dir->i_mapping, pos, - (filler_t *)logfs_readpage, NULL); + logfs_readpage, NULL); if (IS_ERR(page)) return PTR_ERR(page); dd = kmap(page); diff --git a/fs/logfs/logfs.h b/fs/logfs/logfs.h index 27d040e..8959149 100644 --- a/fs/logfs/logfs.h +++ b/fs/logfs/logfs.h @@ -151,7 +151,8 @@ struct logfs_device_ops { struct page *(*find_first_sb)(struct super_block *sb, u64 *ofs); struct page *(*find_last_sb)(struct super_block *sb, u64 *ofs); int (*write_sb)(struct super_block *sb, struct page *page); - int (*readpage)(void *_sb, struct page *page); + int (*readpage)(struct super_block *sb, struct page *page); + int (*filler)(struct file *file, struct page *page); void (*writeseg)(struct super_block *sb, u64 ofs, size_t len); int (*erase)(struct super_block *sb, loff_t ofs, size_t len, int ensure_write); @@ -617,8 +618,6 @@ static inline int logfs_buf_recover(struct logfs_area *area, u64 ofs, } /* super.c */ -struct page *emergency_read_begin(struct address_space *mapping, pgoff_t index); -void emergency_read_end(struct page *page); void logfs_crash_dump(struct super_block *sb); int logfs_statfs(struct dentry *dentry, struct kstatfs *stats); int logfs_check_ds(struct logfs_disk_super *ds); diff --git a/fs/logfs/readwrite.c b/fs/logfs/readwrite.c index bf19bf4..c13c0bf 100644 --- a/fs/logfs/readwrite.c +++ b/fs/logfs/readwrite.c @@ -1963,7 +1963,7 @@ int logfs_read_inode(struct inode *inode) return -ENODATA; page = read_cache_page(master_inode->i_mapping, ino, - (filler_t *)logfs_readpage, NULL); + logfs_readpage, NULL); if (IS_ERR(page)) return PTR_ERR(page); diff --git a/fs/logfs/segment.c b/fs/logfs/segment.c index 1efd605..d712407 100644 --- a/fs/logfs/segment.c +++ b/fs/logfs/segment.c @@ -54,7 +54,7 @@ static struct page *get_mapping_page(struct super_block *sb, pgoff_t index, { struct logfs_super *super = logfs_super(sb); struct address_space *mapping = super->s_mapping_inode->i_mapping; - filler_t *filler = super->s_devops->readpage; + filler_t *filler = super->s_devops->filler; struct page *page; BUG_ON(mapping_gfp_constraint(mapping, __GFP_FS)); diff --git a/fs/logfs/super.c b/fs/logfs/super.c index 5751082..7619dac 100644 --- a/fs/logfs/super.c +++ b/fs/logfs/super.c @@ -18,39 +18,6 @@ #include <linux/statfs.h> #include <linux/buffer_head.h> -static DEFINE_MUTEX(emergency_mutex); -static struct page *emergency_page; - -struct page *emergency_read_begin(struct address_space *mapping, pgoff_t index) -{ - filler_t *filler = (filler_t *)mapping->a_ops->readpage; - struct page *page; - int err; - - page = read_cache_page(mapping, index, filler, NULL); - if (page) - return page; - - /* No more pages available, switch to emergency page */ - printk(KERN_INFO"Logfs: Using emergency page\n"); - mutex_lock(&emergency_mutex); - err = filler(NULL, emergency_page); - if (err) { - mutex_unlock(&emergency_mutex); - printk(KERN_EMERG"Logfs: Error reading emergency page\n"); - return ERR_PTR(err); - } - return emergency_page; -} - -void emergency_read_end(struct page *page) -{ - if (page == emergency_page) - mutex_unlock(&emergency_mutex); - else - put_page(page); -} - static void dump_segfile(struct super_block *sb) { struct logfs_super *super = logfs_super(sb); @@ -614,10 +581,6 @@ static int __init logfs_init(void) { int ret; - emergency_page = alloc_pages(GFP_KERNEL, 0); - if (!emergency_page) - return -ENOMEM; - ret = logfs_compr_init(); if (ret) goto out1; @@ -633,7 +596,6 @@ static int __init logfs_init(void) out2: logfs_compr_exit(); out1: - __free_pages(emergency_page, 0); return ret; } @@ -642,7 +604,6 @@ static void __exit logfs_exit(void) unregister_filesystem(&logfs_fs_type); logfs_destroy_inode_cache(); logfs_compr_exit(); - __free_pages(emergency_page, 0); } module_init(logfs_init); diff --git a/fs/nfs/callback.h b/fs/nfs/callback.h index c701c30..8fc802a 100644 --- a/fs/nfs/callback.h +++ b/fs/nfs/callback.h @@ -114,8 +114,8 @@ struct cb_sequenceres { uint32_t csr_target_highestslotid; }; -extern __be32 nfs4_callback_sequence(struct cb_sequenceargs *args, - struct cb_sequenceres *res, +extern __be32 nfs4_callback_sequence(void *_args, + void *_res, struct cb_process_state *cps); #define RCA4_TYPE_MASK_RDATA_DLG 0 @@ -134,14 +134,14 @@ struct cb_recallanyargs { uint32_t craa_type_mask; }; -extern __be32 nfs4_callback_recallany(struct cb_recallanyargs *args, +extern __be32 nfs4_callback_recallany(void *_args, void *dummy, struct cb_process_state *cps); struct cb_recallslotargs { uint32_t crsa_target_highest_slotid; }; -extern __be32 nfs4_callback_recallslot(struct cb_recallslotargs *args, +extern __be32 nfs4_callback_recallslot(void *_args, void *dummy, struct cb_process_state *cps); @@ -160,7 +160,7 @@ struct cb_layoutrecallargs { }; extern __be32 nfs4_callback_layoutrecall( - struct cb_layoutrecallargs *args, + void *_args, void *dummy, struct cb_process_state *cps); struct cb_devicenotifyitem { @@ -176,7 +176,7 @@ struct cb_devicenotifyargs { }; extern __be32 nfs4_callback_devicenotify( - struct cb_devicenotifyargs *args, + void *args, void *dummy, struct cb_process_state *cps); struct cb_notify_lock_args { @@ -185,15 +185,15 @@ struct cb_notify_lock_args { bool cbnl_valid; }; -extern __be32 nfs4_callback_notify_lock(struct cb_notify_lock_args *args, +extern __be32 nfs4_callback_notify_lock(void *_args, void *dummy, struct cb_process_state *cps); #endif /* CONFIG_NFS_V4_1 */ extern int check_gss_callback_principal(struct nfs_client *, struct svc_rqst *); -extern __be32 nfs4_callback_getattr(struct cb_getattrargs *args, - struct cb_getattrres *res, +extern __be32 nfs4_callback_getattr(void *args, + void *res, struct cb_process_state *cps); -extern __be32 nfs4_callback_recall(struct cb_recallargs *args, void *dummy, +extern __be32 nfs4_callback_recall(void *args, void *dummy, struct cb_process_state *cps); #if IS_ENABLED(CONFIG_NFS_V4) extern int nfs_callback_up(u32 minorversion, struct rpc_xprt *xprt); diff --git a/fs/nfs/callback_proc.c b/fs/nfs/callback_proc.c index e9aa235..e492c43 100644 --- a/fs/nfs/callback_proc.c +++ b/fs/nfs/callback_proc.c @@ -19,10 +19,12 @@ #define NFSDBG_FACILITY NFSDBG_CALLBACK -__be32 nfs4_callback_getattr(struct cb_getattrargs *args, - struct cb_getattrres *res, +__be32 nfs4_callback_getattr(void *_args, + void *_res, struct cb_process_state *cps) { + struct cb_getattrargs *args = _args; + struct cb_getattrres *res = _res; struct nfs_delegation *delegation; struct nfs_inode *nfsi; struct inode *inode; @@ -68,9 +70,10 @@ __be32 nfs4_callback_getattr(struct cb_getattrargs *args, return res->status; } -__be32 nfs4_callback_recall(struct cb_recallargs *args, void *dummy, +__be32 nfs4_callback_recall(void *_args, void *dummy, struct cb_process_state *cps) { + struct cb_recallargs *args = _args; struct inode *inode; __be32 res; @@ -294,7 +297,7 @@ static u32 do_callback_layoutrecall(struct nfs_client *clp, } -__be32 nfs4_callback_layoutrecall(struct cb_layoutrecallargs *args, +__be32 nfs4_callback_layoutrecall(void *args, void *dummy, struct cb_process_state *cps) { u32 res; @@ -321,9 +324,10 @@ static void pnfs_recall_all_layouts(struct nfs_client *clp) do_callback_layoutrecall(clp, &args); } -__be32 nfs4_callback_devicenotify(struct cb_devicenotifyargs *args, +__be32 nfs4_callback_devicenotify(void *_args, void *dummy, struct cb_process_state *cps) { + struct cb_devicenotifyargs *args = _args; int i; __be32 res = 0; struct nfs_client *clp = cps->clp; @@ -465,10 +469,12 @@ static bool referring_call_exists(struct nfs_client *clp, return status; } -__be32 nfs4_callback_sequence(struct cb_sequenceargs *args, - struct cb_sequenceres *res, +__be32 nfs4_callback_sequence(void *_args, + void *_res, struct cb_process_state *cps) { + struct cb_sequenceargs *args = _args; + struct cb_sequenceres *res = _res; struct nfs4_slot_table *tbl; struct nfs4_slot *slot; struct nfs_client *clp; @@ -569,9 +575,10 @@ validate_bitmap_values(unsigned long mask) return (mask & ~RCA4_TYPE_MASK_ALL) == 0; } -__be32 nfs4_callback_recallany(struct cb_recallanyargs *args, void *dummy, +__be32 nfs4_callback_recallany(void *_args, void *dummy, struct cb_process_state *cps) { + struct cb_recallanyargs *args = _args; __be32 status; fmode_t flags = 0; @@ -604,9 +611,10 @@ __be32 nfs4_callback_recallany(struct cb_recallanyargs *args, void *dummy, } /* Reduce the fore channel's max_slots to the target value */ -__be32 nfs4_callback_recallslot(struct cb_recallslotargs *args, void *dummy, +__be32 nfs4_callback_recallslot(void *_args, void *dummy, struct cb_process_state *cps) { + struct cb_recallslotargs *args = _args; struct nfs4_slot_table *fc_tbl; __be32 status; @@ -629,9 +637,10 @@ __be32 nfs4_callback_recallslot(struct cb_recallslotargs *args, void *dummy, return status; } -__be32 nfs4_callback_notify_lock(struct cb_notify_lock_args *args, void *dummy, +__be32 nfs4_callback_notify_lock(void *_args, void *dummy, struct cb_process_state *cps) { + struct cb_notify_lock_args *args = _args; if (!cps->clp) /* set in cb_sequence */ return htonl(NFS4ERR_OP_NOT_IN_SESSION); diff --git a/fs/nfs/callback_xdr.c b/fs/nfs/callback_xdr.c index eb094c6..3f2abc4 100644 --- a/fs/nfs/callback_xdr.c +++ b/fs/nfs/callback_xdr.c @@ -54,7 +54,7 @@ struct callback_op { callback_decode_arg_t decode_args; callback_encode_res_t encode_res; long res_maxsize; -}; +} __do_const; static struct callback_op callback_ops[]; @@ -63,12 +63,12 @@ static __be32 nfs4_callback_null(struct svc_rqst *rqstp, void *argp, void *resp) return htonl(NFS4_OK); } -static int nfs4_decode_void(struct svc_rqst *rqstp, __be32 *p, void *dummy) +static int nfs4_decode_void(void *rqstp, __be32 *p, void *dummy) { return xdr_argsize_check(rqstp, p); } -static int nfs4_encode_void(struct svc_rqst *rqstp, __be32 *p, void *dummy) +static int nfs4_encode_void(void *rqstp, __be32 *p, void *dummy) { return xdr_ressize_check(rqstp, p); } @@ -200,8 +200,9 @@ static __be32 decode_op_hdr(struct xdr_stream *xdr, unsigned int *op) return 0; } -static __be32 decode_getattr_args(struct svc_rqst *rqstp, struct xdr_stream *xdr, struct cb_getattrargs *args) +static __be32 decode_getattr_args(struct svc_rqst *rqstp, struct xdr_stream *xdr, void *_args) { + struct cb_getattrargs *args = _args; __be32 status; status = decode_fh(xdr, &args->fh); @@ -213,8 +214,9 @@ static __be32 decode_getattr_args(struct svc_rqst *rqstp, struct xdr_stream *xdr return status; } -static __be32 decode_recall_args(struct svc_rqst *rqstp, struct xdr_stream *xdr, struct cb_recallargs *args) +static __be32 decode_recall_args(struct svc_rqst *rqstp, struct xdr_stream *xdr, void *_args) { + struct cb_recallargs *args = _args; __be32 *p; __be32 status; @@ -242,8 +244,9 @@ static __be32 decode_layout_stateid(struct xdr_stream *xdr, nfs4_stateid *statei static __be32 decode_layoutrecall_args(struct svc_rqst *rqstp, struct xdr_stream *xdr, - struct cb_layoutrecallargs *args) + void *_args) { + struct cb_layoutrecallargs *args = _args; __be32 *p; __be32 status = 0; uint32_t iomode; @@ -302,8 +305,9 @@ static __be32 decode_layoutrecall_args(struct svc_rqst *rqstp, static __be32 decode_devicenotify_args(struct svc_rqst *rqstp, struct xdr_stream *xdr, - struct cb_devicenotifyargs *args) + void *_args) { + struct cb_devicenotifyargs *args = _args; __be32 *p; __be32 status = 0; u32 tmp; @@ -443,8 +447,9 @@ static __be32 decode_rc_list(struct xdr_stream *xdr, static __be32 decode_cb_sequence_args(struct svc_rqst *rqstp, struct xdr_stream *xdr, - struct cb_sequenceargs *args) + void *_args) { + struct cb_sequenceargs *args = _args; __be32 *p; int i; __be32 status; @@ -505,8 +510,9 @@ static __be32 decode_cb_sequence_args(struct svc_rqst *rqstp, static __be32 decode_recallany_args(struct svc_rqst *rqstp, struct xdr_stream *xdr, - struct cb_recallanyargs *args) + void *_args) { + struct cb_recallanyargs *args = _args; uint32_t bitmap[2]; __be32 *p, status; @@ -524,8 +530,9 @@ static __be32 decode_recallany_args(struct svc_rqst *rqstp, static __be32 decode_recallslot_args(struct svc_rqst *rqstp, struct xdr_stream *xdr, - struct cb_recallslotargs *args) + void *_args) { + struct cb_recallslotargs *args = _args; __be32 *p; p = read_buf(xdr, 4); @@ -565,8 +572,9 @@ static __be32 decode_lockowner(struct xdr_stream *xdr, struct cb_notify_lock_arg return 0; } -static __be32 decode_notify_lock_args(struct svc_rqst *rqstp, struct xdr_stream *xdr, struct cb_notify_lock_args *args) +static __be32 decode_notify_lock_args(struct svc_rqst *rqstp, struct xdr_stream *xdr, void *_args) { + struct cb_notify_lock_args *args = _args; __be32 status; status = decode_fh(xdr, &args->cbnl_fh); @@ -703,8 +711,9 @@ static __be32 encode_op_hdr(struct xdr_stream *xdr, uint32_t op, __be32 res) return 0; } -static __be32 encode_getattr_res(struct svc_rqst *rqstp, struct xdr_stream *xdr, const struct cb_getattrres *res) +static __be32 encode_getattr_res(struct svc_rqst *rqstp, struct xdr_stream *xdr, void *_res) { + const struct cb_getattrres *res = _res; __be32 *savep = NULL; __be32 status = res->status; @@ -746,8 +755,9 @@ static __be32 encode_sessionid(struct xdr_stream *xdr, static __be32 encode_cb_sequence_res(struct svc_rqst *rqstp, struct xdr_stream *xdr, - const struct cb_sequenceres *res) + void *_res) { + const struct cb_sequenceres *res = _res; __be32 *p; __be32 status = res->csr_status; @@ -1011,48 +1021,46 @@ static struct callback_op callback_ops[] = { .res_maxsize = CB_OP_HDR_RES_MAXSZ, }, [OP_CB_GETATTR] = { - .process_op = (callback_process_op_t)nfs4_callback_getattr, - .decode_args = (callback_decode_arg_t)decode_getattr_args, - .encode_res = (callback_encode_res_t)encode_getattr_res, + .process_op = nfs4_callback_getattr, + .decode_args = decode_getattr_args, + .encode_res = encode_getattr_res, .res_maxsize = CB_OP_GETATTR_RES_MAXSZ, }, [OP_CB_RECALL] = { - .process_op = (callback_process_op_t)nfs4_callback_recall, - .decode_args = (callback_decode_arg_t)decode_recall_args, + .process_op = nfs4_callback_recall, + .decode_args = decode_recall_args, .res_maxsize = CB_OP_RECALL_RES_MAXSZ, }, #if defined(CONFIG_NFS_V4_1) [OP_CB_LAYOUTRECALL] = { - .process_op = (callback_process_op_t)nfs4_callback_layoutrecall, - .decode_args = - (callback_decode_arg_t)decode_layoutrecall_args, + .process_op = nfs4_callback_layoutrecall, + .decode_args = decode_layoutrecall_args, .res_maxsize = CB_OP_LAYOUTRECALL_RES_MAXSZ, }, [OP_CB_NOTIFY_DEVICEID] = { - .process_op = (callback_process_op_t)nfs4_callback_devicenotify, - .decode_args = - (callback_decode_arg_t)decode_devicenotify_args, + .process_op = nfs4_callback_devicenotify, + .decode_args = decode_devicenotify_args, .res_maxsize = CB_OP_DEVICENOTIFY_RES_MAXSZ, }, [OP_CB_SEQUENCE] = { - .process_op = (callback_process_op_t)nfs4_callback_sequence, - .decode_args = (callback_decode_arg_t)decode_cb_sequence_args, - .encode_res = (callback_encode_res_t)encode_cb_sequence_res, + .process_op = nfs4_callback_sequence, + .decode_args = decode_cb_sequence_args, + .encode_res = encode_cb_sequence_res, .res_maxsize = CB_OP_SEQUENCE_RES_MAXSZ, }, [OP_CB_RECALL_ANY] = { - .process_op = (callback_process_op_t)nfs4_callback_recallany, - .decode_args = (callback_decode_arg_t)decode_recallany_args, + .process_op = nfs4_callback_recallany, + .decode_args = decode_recallany_args, .res_maxsize = CB_OP_RECALLANY_RES_MAXSZ, }, [OP_CB_RECALL_SLOT] = { - .process_op = (callback_process_op_t)nfs4_callback_recallslot, - .decode_args = (callback_decode_arg_t)decode_recallslot_args, + .process_op = nfs4_callback_recallslot, + .decode_args = decode_recallslot_args, .res_maxsize = CB_OP_RECALLSLOT_RES_MAXSZ, }, [OP_CB_NOTIFY_LOCK] = { - .process_op = (callback_process_op_t)nfs4_callback_notify_lock, - .decode_args = (callback_decode_arg_t)decode_notify_lock_args, + .process_op = nfs4_callback_notify_lock, + .decode_args = decode_notify_lock_args, .res_maxsize = CB_OP_NOTIFY_LOCK_RES_MAXSZ, }, #endif /* CONFIG_NFS_V4_1 */ @@ -1064,13 +1072,13 @@ static struct callback_op callback_ops[] = { static struct svc_procedure nfs4_callback_procedures1[] = { [CB_NULL] = { .pc_func = nfs4_callback_null, - .pc_decode = (kxdrproc_t)nfs4_decode_void, - .pc_encode = (kxdrproc_t)nfs4_encode_void, + .pc_decode = nfs4_decode_void, + .pc_encode = nfs4_encode_void, .pc_xdrressize = 1, }, [CB_COMPOUND] = { .pc_func = nfs4_callback_compound, - .pc_encode = (kxdrproc_t)nfs4_encode_void, + .pc_encode = nfs4_encode_void, .pc_argsize = 256, .pc_ressize = 256, .pc_xdrressize = NFS4_CALLBACK_BUFSIZE, diff --git a/fs/nfs/dir.c b/fs/nfs/dir.c index 53e02b8..f87205c 100644 --- a/fs/nfs/dir.c +++ b/fs/nfs/dir.c @@ -713,8 +713,9 @@ int nfs_readdir_xdr_to_array(nfs_readdir_descriptor_t *desc, struct page *page, * We only need to convert from xdr once so future lookups are much simpler */ static -int nfs_readdir_filler(nfs_readdir_descriptor_t *desc, struct page* page) +int nfs_readdir_filler(struct file *_desc, struct page* page) { + nfs_readdir_descriptor_t *desc = (nfs_readdir_descriptor_t *)_desc; struct inode *inode = file_inode(desc->file); int ret; @@ -749,7 +750,7 @@ struct page *get_cache_page(nfs_readdir_descriptor_t *desc) for (;;) { page = read_cache_page(desc->file->f_mapping, - desc->page_index, (filler_t *)nfs_readdir_filler, desc); + desc->page_index, nfs_readdir_filler, desc); if (IS_ERR(page) || grab_page(page)) break; put_page(page); diff --git a/fs/nfs/mount_clnt.c b/fs/nfs/mount_clnt.c index 09b1900..344f4c2 100644 --- a/fs/nfs/mount_clnt.c +++ b/fs/nfs/mount_clnt.c @@ -303,8 +303,8 @@ static void encode_mntdirpath(struct xdr_stream *xdr, const char *pathname) xdr_encode_opaque(p, pathname, pathname_len); } -static void mnt_xdr_enc_dirpath(struct rpc_rqst *req, struct xdr_stream *xdr, - const char *dirpath) +static void mnt_xdr_enc_dirpath(void *req, struct xdr_stream *xdr, + void *dirpath) { encode_mntdirpath(xdr, dirpath); } @@ -355,10 +355,11 @@ static int decode_fhandle(struct xdr_stream *xdr, struct mountres *res) return 0; } -static int mnt_xdr_dec_mountres(struct rpc_rqst *req, +static int mnt_xdr_dec_mountres(void *req, struct xdr_stream *xdr, - struct mountres *res) + void *_res) { + struct mountres *res = _res; int status; status = decode_status(xdr, res); @@ -447,10 +448,11 @@ static int decode_auth_flavors(struct xdr_stream *xdr, struct mountres *res) return 0; } -static int mnt_xdr_dec_mountres3(struct rpc_rqst *req, +static int mnt_xdr_dec_mountres3(void *req, struct xdr_stream *xdr, - struct mountres *res) + void *_res) { + struct mountres *res = _res; int status; status = decode_fhs_status(xdr, res); @@ -467,8 +469,8 @@ static int mnt_xdr_dec_mountres3(struct rpc_rqst *req, static struct rpc_procinfo mnt_procedures[] = { [MOUNTPROC_MNT] = { .p_proc = MOUNTPROC_MNT, - .p_encode = (kxdreproc_t)mnt_xdr_enc_dirpath, - .p_decode = (kxdrdproc_t)mnt_xdr_dec_mountres, + .p_encode = mnt_xdr_enc_dirpath, + .p_decode = mnt_xdr_dec_mountres, .p_arglen = MNT_enc_dirpath_sz, .p_replen = MNT_dec_mountres_sz, .p_statidx = MOUNTPROC_MNT, @@ -476,7 +478,7 @@ static struct rpc_procinfo mnt_procedures[] = { }, [MOUNTPROC_UMNT] = { .p_proc = MOUNTPROC_UMNT, - .p_encode = (kxdreproc_t)mnt_xdr_enc_dirpath, + .p_encode = mnt_xdr_enc_dirpath, .p_arglen = MNT_enc_dirpath_sz, .p_statidx = MOUNTPROC_UMNT, .p_name = "UMOUNT", @@ -486,8 +488,8 @@ static struct rpc_procinfo mnt_procedures[] = { static struct rpc_procinfo mnt3_procedures[] = { [MOUNTPROC3_MNT] = { .p_proc = MOUNTPROC3_MNT, - .p_encode = (kxdreproc_t)mnt_xdr_enc_dirpath, - .p_decode = (kxdrdproc_t)mnt_xdr_dec_mountres3, + .p_encode = mnt_xdr_enc_dirpath, + .p_decode = mnt_xdr_dec_mountres3, .p_arglen = MNT_enc_dirpath_sz, .p_replen = MNT_dec_mountres3_sz, .p_statidx = MOUNTPROC3_MNT, @@ -495,7 +497,7 @@ static struct rpc_procinfo mnt3_procedures[] = { }, [MOUNTPROC3_UMNT] = { .p_proc = MOUNTPROC3_UMNT, - .p_encode = (kxdreproc_t)mnt_xdr_enc_dirpath, + .p_encode = mnt_xdr_enc_dirpath, .p_arglen = MNT_enc_dirpath_sz, .p_statidx = MOUNTPROC3_UMNT, .p_name = "UMOUNT", diff --git a/fs/nfs/nfs2xdr.c b/fs/nfs/nfs2xdr.c index b4e03ed..6907eb4 100644 --- a/fs/nfs/nfs2xdr.c +++ b/fs/nfs/nfs2xdr.c @@ -566,9 +566,9 @@ static int decode_diropres(struct xdr_stream *xdr, struct nfs_diropok *result) * "NFS: Network File System Protocol Specification". */ -static void nfs2_xdr_enc_fhandle(struct rpc_rqst *req, +static void nfs2_xdr_enc_fhandle(void *req, struct xdr_stream *xdr, - const struct nfs_fh *fh) + void *fh) { encode_fhandle(xdr, fh); } @@ -581,25 +581,31 @@ static void nfs2_xdr_enc_fhandle(struct rpc_rqst *req, * sattr attributes; * }; */ -static void nfs2_xdr_enc_sattrargs(struct rpc_rqst *req, +static void nfs2_xdr_enc_sattrargs(void *req, struct xdr_stream *xdr, - const struct nfs_sattrargs *args) + void *_args) { + const struct nfs_sattrargs *args = _args; + encode_fhandle(xdr, args->fh); encode_sattr(xdr, args->sattr); } -static void nfs2_xdr_enc_diropargs(struct rpc_rqst *req, +static void nfs2_xdr_enc_diropargs(void *req, struct xdr_stream *xdr, - const struct nfs_diropargs *args) + void *_args) { + const struct nfs_diropargs *args = _args; + encode_diropargs(xdr, args->fh, args->name, args->len); } -static void nfs2_xdr_enc_readlinkargs(struct rpc_rqst *req, +static void nfs2_xdr_enc_readlinkargs(void *req, struct xdr_stream *xdr, - const struct nfs_readlinkargs *args) + void *_args) { + const struct nfs_readlinkargs *args = _args; + encode_fhandle(xdr, args->fh); prepare_reply_buffer(req, args->pages, args->pgbase, args->pglen, NFS_readlinkres_sz); @@ -630,10 +636,13 @@ static void encode_readargs(struct xdr_stream *xdr, *p = cpu_to_be32(count); } -static void nfs2_xdr_enc_readargs(struct rpc_rqst *req, +static void nfs2_xdr_enc_readargs(void *_req, struct xdr_stream *xdr, - const struct nfs_pgio_args *args) + void *_args) { + struct rpc_rqst *req = _req; + const struct nfs_pgio_args *args = _args; + encode_readargs(xdr, args); prepare_reply_buffer(req, args->pages, args->pgbase, args->count, NFS_readres_sz); @@ -670,9 +679,9 @@ static void encode_writeargs(struct xdr_stream *xdr, xdr_write_pages(xdr, args->pages, args->pgbase, count); } -static void nfs2_xdr_enc_writeargs(struct rpc_rqst *req, +static void nfs2_xdr_enc_writeargs(void *req, struct xdr_stream *xdr, - const struct nfs_pgio_args *args) + void *args) { encode_writeargs(xdr, args); xdr->buf->flags |= XDRBUF_WRITE; @@ -686,18 +695,22 @@ static void nfs2_xdr_enc_writeargs(struct rpc_rqst *req, * sattr attributes; * }; */ -static void nfs2_xdr_enc_createargs(struct rpc_rqst *req, +static void nfs2_xdr_enc_createargs(void *req, struct xdr_stream *xdr, - const struct nfs_createargs *args) + void *_args) { + const struct nfs_createargs *args = _args; + encode_diropargs(xdr, args->fh, args->name, args->len); encode_sattr(xdr, args->sattr); } -static void nfs2_xdr_enc_removeargs(struct rpc_rqst *req, +static void nfs2_xdr_enc_removeargs(void *req, struct xdr_stream *xdr, - const struct nfs_removeargs *args) + void *_args) { + const struct nfs_removeargs *args = _args; + encode_diropargs(xdr, args->fh, args->name.name, args->name.len); } @@ -709,10 +722,11 @@ static void nfs2_xdr_enc_removeargs(struct rpc_rqst *req, * diropargs to; * }; */ -static void nfs2_xdr_enc_renameargs(struct rpc_rqst *req, +static void nfs2_xdr_enc_renameargs(void *req, struct xdr_stream *xdr, - const struct nfs_renameargs *args) + void *_args) { + const struct nfs_renameargs *args = _args; const struct qstr *old = args->old_name; const struct qstr *new = args->new_name; @@ -728,10 +742,12 @@ static void nfs2_xdr_enc_renameargs(struct rpc_rqst *req, * diropargs to; * }; */ -static void nfs2_xdr_enc_linkargs(struct rpc_rqst *req, +static void nfs2_xdr_enc_linkargs(void *req, struct xdr_stream *xdr, - const struct nfs_linkargs *args) + void *_args) { + const struct nfs_linkargs *args = _args; + encode_fhandle(xdr, args->fromfh); encode_diropargs(xdr, args->tofh, args->toname, args->tolen); } @@ -745,10 +761,12 @@ static void nfs2_xdr_enc_linkargs(struct rpc_rqst *req, * sattr attributes; * }; */ -static void nfs2_xdr_enc_symlinkargs(struct rpc_rqst *req, +static void nfs2_xdr_enc_symlinkargs(void *req, struct xdr_stream *xdr, - const struct nfs_symlinkargs *args) + void *_args) { + const struct nfs_symlinkargs *args = _args; + encode_diropargs(xdr, args->fromfh, args->fromname, args->fromlen); encode_path(xdr, args->pages, args->pathlen); encode_sattr(xdr, args->sattr); @@ -775,10 +793,12 @@ static void encode_readdirargs(struct xdr_stream *xdr, *p = cpu_to_be32(args->count); } -static void nfs2_xdr_enc_readdirargs(struct rpc_rqst *req, +static void nfs2_xdr_enc_readdirargs(void *req, struct xdr_stream *xdr, - const struct nfs_readdirargs *args) + void *_args) { + const struct nfs_readdirargs *args = _args; + encode_readdirargs(xdr, args); prepare_reply_buffer(req, args->pages, 0, args->count, NFS_readdirres_sz); @@ -791,7 +811,7 @@ static void nfs2_xdr_enc_readdirargs(struct rpc_rqst *req, * "NFS: Network File System Protocol Specification". */ -static int nfs2_xdr_dec_stat(struct rpc_rqst *req, struct xdr_stream *xdr, +static int nfs2_xdr_dec_stat(void *req, struct xdr_stream *xdr, void *__unused) { enum nfs_stat status; @@ -808,14 +828,14 @@ static int nfs2_xdr_dec_stat(struct rpc_rqst *req, struct xdr_stream *xdr, return nfs_stat_to_errno(status); } -static int nfs2_xdr_dec_attrstat(struct rpc_rqst *req, struct xdr_stream *xdr, - struct nfs_fattr *result) +static int nfs2_xdr_dec_attrstat(void *req, struct xdr_stream *xdr, + void *result) { return decode_attrstat(xdr, result, NULL); } -static int nfs2_xdr_dec_diropres(struct rpc_rqst *req, struct xdr_stream *xdr, - struct nfs_diropok *result) +static int nfs2_xdr_dec_diropres(void *req, struct xdr_stream *xdr, + void *result) { return decode_diropres(xdr, result); } @@ -830,7 +850,7 @@ static int nfs2_xdr_dec_diropres(struct rpc_rqst *req, struct xdr_stream *xdr, * void; * }; */ -static int nfs2_xdr_dec_readlinkres(struct rpc_rqst *req, +static int nfs2_xdr_dec_readlinkres(void *req, struct xdr_stream *xdr, void *__unused) { enum nfs_stat status; @@ -859,9 +879,10 @@ static int nfs2_xdr_dec_readlinkres(struct rpc_rqst *req, * void; * }; */ -static int nfs2_xdr_dec_readres(struct rpc_rqst *req, struct xdr_stream *xdr, - struct nfs_pgio_res *result) +static int nfs2_xdr_dec_readres(void *req, struct xdr_stream *xdr, + void *_result) { + struct nfs_pgio_res *result = _result; enum nfs_stat status; int error; @@ -881,9 +902,11 @@ static int nfs2_xdr_dec_readres(struct rpc_rqst *req, struct xdr_stream *xdr, return nfs_stat_to_errno(status); } -static int nfs2_xdr_dec_writeres(struct rpc_rqst *req, struct xdr_stream *xdr, - struct nfs_pgio_res *result) +static int nfs2_xdr_dec_writeres(void *req, struct xdr_stream *xdr, + void *_result) { + struct nfs_pgio_res *result = _result; + /* All NFSv2 writes are "file sync" writes */ result->verf->committed = NFS_FILE_SYNC; return decode_attrstat(xdr, result->fattr, &result->op_status); @@ -981,7 +1004,7 @@ static int decode_readdirok(struct xdr_stream *xdr) return xdr_read_pages(xdr, xdr->buf->page_len); } -static int nfs2_xdr_dec_readdirres(struct rpc_rqst *req, +static int nfs2_xdr_dec_readdirres(void *req, struct xdr_stream *xdr, void *__unused) { enum nfs_stat status; @@ -1033,8 +1056,8 @@ static int decode_info(struct xdr_stream *xdr, struct nfs2_fsstat *result) return -EIO; } -static int nfs2_xdr_dec_statfsres(struct rpc_rqst *req, struct xdr_stream *xdr, - struct nfs2_fsstat *result) +static int nfs2_xdr_dec_statfsres(void *req, struct xdr_stream *xdr, + void *result) { enum nfs_stat status; int error; @@ -1118,8 +1141,8 @@ static int nfs_stat_to_errno(enum nfs_stat status) #define PROC(proc, argtype, restype, timer) \ [NFSPROC_##proc] = { \ .p_proc = NFSPROC_##proc, \ - .p_encode = (kxdreproc_t)nfs2_xdr_enc_##argtype, \ - .p_decode = (kxdrdproc_t)nfs2_xdr_dec_##restype, \ + .p_encode = nfs2_xdr_enc_##argtype, \ + .p_decode = nfs2_xdr_dec_##restype, \ .p_arglen = NFS_##argtype##_sz, \ .p_replen = NFS_##restype##_sz, \ .p_timer = timer, \ diff --git a/fs/nfs/nfs3xdr.c b/fs/nfs/nfs3xdr.c index 267126d..19c97b8 100644 --- a/fs/nfs/nfs3xdr.c +++ b/fs/nfs/nfs3xdr.c @@ -844,9 +844,9 @@ static void encode_diropargs3(struct xdr_stream *xdr, const struct nfs_fh *fh, * nfs_fh3 object; * }; */ -static void nfs3_xdr_enc_getattr3args(struct rpc_rqst *req, +static void nfs3_xdr_enc_getattr3args(void *req, struct xdr_stream *xdr, - const struct nfs_fh *fh) + void *fh) { encode_nfs_fh3(xdr, fh); } @@ -882,10 +882,12 @@ static void encode_sattrguard3(struct xdr_stream *xdr, } } -static void nfs3_xdr_enc_setattr3args(struct rpc_rqst *req, +static void nfs3_xdr_enc_setattr3args(void *req, struct xdr_stream *xdr, - const struct nfs3_sattrargs *args) + void *_args) { + const struct nfs3_sattrargs *args = _args; + encode_nfs_fh3(xdr, args->fh); encode_sattr3(xdr, args->sattr); encode_sattrguard3(xdr, args); @@ -898,10 +900,12 @@ static void nfs3_xdr_enc_setattr3args(struct rpc_rqst *req, * diropargs3 what; * }; */ -static void nfs3_xdr_enc_lookup3args(struct rpc_rqst *req, +static void nfs3_xdr_enc_lookup3args(void *req, struct xdr_stream *xdr, - const struct nfs3_diropargs *args) + void *_args) { + const struct nfs3_diropargs *args = _args; + encode_diropargs3(xdr, args->fh, args->name, args->len); } @@ -920,9 +924,9 @@ static void encode_access3args(struct xdr_stream *xdr, encode_uint32(xdr, args->access); } -static void nfs3_xdr_enc_access3args(struct rpc_rqst *req, +static void nfs3_xdr_enc_access3args(void *req, struct xdr_stream *xdr, - const struct nfs3_accessargs *args) + void *args) { encode_access3args(xdr, args); } @@ -934,10 +938,11 @@ static void nfs3_xdr_enc_access3args(struct rpc_rqst *req, * nfs_fh3 symlink; * }; */ -static void nfs3_xdr_enc_readlink3args(struct rpc_rqst *req, +static void nfs3_xdr_enc_readlink3args(void *req, struct xdr_stream *xdr, - const struct nfs3_readlinkargs *args) + void *_args) { + const struct nfs3_readlinkargs *args = _args; encode_nfs_fh3(xdr, args->fh); prepare_reply_buffer(req, args->pages, args->pgbase, args->pglen, NFS3_readlinkres_sz); @@ -964,10 +969,12 @@ static void encode_read3args(struct xdr_stream *xdr, *p = cpu_to_be32(args->count); } -static void nfs3_xdr_enc_read3args(struct rpc_rqst *req, +static void nfs3_xdr_enc_read3args(void *_req, struct xdr_stream *xdr, - const struct nfs_pgio_args *args) + void *_args) { + struct rpc_rqst *req = _req; + const struct nfs_pgio_args *args = _args; encode_read3args(xdr, args); prepare_reply_buffer(req, args->pages, args->pgbase, args->count, NFS3_readres_sz); @@ -1006,9 +1013,9 @@ static void encode_write3args(struct xdr_stream *xdr, xdr_write_pages(xdr, args->pages, args->pgbase, args->count); } -static void nfs3_xdr_enc_write3args(struct rpc_rqst *req, +static void nfs3_xdr_enc_write3args(void *req, struct xdr_stream *xdr, - const struct nfs_pgio_args *args) + void *args) { encode_write3args(xdr, args); xdr->buf->flags |= XDRBUF_WRITE; @@ -1053,10 +1060,12 @@ static void encode_createhow3(struct xdr_stream *xdr, } } -static void nfs3_xdr_enc_create3args(struct rpc_rqst *req, +static void nfs3_xdr_enc_create3args(void *req, struct xdr_stream *xdr, - const struct nfs3_createargs *args) + void *_args) { + const struct nfs3_createargs *args = _args; + encode_diropargs3(xdr, args->fh, args->name, args->len); encode_createhow3(xdr, args); } @@ -1069,10 +1078,12 @@ static void nfs3_xdr_enc_create3args(struct rpc_rqst *req, * sattr3 attributes; * }; */ -static void nfs3_xdr_enc_mkdir3args(struct rpc_rqst *req, +static void nfs3_xdr_enc_mkdir3args(void *req, struct xdr_stream *xdr, - const struct nfs3_mkdirargs *args) + void *_args) { + const struct nfs3_mkdirargs *args = _args; + encode_diropargs3(xdr, args->fh, args->name, args->len); encode_sattr3(xdr, args->sattr); } @@ -1097,10 +1108,12 @@ static void encode_symlinkdata3(struct xdr_stream *xdr, encode_nfspath3(xdr, args->pages, args->pathlen); } -static void nfs3_xdr_enc_symlink3args(struct rpc_rqst *req, +static void nfs3_xdr_enc_symlink3args(void *req, struct xdr_stream *xdr, - const struct nfs3_symlinkargs *args) + void *_args) { + const struct nfs3_symlinkargs *args = _args; + encode_diropargs3(xdr, args->fromfh, args->fromname, args->fromlen); encode_symlinkdata3(xdr, args); xdr->buf->flags |= XDRBUF_WRITE; @@ -1158,10 +1171,12 @@ static void encode_mknoddata3(struct xdr_stream *xdr, } } -static void nfs3_xdr_enc_mknod3args(struct rpc_rqst *req, +static void nfs3_xdr_enc_mknod3args(void *req, struct xdr_stream *xdr, - const struct nfs3_mknodargs *args) + void *_args) { + const struct nfs3_mknodargs *args = _args; + encode_diropargs3(xdr, args->fh, args->name, args->len); encode_mknoddata3(xdr, args); } @@ -1173,10 +1188,12 @@ static void nfs3_xdr_enc_mknod3args(struct rpc_rqst *req, * diropargs3 object; * }; */ -static void nfs3_xdr_enc_remove3args(struct rpc_rqst *req, +static void nfs3_xdr_enc_remove3args(void *req, struct xdr_stream *xdr, - const struct nfs_removeargs *args) + void *_args) { + const struct nfs_removeargs *args = _args; + encode_diropargs3(xdr, args->fh, args->name.name, args->name.len); } @@ -1188,10 +1205,11 @@ static void nfs3_xdr_enc_remove3args(struct rpc_rqst *req, * diropargs3 to; * }; */ -static void nfs3_xdr_enc_rename3args(struct rpc_rqst *req, +static void nfs3_xdr_enc_rename3args(void *req, struct xdr_stream *xdr, - const struct nfs_renameargs *args) + void *_args) { + const struct nfs_renameargs *args = _args; const struct qstr *old = args->old_name; const struct qstr *new = args->new_name; @@ -1207,10 +1225,12 @@ static void nfs3_xdr_enc_rename3args(struct rpc_rqst *req, * diropargs3 link; * }; */ -static void nfs3_xdr_enc_link3args(struct rpc_rqst *req, +static void nfs3_xdr_enc_link3args(void *req, struct xdr_stream *xdr, - const struct nfs3_linkargs *args) + void *_args) { + const struct nfs3_linkargs *args = _args; + encode_nfs_fh3(xdr, args->fromfh); encode_diropargs3(xdr, args->tofh, args->toname, args->tolen); } @@ -1238,10 +1258,12 @@ static void encode_readdir3args(struct xdr_stream *xdr, *p = cpu_to_be32(args->count); } -static void nfs3_xdr_enc_readdir3args(struct rpc_rqst *req, +static void nfs3_xdr_enc_readdir3args(void *req, struct xdr_stream *xdr, - const struct nfs3_readdirargs *args) + void *_args) { + const struct nfs3_readdirargs *args = _args; + encode_readdir3args(xdr, args); prepare_reply_buffer(req, args->pages, 0, args->count, NFS3_readdirres_sz); @@ -1278,10 +1300,12 @@ static void encode_readdirplus3args(struct xdr_stream *xdr, *p = cpu_to_be32(args->count); } -static void nfs3_xdr_enc_readdirplus3args(struct rpc_rqst *req, +static void nfs3_xdr_enc_readdirplus3args(void *req, struct xdr_stream *xdr, - const struct nfs3_readdirargs *args) + void *_args) { + const struct nfs3_readdirargs *args = _args; + encode_readdirplus3args(xdr, args); prepare_reply_buffer(req, args->pages, 0, args->count, NFS3_readdirres_sz); @@ -1308,19 +1332,21 @@ static void encode_commit3args(struct xdr_stream *xdr, *p = cpu_to_be32(args->count); } -static void nfs3_xdr_enc_commit3args(struct rpc_rqst *req, +static void nfs3_xdr_enc_commit3args(void *req, struct xdr_stream *xdr, - const struct nfs_commitargs *args) + void *args) { encode_commit3args(xdr, args); } #ifdef CONFIG_NFS_V3_ACL -static void nfs3_xdr_enc_getacl3args(struct rpc_rqst *req, +static void nfs3_xdr_enc_getacl3args(void *req, struct xdr_stream *xdr, - const struct nfs3_getaclargs *args) + void *_args) { + const struct nfs3_getaclargs *args = _args; + encode_nfs_fh3(xdr, args->fh); encode_uint32(xdr, args->mask); if (args->mask & (NFS_ACL | NFS_DFACL)) @@ -1329,10 +1355,12 @@ static void nfs3_xdr_enc_getacl3args(struct rpc_rqst *req, ACL3_getaclres_sz); } -static void nfs3_xdr_enc_setacl3args(struct rpc_rqst *req, +static void nfs3_xdr_enc_setacl3args(void *_req, struct xdr_stream *xdr, - const struct nfs3_setaclargs *args) + void *_args) { + struct rpc_rqst *req = _req; + const struct nfs3_setaclargs *args = _args; unsigned int base; int error; @@ -1380,9 +1408,9 @@ static void nfs3_xdr_enc_setacl3args(struct rpc_rqst *req, * void; * }; */ -static int nfs3_xdr_dec_getattr3res(struct rpc_rqst *req, +static int nfs3_xdr_dec_getattr3res(void *req, struct xdr_stream *xdr, - struct nfs_fattr *result) + void *result) { enum nfs_stat status; int error; @@ -1417,9 +1445,9 @@ static int nfs3_xdr_dec_getattr3res(struct rpc_rqst *req, * SETATTR3resfail resfail; * }; */ -static int nfs3_xdr_dec_setattr3res(struct rpc_rqst *req, +static int nfs3_xdr_dec_setattr3res(void *req, struct xdr_stream *xdr, - struct nfs_fattr *result) + void *result) { enum nfs_stat status; int error; @@ -1458,10 +1486,11 @@ static int nfs3_xdr_dec_setattr3res(struct rpc_rqst *req, * LOOKUP3resfail resfail; * }; */ -static int nfs3_xdr_dec_lookup3res(struct rpc_rqst *req, +static int nfs3_xdr_dec_lookup3res(void *req, struct xdr_stream *xdr, - struct nfs3_diropres *result) + void *_result) { + struct nfs3_diropres *result = _result; enum nfs_stat status; int error; @@ -1505,10 +1534,11 @@ static int nfs3_xdr_dec_lookup3res(struct rpc_rqst *req, * ACCESS3resfail resfail; * }; */ -static int nfs3_xdr_dec_access3res(struct rpc_rqst *req, +static int nfs3_xdr_dec_access3res(void *req, struct xdr_stream *xdr, - struct nfs3_accessres *result) + void *_result) { + struct nfs3_accessres *result = _result; enum nfs_stat status; int error; @@ -1546,9 +1576,9 @@ static int nfs3_xdr_dec_access3res(struct rpc_rqst *req, * READLINK3resfail resfail; * }; */ -static int nfs3_xdr_dec_readlink3res(struct rpc_rqst *req, +static int nfs3_xdr_dec_readlink3res(void *req, struct xdr_stream *xdr, - struct nfs_fattr *result) + void *result) { enum nfs_stat status; int error; @@ -1625,9 +1655,10 @@ static int decode_read3resok(struct xdr_stream *xdr, return -EIO; } -static int nfs3_xdr_dec_read3res(struct rpc_rqst *req, struct xdr_stream *xdr, - struct nfs_pgio_res *result) +static int nfs3_xdr_dec_read3res(void *req, struct xdr_stream *xdr, + void *_result) { + struct nfs_pgio_res *result = _result; enum nfs_stat status; int error; @@ -1698,9 +1729,10 @@ static int decode_write3resok(struct xdr_stream *xdr, return -EIO; } -static int nfs3_xdr_dec_write3res(struct rpc_rqst *req, struct xdr_stream *xdr, - struct nfs_pgio_res *result) +static int nfs3_xdr_dec_write3res(void *req, struct xdr_stream *xdr, + void *_result) { + struct nfs_pgio_res *result = _result; enum nfs_stat status; int error; @@ -1762,10 +1794,11 @@ static int decode_create3resok(struct xdr_stream *xdr, return error; } -static int nfs3_xdr_dec_create3res(struct rpc_rqst *req, +static int nfs3_xdr_dec_create3res(void *req, struct xdr_stream *xdr, - struct nfs3_diropres *result) + void *_result) { + struct nfs3_diropres *result = _result; enum nfs_stat status; int error; @@ -1802,10 +1835,11 @@ static int nfs3_xdr_dec_create3res(struct rpc_rqst *req, * REMOVE3resfail resfail; * }; */ -static int nfs3_xdr_dec_remove3res(struct rpc_rqst *req, +static int nfs3_xdr_dec_remove3res(void *req, struct xdr_stream *xdr, - struct nfs_removeres *result) + void *_result) { + struct nfs_removeres *result = _result; enum nfs_stat status; int error; @@ -1843,10 +1877,11 @@ static int nfs3_xdr_dec_remove3res(struct rpc_rqst *req, * RENAME3resfail resfail; * }; */ -static int nfs3_xdr_dec_rename3res(struct rpc_rqst *req, +static int nfs3_xdr_dec_rename3res(void *req, struct xdr_stream *xdr, - struct nfs_renameres *result) + void *_result) { + struct nfs_renameres *result = _result; enum nfs_stat status; int error; @@ -1887,9 +1922,10 @@ static int nfs3_xdr_dec_rename3res(struct rpc_rqst *req, * LINK3resfail resfail; * }; */ -static int nfs3_xdr_dec_link3res(struct rpc_rqst *req, struct xdr_stream *xdr, - struct nfs3_linkres *result) +static int nfs3_xdr_dec_link3res(void *req, struct xdr_stream *xdr, + void *_result) { + struct nfs3_linkres *result = _result; enum nfs_stat status; int error; @@ -2070,10 +2106,11 @@ static int decode_readdir3resok(struct xdr_stream *xdr, return error; } -static int nfs3_xdr_dec_readdir3res(struct rpc_rqst *req, +static int nfs3_xdr_dec_readdir3res(void *req, struct xdr_stream *xdr, - struct nfs3_readdirres *result) + void *_result) { + struct nfs3_readdirres *result = _result; enum nfs_stat status; int error; @@ -2138,10 +2175,11 @@ static int decode_fsstat3resok(struct xdr_stream *xdr, return -EIO; } -static int nfs3_xdr_dec_fsstat3res(struct rpc_rqst *req, +static int nfs3_xdr_dec_fsstat3res(void *req, struct xdr_stream *xdr, - struct nfs_fsstat *result) + void *_result) { + struct nfs_fsstat *result = _result; enum nfs_stat status; int error; @@ -2214,10 +2252,11 @@ static int decode_fsinfo3resok(struct xdr_stream *xdr, return -EIO; } -static int nfs3_xdr_dec_fsinfo3res(struct rpc_rqst *req, +static int nfs3_xdr_dec_fsinfo3res(void *req, struct xdr_stream *xdr, - struct nfs_fsinfo *result) + void *_result) { + struct nfs_fsinfo *result = _result; enum nfs_stat status; int error; @@ -2277,10 +2316,11 @@ static int decode_pathconf3resok(struct xdr_stream *xdr, return -EIO; } -static int nfs3_xdr_dec_pathconf3res(struct rpc_rqst *req, +static int nfs3_xdr_dec_pathconf3res(void *req, struct xdr_stream *xdr, - struct nfs_pathconf *result) + void *_result) { + struct nfs_pathconf *result = _result; enum nfs_stat status; int error; @@ -2318,10 +2358,11 @@ static int nfs3_xdr_dec_pathconf3res(struct rpc_rqst *req, * COMMIT3resfail resfail; * }; */ -static int nfs3_xdr_dec_commit3res(struct rpc_rqst *req, +static int nfs3_xdr_dec_commit3res(void *req, struct xdr_stream *xdr, - struct nfs_commitres *result) + void *_result) { + struct nfs_commitres *result = _result; enum nfs_stat status; int error; @@ -2387,9 +2428,9 @@ static inline int decode_getacl3resok(struct xdr_stream *xdr, return error; } -static int nfs3_xdr_dec_getacl3res(struct rpc_rqst *req, +static int nfs3_xdr_dec_getacl3res(void *req, struct xdr_stream *xdr, - struct nfs3_getaclres *result) + void *result) { enum nfs_stat status; int error; @@ -2406,9 +2447,9 @@ static int nfs3_xdr_dec_getacl3res(struct rpc_rqst *req, return nfs3_stat_to_errno(status); } -static int nfs3_xdr_dec_setacl3res(struct rpc_rqst *req, +static int nfs3_xdr_dec_setacl3res(void *req, struct xdr_stream *xdr, - struct nfs_fattr *result) + void *result) { enum nfs_stat status; int error; @@ -2495,8 +2536,8 @@ static int nfs3_stat_to_errno(enum nfs_stat status) #define PROC(proc, argtype, restype, timer) \ [NFS3PROC_##proc] = { \ .p_proc = NFS3PROC_##proc, \ - .p_encode = (kxdreproc_t)nfs3_xdr_enc_##argtype##3args, \ - .p_decode = (kxdrdproc_t)nfs3_xdr_dec_##restype##3res, \ + .p_encode = nfs3_xdr_enc_##argtype##3args, \ + .p_decode = nfs3_xdr_dec_##restype##3res, \ .p_arglen = NFS3_##argtype##args_sz, \ .p_replen = NFS3_##restype##res_sz, \ .p_timer = timer, \ @@ -2538,8 +2579,8 @@ const struct rpc_version nfs_version3 = { static struct rpc_procinfo nfs3_acl_procedures[] = { [ACLPROC3_GETACL] = { .p_proc = ACLPROC3_GETACL, - .p_encode = (kxdreproc_t)nfs3_xdr_enc_getacl3args, - .p_decode = (kxdrdproc_t)nfs3_xdr_dec_getacl3res, + .p_encode = nfs3_xdr_enc_getacl3args, + .p_decode = nfs3_xdr_dec_getacl3res, .p_arglen = ACL3_getaclargs_sz, .p_replen = ACL3_getaclres_sz, .p_timer = 1, @@ -2547,8 +2588,8 @@ static struct rpc_procinfo nfs3_acl_procedures[] = { }, [ACLPROC3_SETACL] = { .p_proc = ACLPROC3_SETACL, - .p_encode = (kxdreproc_t)nfs3_xdr_enc_setacl3args, - .p_decode = (kxdrdproc_t)nfs3_xdr_dec_setacl3res, + .p_encode = nfs3_xdr_enc_setacl3args, + .p_decode = nfs3_xdr_dec_setacl3res, .p_arglen = ACL3_setaclargs_sz, .p_replen = ACL3_setaclres_sz, .p_timer = 0, diff --git a/fs/nfs/nfs42xdr.c b/fs/nfs/nfs42xdr.c index 8b26058..b31170f 100644 --- a/fs/nfs/nfs42xdr.c +++ b/fs/nfs/nfs42xdr.c @@ -205,10 +205,12 @@ static void encode_clone(struct xdr_stream *xdr, /* * Encode ALLOCATE request */ -static void nfs4_xdr_enc_allocate(struct rpc_rqst *req, +static void nfs4_xdr_enc_allocate(void *_req, struct xdr_stream *xdr, - struct nfs42_falloc_args *args) + void *_args) { + struct rpc_rqst *req = _req; + struct nfs42_falloc_args *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -224,10 +226,12 @@ static void nfs4_xdr_enc_allocate(struct rpc_rqst *req, /* * Encode COPY request */ -static void nfs4_xdr_enc_copy(struct rpc_rqst *req, +static void nfs4_xdr_enc_copy(void *_req, struct xdr_stream *xdr, - struct nfs42_copy_args *args) + void *_args) { + struct rpc_rqst *req = _req; + struct nfs42_copy_args *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -244,10 +248,12 @@ static void nfs4_xdr_enc_copy(struct rpc_rqst *req, /* * Encode DEALLOCATE request */ -static void nfs4_xdr_enc_deallocate(struct rpc_rqst *req, +static void nfs4_xdr_enc_deallocate(void *_req, struct xdr_stream *xdr, - struct nfs42_falloc_args *args) + void *_args) { + struct rpc_rqst *req = _req; + struct nfs42_falloc_args *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -263,10 +269,12 @@ static void nfs4_xdr_enc_deallocate(struct rpc_rqst *req, /* * Encode SEEK request */ -static void nfs4_xdr_enc_seek(struct rpc_rqst *req, +static void nfs4_xdr_enc_seek(void *_req, struct xdr_stream *xdr, - struct nfs42_seek_args *args) + void *_args) { + struct rpc_rqst *req = _req; + struct nfs42_seek_args *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -281,10 +289,12 @@ static void nfs4_xdr_enc_seek(struct rpc_rqst *req, /* * Encode LAYOUTSTATS request */ -static void nfs4_xdr_enc_layoutstats(struct rpc_rqst *req, +static void nfs4_xdr_enc_layoutstats(void *_req, struct xdr_stream *xdr, - struct nfs42_layoutstat_args *args) + void *_args) { + struct rpc_rqst *req = _req; + struct nfs42_layoutstat_args *args = _args; int i; struct compound_hdr hdr = { @@ -303,10 +313,12 @@ static void nfs4_xdr_enc_layoutstats(struct rpc_rqst *req, /* * Encode CLONE request */ -static void nfs4_xdr_enc_clone(struct rpc_rqst *req, +static void nfs4_xdr_enc_clone(void *_req, struct xdr_stream *xdr, - struct nfs42_clone_args *args) + void *_args) { + struct rpc_rqst *req = _req; + struct nfs42_clone_args *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -430,10 +442,12 @@ static int decode_clone(struct xdr_stream *xdr) /* * Decode ALLOCATE request */ -static int nfs4_xdr_dec_allocate(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_allocate(void *_rqstp, struct xdr_stream *xdr, - struct nfs42_falloc_res *res) + void *_res) { + struct rpc_rqst *rqstp = _rqstp; + struct nfs42_falloc_res *res = _res; struct compound_hdr hdr; int status; @@ -457,10 +471,12 @@ static int nfs4_xdr_dec_allocate(struct rpc_rqst *rqstp, /* * Decode COPY response */ -static int nfs4_xdr_dec_copy(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_copy(void *_rqstp, struct xdr_stream *xdr, - struct nfs42_copy_res *res) + void *_res) { + struct rpc_rqst *rqstp = _rqstp; + struct nfs42_copy_res *res = _res; struct compound_hdr hdr; int status; @@ -487,10 +503,12 @@ static int nfs4_xdr_dec_copy(struct rpc_rqst *rqstp, /* * Decode DEALLOCATE request */ -static int nfs4_xdr_dec_deallocate(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_deallocate(void *_rqstp, struct xdr_stream *xdr, - struct nfs42_falloc_res *res) + void *_res) { + struct rpc_rqst *rqstp = _rqstp; + struct nfs42_falloc_res *res = _res; struct compound_hdr hdr; int status; @@ -514,10 +532,12 @@ static int nfs4_xdr_dec_deallocate(struct rpc_rqst *rqstp, /* * Decode SEEK request */ -static int nfs4_xdr_dec_seek(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_seek(void *_rqstp, struct xdr_stream *xdr, - struct nfs42_seek_res *res) + void *_res) { + struct rpc_rqst *rqstp = _rqstp; + struct nfs42_seek_res *res = _res; struct compound_hdr hdr; int status; @@ -538,10 +558,12 @@ static int nfs4_xdr_dec_seek(struct rpc_rqst *rqstp, /* * Decode LAYOUTSTATS request */ -static int nfs4_xdr_dec_layoutstats(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_layoutstats(void *_rqstp, struct xdr_stream *xdr, - struct nfs42_layoutstat_res *res) + void *_res) { + struct rpc_rqst *rqstp = _rqstp; + struct nfs42_layoutstat_res *res = _res; struct compound_hdr hdr; int status, i; @@ -568,10 +590,12 @@ static int nfs4_xdr_dec_layoutstats(struct rpc_rqst *rqstp, /* * Decode CLONE request */ -static int nfs4_xdr_dec_clone(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_clone(void *_rqstp, struct xdr_stream *xdr, - struct nfs42_clone_res *res) + void *_res) { + struct rpc_rqst *rqstp = _rqstp; + struct nfs42_clone_res *res = _res; struct compound_hdr hdr; int status; diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c index fc89e5e..0e7fc08 100644 --- a/fs/nfs/nfs4xdr.c +++ b/fs/nfs/nfs4xdr.c @@ -2081,9 +2081,10 @@ static u32 nfs4_xdr_minorversion(const struct nfs4_sequence_args *args) /* * Encode an ACCESS request */ -static void nfs4_xdr_enc_access(struct rpc_rqst *req, struct xdr_stream *xdr, - const struct nfs4_accessargs *args) +static void nfs4_xdr_enc_access(void *req, struct xdr_stream *xdr, + void *_args) { + const struct nfs4_accessargs *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2099,9 +2100,10 @@ static void nfs4_xdr_enc_access(struct rpc_rqst *req, struct xdr_stream *xdr, /* * Encode LOOKUP request */ -static void nfs4_xdr_enc_lookup(struct rpc_rqst *req, struct xdr_stream *xdr, - const struct nfs4_lookup_arg *args) +static void nfs4_xdr_enc_lookup(void *req, struct xdr_stream *xdr, + void *_args) { + const struct nfs4_lookup_arg *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2118,10 +2120,11 @@ static void nfs4_xdr_enc_lookup(struct rpc_rqst *req, struct xdr_stream *xdr, /* * Encode LOOKUP_ROOT request */ -static void nfs4_xdr_enc_lookup_root(struct rpc_rqst *req, +static void nfs4_xdr_enc_lookup_root(void *req, struct xdr_stream *xdr, - const struct nfs4_lookup_root_arg *args) + void *_args) { + const struct nfs4_lookup_root_arg *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2137,9 +2140,10 @@ static void nfs4_xdr_enc_lookup_root(struct rpc_rqst *req, /* * Encode REMOVE request */ -static void nfs4_xdr_enc_remove(struct rpc_rqst *req, struct xdr_stream *xdr, - const struct nfs_removeargs *args) +static void nfs4_xdr_enc_remove(void *req, struct xdr_stream *xdr, + void *_args) { + const struct nfs_removeargs *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2154,9 +2158,10 @@ static void nfs4_xdr_enc_remove(struct rpc_rqst *req, struct xdr_stream *xdr, /* * Encode RENAME request */ -static void nfs4_xdr_enc_rename(struct rpc_rqst *req, struct xdr_stream *xdr, - const struct nfs_renameargs *args) +static void nfs4_xdr_enc_rename(void *req, struct xdr_stream *xdr, + void *_args) { + const struct nfs_renameargs *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2173,9 +2178,10 @@ static void nfs4_xdr_enc_rename(struct rpc_rqst *req, struct xdr_stream *xdr, /* * Encode LINK request */ -static void nfs4_xdr_enc_link(struct rpc_rqst *req, struct xdr_stream *xdr, - const struct nfs4_link_arg *args) +static void nfs4_xdr_enc_link(void *req, struct xdr_stream *xdr, + void *_args) { + const struct nfs4_link_arg *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2194,9 +2200,10 @@ static void nfs4_xdr_enc_link(struct rpc_rqst *req, struct xdr_stream *xdr, /* * Encode CREATE request */ -static void nfs4_xdr_enc_create(struct rpc_rqst *req, struct xdr_stream *xdr, - const struct nfs4_create_arg *args) +static void nfs4_xdr_enc_create(void *req, struct xdr_stream *xdr, + void *_args) { + const struct nfs4_create_arg *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2213,8 +2220,8 @@ static void nfs4_xdr_enc_create(struct rpc_rqst *req, struct xdr_stream *xdr, /* * Encode SYMLINK request */ -static void nfs4_xdr_enc_symlink(struct rpc_rqst *req, struct xdr_stream *xdr, - const struct nfs4_create_arg *args) +static void nfs4_xdr_enc_symlink(void *req, struct xdr_stream *xdr, + void *args) { nfs4_xdr_enc_create(req, xdr, args); } @@ -2222,9 +2229,10 @@ static void nfs4_xdr_enc_symlink(struct rpc_rqst *req, struct xdr_stream *xdr, /* * Encode GETATTR request */ -static void nfs4_xdr_enc_getattr(struct rpc_rqst *req, struct xdr_stream *xdr, - const struct nfs4_getattr_arg *args) +static void nfs4_xdr_enc_getattr(void *req, struct xdr_stream *xdr, + void *_args) { + const struct nfs4_getattr_arg *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2239,9 +2247,10 @@ static void nfs4_xdr_enc_getattr(struct rpc_rqst *req, struct xdr_stream *xdr, /* * Encode a CLOSE request */ -static void nfs4_xdr_enc_close(struct rpc_rqst *req, struct xdr_stream *xdr, - struct nfs_closeargs *args) +static void nfs4_xdr_enc_close(void *req, struct xdr_stream *xdr, + void *_args) { + struct nfs_closeargs *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2257,9 +2266,10 @@ static void nfs4_xdr_enc_close(struct rpc_rqst *req, struct xdr_stream *xdr, /* * Encode an OPEN request */ -static void nfs4_xdr_enc_open(struct rpc_rqst *req, struct xdr_stream *xdr, - struct nfs_openargs *args) +static void nfs4_xdr_enc_open(void *req, struct xdr_stream *xdr, + void *_args) { + struct nfs_openargs *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2278,10 +2288,11 @@ static void nfs4_xdr_enc_open(struct rpc_rqst *req, struct xdr_stream *xdr, /* * Encode an OPEN_CONFIRM request */ -static void nfs4_xdr_enc_open_confirm(struct rpc_rqst *req, +static void nfs4_xdr_enc_open_confirm(void *req, struct xdr_stream *xdr, - struct nfs_open_confirmargs *args) + void *_args) { + struct nfs_open_confirmargs *args = _args; struct compound_hdr hdr = { .nops = 0, }; @@ -2295,10 +2306,11 @@ static void nfs4_xdr_enc_open_confirm(struct rpc_rqst *req, /* * Encode an OPEN request with no attributes. */ -static void nfs4_xdr_enc_open_noattr(struct rpc_rqst *req, +static void nfs4_xdr_enc_open_noattr(void *req, struct xdr_stream *xdr, - struct nfs_openargs *args) + void *_args) { + struct nfs_openargs *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2316,10 +2328,11 @@ static void nfs4_xdr_enc_open_noattr(struct rpc_rqst *req, /* * Encode an OPEN_DOWNGRADE request */ -static void nfs4_xdr_enc_open_downgrade(struct rpc_rqst *req, +static void nfs4_xdr_enc_open_downgrade(void *req, struct xdr_stream *xdr, - struct nfs_closeargs *args) + void *_args) { + struct nfs_closeargs *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2335,9 +2348,10 @@ static void nfs4_xdr_enc_open_downgrade(struct rpc_rqst *req, /* * Encode a LOCK request */ -static void nfs4_xdr_enc_lock(struct rpc_rqst *req, struct xdr_stream *xdr, - struct nfs_lock_args *args) +static void nfs4_xdr_enc_lock(void *req, struct xdr_stream *xdr, + void *_args) { + struct nfs_lock_args *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2352,9 +2366,10 @@ static void nfs4_xdr_enc_lock(struct rpc_rqst *req, struct xdr_stream *xdr, /* * Encode a LOCKT request */ -static void nfs4_xdr_enc_lockt(struct rpc_rqst *req, struct xdr_stream *xdr, - struct nfs_lockt_args *args) +static void nfs4_xdr_enc_lockt(void *req, struct xdr_stream *xdr, + void *_args) { + struct nfs_lockt_args *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2369,9 +2384,10 @@ static void nfs4_xdr_enc_lockt(struct rpc_rqst *req, struct xdr_stream *xdr, /* * Encode a LOCKU request */ -static void nfs4_xdr_enc_locku(struct rpc_rqst *req, struct xdr_stream *xdr, - struct nfs_locku_args *args) +static void nfs4_xdr_enc_locku(void *req, struct xdr_stream *xdr, + void *_args) { + struct nfs_locku_args *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2383,10 +2399,11 @@ static void nfs4_xdr_enc_locku(struct rpc_rqst *req, struct xdr_stream *xdr, encode_nops(&hdr); } -static void nfs4_xdr_enc_release_lockowner(struct rpc_rqst *req, +static void nfs4_xdr_enc_release_lockowner(void *req, struct xdr_stream *xdr, - struct nfs_release_lockowner_args *args) + void *_args) { + struct nfs_release_lockowner_args *args = _args; struct compound_hdr hdr = { .minorversion = 0, }; @@ -2399,9 +2416,11 @@ static void nfs4_xdr_enc_release_lockowner(struct rpc_rqst *req, /* * Encode a READLINK request */ -static void nfs4_xdr_enc_readlink(struct rpc_rqst *req, struct xdr_stream *xdr, - const struct nfs4_readlink *args) +static void nfs4_xdr_enc_readlink(void *_req, struct xdr_stream *xdr, + void *_args) { + struct rpc_rqst *req = _req; + const struct nfs4_readlink *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2419,9 +2438,11 @@ static void nfs4_xdr_enc_readlink(struct rpc_rqst *req, struct xdr_stream *xdr, /* * Encode a READDIR request */ -static void nfs4_xdr_enc_readdir(struct rpc_rqst *req, struct xdr_stream *xdr, - const struct nfs4_readdir_arg *args) +static void nfs4_xdr_enc_readdir(void *_req, struct xdr_stream *xdr, + void *_args) { + struct rpc_rqst *req = _req; + const struct nfs4_readdir_arg *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2442,9 +2463,11 @@ static void nfs4_xdr_enc_readdir(struct rpc_rqst *req, struct xdr_stream *xdr, /* * Encode a READ request */ -static void nfs4_xdr_enc_read(struct rpc_rqst *req, struct xdr_stream *xdr, - struct nfs_pgio_args *args) +static void nfs4_xdr_enc_read(void *_req, struct xdr_stream *xdr, + void *_args) { + struct rpc_rqst *req = _req; + struct nfs_pgio_args *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2463,9 +2486,11 @@ static void nfs4_xdr_enc_read(struct rpc_rqst *req, struct xdr_stream *xdr, /* * Encode an SETATTR request */ -static void nfs4_xdr_enc_setattr(struct rpc_rqst *req, struct xdr_stream *xdr, - struct nfs_setattrargs *args) +static void nfs4_xdr_enc_setattr(void *_req, struct xdr_stream *xdr, + void *_args) { + struct rpc_rqst *req = _req; + struct nfs_setattrargs *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2481,9 +2506,11 @@ static void nfs4_xdr_enc_setattr(struct rpc_rqst *req, struct xdr_stream *xdr, /* * Encode a GETACL request */ -static void nfs4_xdr_enc_getacl(struct rpc_rqst *req, struct xdr_stream *xdr, - struct nfs_getaclargs *args) +static void nfs4_xdr_enc_getacl(void *_req, struct xdr_stream *xdr, + void *_args) { + struct rpc_rqst *req = _req; + struct nfs_getaclargs *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2504,9 +2531,11 @@ static void nfs4_xdr_enc_getacl(struct rpc_rqst *req, struct xdr_stream *xdr, /* * Encode a WRITE request */ -static void nfs4_xdr_enc_write(struct rpc_rqst *req, struct xdr_stream *xdr, - struct nfs_pgio_args *args) +static void nfs4_xdr_enc_write(void *_req, struct xdr_stream *xdr, + void *_args) { + struct rpc_rqst *req = _req; + struct nfs_pgio_args *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2524,9 +2553,10 @@ static void nfs4_xdr_enc_write(struct rpc_rqst *req, struct xdr_stream *xdr, /* * a COMMIT request */ -static void nfs4_xdr_enc_commit(struct rpc_rqst *req, struct xdr_stream *xdr, - struct nfs_commitargs *args) +static void nfs4_xdr_enc_commit(void *req, struct xdr_stream *xdr, + void *_args) { + struct nfs_commitargs *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2541,9 +2571,10 @@ static void nfs4_xdr_enc_commit(struct rpc_rqst *req, struct xdr_stream *xdr, /* * FSINFO request */ -static void nfs4_xdr_enc_fsinfo(struct rpc_rqst *req, struct xdr_stream *xdr, - struct nfs4_fsinfo_arg *args) +static void nfs4_xdr_enc_fsinfo(void *req, struct xdr_stream *xdr, + void *_args) { + struct nfs4_fsinfo_arg *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2558,9 +2589,10 @@ static void nfs4_xdr_enc_fsinfo(struct rpc_rqst *req, struct xdr_stream *xdr, /* * a PATHCONF request */ -static void nfs4_xdr_enc_pathconf(struct rpc_rqst *req, struct xdr_stream *xdr, - const struct nfs4_pathconf_arg *args) +static void nfs4_xdr_enc_pathconf(void *req, struct xdr_stream *xdr, + void *_args) { + const struct nfs4_pathconf_arg *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2576,9 +2608,10 @@ static void nfs4_xdr_enc_pathconf(struct rpc_rqst *req, struct xdr_stream *xdr, /* * a STATFS request */ -static void nfs4_xdr_enc_statfs(struct rpc_rqst *req, struct xdr_stream *xdr, - const struct nfs4_statfs_arg *args) +static void nfs4_xdr_enc_statfs(void *req, struct xdr_stream *xdr, + void *_args) { + const struct nfs4_statfs_arg *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2594,10 +2627,11 @@ static void nfs4_xdr_enc_statfs(struct rpc_rqst *req, struct xdr_stream *xdr, /* * GETATTR_BITMAP request */ -static void nfs4_xdr_enc_server_caps(struct rpc_rqst *req, +static void nfs4_xdr_enc_server_caps(void *req, struct xdr_stream *xdr, - struct nfs4_server_caps_arg *args) + void *_args) { + struct nfs4_server_caps_arg *args = _args; const u32 *bitmask = args->bitmask; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), @@ -2613,9 +2647,10 @@ static void nfs4_xdr_enc_server_caps(struct rpc_rqst *req, /* * a RENEW request */ -static void nfs4_xdr_enc_renew(struct rpc_rqst *req, struct xdr_stream *xdr, - struct nfs_client *clp) +static void nfs4_xdr_enc_renew(void *req, struct xdr_stream *xdr, + void *_clp) { + struct nfs_client *clp = _clp; struct compound_hdr hdr = { .nops = 0, }; @@ -2628,9 +2663,9 @@ static void nfs4_xdr_enc_renew(struct rpc_rqst *req, struct xdr_stream *xdr, /* * a SETCLIENTID request */ -static void nfs4_xdr_enc_setclientid(struct rpc_rqst *req, +static void nfs4_xdr_enc_setclientid(void *req, struct xdr_stream *xdr, - struct nfs4_setclientid *sc) + void *sc) { struct compound_hdr hdr = { .nops = 0, @@ -2644,9 +2679,9 @@ static void nfs4_xdr_enc_setclientid(struct rpc_rqst *req, /* * a SETCLIENTID_CONFIRM request */ -static void nfs4_xdr_enc_setclientid_confirm(struct rpc_rqst *req, +static void nfs4_xdr_enc_setclientid_confirm(void *req, struct xdr_stream *xdr, - struct nfs4_setclientid_res *arg) + void *arg) { struct compound_hdr hdr = { .nops = 0, @@ -2660,10 +2695,11 @@ static void nfs4_xdr_enc_setclientid_confirm(struct rpc_rqst *req, /* * DELEGRETURN request */ -static void nfs4_xdr_enc_delegreturn(struct rpc_rqst *req, +static void nfs4_xdr_enc_delegreturn(void *req, struct xdr_stream *xdr, - const struct nfs4_delegreturnargs *args) + void *_args) { + const struct nfs4_delegreturnargs *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2679,10 +2715,12 @@ static void nfs4_xdr_enc_delegreturn(struct rpc_rqst *req, /* * Encode FS_LOCATIONS request */ -static void nfs4_xdr_enc_fs_locations(struct rpc_rqst *req, +static void nfs4_xdr_enc_fs_locations(void *_req, struct xdr_stream *xdr, - struct nfs4_fs_locations_arg *args) + void *_args) { + struct rpc_rqst *req = _req; + struct nfs4_fs_locations_arg *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2712,10 +2750,11 @@ static void nfs4_xdr_enc_fs_locations(struct rpc_rqst *req, /* * Encode SECINFO request */ -static void nfs4_xdr_enc_secinfo(struct rpc_rqst *req, +static void nfs4_xdr_enc_secinfo(void *req, struct xdr_stream *xdr, - struct nfs4_secinfo_arg *args) + void *_args) { + struct nfs4_secinfo_arg *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2730,10 +2769,11 @@ static void nfs4_xdr_enc_secinfo(struct rpc_rqst *req, /* * Encode FSID_PRESENT request */ -static void nfs4_xdr_enc_fsid_present(struct rpc_rqst *req, +static void nfs4_xdr_enc_fsid_present(void *req, struct xdr_stream *xdr, - struct nfs4_fsid_present_arg *args) + void *_args) { + struct nfs4_fsid_present_arg *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2751,10 +2791,11 @@ static void nfs4_xdr_enc_fsid_present(struct rpc_rqst *req, /* * BIND_CONN_TO_SESSION request */ -static void nfs4_xdr_enc_bind_conn_to_session(struct rpc_rqst *req, +static void nfs4_xdr_enc_bind_conn_to_session(void *req, struct xdr_stream *xdr, - struct nfs41_bind_conn_to_session_args *args) + void *_args) { + struct nfs41_bind_conn_to_session_args *args = _args; struct compound_hdr hdr = { .minorversion = args->client->cl_mvops->minor_version, }; @@ -2767,10 +2808,11 @@ static void nfs4_xdr_enc_bind_conn_to_session(struct rpc_rqst *req, /* * EXCHANGE_ID request */ -static void nfs4_xdr_enc_exchange_id(struct rpc_rqst *req, +static void nfs4_xdr_enc_exchange_id(void *req, struct xdr_stream *xdr, - struct nfs41_exchange_id_args *args) + void *_args) { + struct nfs41_exchange_id_args *args = _args; struct compound_hdr hdr = { .minorversion = args->client->cl_mvops->minor_version, }; @@ -2783,10 +2825,11 @@ static void nfs4_xdr_enc_exchange_id(struct rpc_rqst *req, /* * a CREATE_SESSION request */ -static void nfs4_xdr_enc_create_session(struct rpc_rqst *req, +static void nfs4_xdr_enc_create_session(void *req, struct xdr_stream *xdr, - struct nfs41_create_session_args *args) + void *_args) { + struct nfs41_create_session_args *args = _args; struct compound_hdr hdr = { .minorversion = args->client->cl_mvops->minor_version, }; @@ -2799,10 +2842,11 @@ static void nfs4_xdr_enc_create_session(struct rpc_rqst *req, /* * a DESTROY_SESSION request */ -static void nfs4_xdr_enc_destroy_session(struct rpc_rqst *req, +static void nfs4_xdr_enc_destroy_session(void *req, struct xdr_stream *xdr, - struct nfs4_session *session) + void *_session) { + struct nfs4_session *session = _session; struct compound_hdr hdr = { .minorversion = session->clp->cl_mvops->minor_version, }; @@ -2815,10 +2859,11 @@ static void nfs4_xdr_enc_destroy_session(struct rpc_rqst *req, /* * a DESTROY_CLIENTID request */ -static void nfs4_xdr_enc_destroy_clientid(struct rpc_rqst *req, +static void nfs4_xdr_enc_destroy_clientid(void *req, struct xdr_stream *xdr, - struct nfs_client *clp) + void *_clp) { + struct nfs_client *clp = _clp; struct compound_hdr hdr = { .minorversion = clp->cl_mvops->minor_version, }; @@ -2831,8 +2876,8 @@ static void nfs4_xdr_enc_destroy_clientid(struct rpc_rqst *req, /* * a SEQUENCE request */ -static void nfs4_xdr_enc_sequence(struct rpc_rqst *req, struct xdr_stream *xdr, - struct nfs4_sequence_args *args) +static void nfs4_xdr_enc_sequence(void *req, struct xdr_stream *xdr, + void *args) { struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(args), @@ -2846,10 +2891,11 @@ static void nfs4_xdr_enc_sequence(struct rpc_rqst *req, struct xdr_stream *xdr, /* * a GET_LEASE_TIME request */ -static void nfs4_xdr_enc_get_lease_time(struct rpc_rqst *req, +static void nfs4_xdr_enc_get_lease_time(void *req, struct xdr_stream *xdr, - struct nfs4_get_lease_time_args *args) + void *_args) { + struct nfs4_get_lease_time_args *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->la_seq_args), }; @@ -2865,10 +2911,11 @@ static void nfs4_xdr_enc_get_lease_time(struct rpc_rqst *req, /* * a RECLAIM_COMPLETE request */ -static void nfs4_xdr_enc_reclaim_complete(struct rpc_rqst *req, +static void nfs4_xdr_enc_reclaim_complete(void *req, struct xdr_stream *xdr, - struct nfs41_reclaim_complete_args *args) + void *_args) { + struct nfs41_reclaim_complete_args *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args) }; @@ -2882,10 +2929,12 @@ static void nfs4_xdr_enc_reclaim_complete(struct rpc_rqst *req, /* * Encode GETDEVICEINFO request */ -static void nfs4_xdr_enc_getdeviceinfo(struct rpc_rqst *req, +static void nfs4_xdr_enc_getdeviceinfo(void *_req, struct xdr_stream *xdr, - struct nfs4_getdeviceinfo_args *args) + void *_args) { + struct rpc_rqst *req = _req; + struct nfs4_getdeviceinfo_args *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2906,10 +2955,12 @@ static void nfs4_xdr_enc_getdeviceinfo(struct rpc_rqst *req, /* * Encode LAYOUTGET request */ -static void nfs4_xdr_enc_layoutget(struct rpc_rqst *req, +static void nfs4_xdr_enc_layoutget(void *_req, struct xdr_stream *xdr, - struct nfs4_layoutget_args *args) + void *_args) { + struct rpc_rqst *req = _req; + struct nfs4_layoutget_args *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2928,10 +2979,11 @@ static void nfs4_xdr_enc_layoutget(struct rpc_rqst *req, /* * Encode LAYOUTCOMMIT request */ -static void nfs4_xdr_enc_layoutcommit(struct rpc_rqst *req, +static void nfs4_xdr_enc_layoutcommit(void *req, struct xdr_stream *xdr, - struct nfs4_layoutcommit_args *args) + void *_args) { + struct nfs4_layoutcommit_args *args = _args; struct nfs4_layoutcommit_data *data = container_of(args, struct nfs4_layoutcommit_data, args); struct compound_hdr hdr = { @@ -2949,10 +3001,11 @@ static void nfs4_xdr_enc_layoutcommit(struct rpc_rqst *req, /* * Encode LAYOUTRETURN request */ -static void nfs4_xdr_enc_layoutreturn(struct rpc_rqst *req, +static void nfs4_xdr_enc_layoutreturn(void *req, struct xdr_stream *xdr, - struct nfs4_layoutreturn_args *args) + void *_args) { + struct nfs4_layoutreturn_args *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2967,10 +3020,11 @@ static void nfs4_xdr_enc_layoutreturn(struct rpc_rqst *req, /* * Encode SECINFO_NO_NAME request */ -static int nfs4_xdr_enc_secinfo_no_name(struct rpc_rqst *req, +static void nfs4_xdr_enc_secinfo_no_name(void *req, struct xdr_stream *xdr, - struct nfs41_secinfo_no_name_args *args) + void *_args) { + struct nfs41_secinfo_no_name_args *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -2980,16 +3034,16 @@ static int nfs4_xdr_enc_secinfo_no_name(struct rpc_rqst *req, encode_putrootfh(xdr, &hdr); encode_secinfo_no_name(xdr, args, &hdr); encode_nops(&hdr); - return 0; } /* * Encode TEST_STATEID request */ -static void nfs4_xdr_enc_test_stateid(struct rpc_rqst *req, +static void nfs4_xdr_enc_test_stateid(void *req, struct xdr_stream *xdr, - struct nfs41_test_stateid_args *args) + void *_args) { + struct nfs41_test_stateid_args *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -3003,10 +3057,11 @@ static void nfs4_xdr_enc_test_stateid(struct rpc_rqst *req, /* * Encode FREE_STATEID request */ -static void nfs4_xdr_enc_free_stateid(struct rpc_rqst *req, +static void nfs4_xdr_enc_free_stateid(void *req, struct xdr_stream *xdr, - struct nfs41_free_stateid_args *args) + void *_args) { + struct nfs41_free_stateid_args *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -6098,10 +6153,11 @@ static int decode_free_stateid(struct xdr_stream *xdr, /* * Decode OPEN_DOWNGRADE response */ -static int nfs4_xdr_dec_open_downgrade(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_open_downgrade(void *rqstp, struct xdr_stream *xdr, - struct nfs_closeres *res) + void *_res) { + struct nfs_closeres *res = _res; struct compound_hdr hdr; int status; @@ -6125,9 +6181,10 @@ static int nfs4_xdr_dec_open_downgrade(struct rpc_rqst *rqstp, /* * Decode ACCESS response */ -static int nfs4_xdr_dec_access(struct rpc_rqst *rqstp, struct xdr_stream *xdr, - struct nfs4_accessres *res) +static int nfs4_xdr_dec_access(void *rqstp, struct xdr_stream *xdr, + void *_res) { + struct nfs4_accessres *res = _res; struct compound_hdr hdr; int status; @@ -6151,9 +6208,10 @@ static int nfs4_xdr_dec_access(struct rpc_rqst *rqstp, struct xdr_stream *xdr, /* * Decode LOOKUP response */ -static int nfs4_xdr_dec_lookup(struct rpc_rqst *rqstp, struct xdr_stream *xdr, - struct nfs4_lookup_res *res) +static int nfs4_xdr_dec_lookup(void *rqstp, struct xdr_stream *xdr, + void *_res) { + struct nfs4_lookup_res *res = _res; struct compound_hdr hdr; int status; @@ -6180,10 +6238,11 @@ static int nfs4_xdr_dec_lookup(struct rpc_rqst *rqstp, struct xdr_stream *xdr, /* * Decode LOOKUP_ROOT response */ -static int nfs4_xdr_dec_lookup_root(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_lookup_root(void *rqstp, struct xdr_stream *xdr, - struct nfs4_lookup_res *res) + void *_res) { + struct nfs4_lookup_res *res = _res; struct compound_hdr hdr; int status; @@ -6207,9 +6266,10 @@ static int nfs4_xdr_dec_lookup_root(struct rpc_rqst *rqstp, /* * Decode REMOVE response */ -static int nfs4_xdr_dec_remove(struct rpc_rqst *rqstp, struct xdr_stream *xdr, - struct nfs_removeres *res) +static int nfs4_xdr_dec_remove(void *rqstp, struct xdr_stream *xdr, + void *_res) { + struct nfs_removeres *res = _res; struct compound_hdr hdr; int status; @@ -6230,9 +6290,10 @@ static int nfs4_xdr_dec_remove(struct rpc_rqst *rqstp, struct xdr_stream *xdr, /* * Decode RENAME response */ -static int nfs4_xdr_dec_rename(struct rpc_rqst *rqstp, struct xdr_stream *xdr, - struct nfs_renameres *res) +static int nfs4_xdr_dec_rename(void *rqstp, struct xdr_stream *xdr, + void *_res) { + struct nfs_renameres *res = _res; struct compound_hdr hdr; int status; @@ -6259,9 +6320,10 @@ static int nfs4_xdr_dec_rename(struct rpc_rqst *rqstp, struct xdr_stream *xdr, /* * Decode LINK response */ -static int nfs4_xdr_dec_link(struct rpc_rqst *rqstp, struct xdr_stream *xdr, - struct nfs4_link_res *res) +static int nfs4_xdr_dec_link(void *rqstp, struct xdr_stream *xdr, + void *_res) { + struct nfs4_link_res *res = _res; struct compound_hdr hdr; int status; @@ -6298,9 +6360,10 @@ static int nfs4_xdr_dec_link(struct rpc_rqst *rqstp, struct xdr_stream *xdr, /* * Decode CREATE response */ -static int nfs4_xdr_dec_create(struct rpc_rqst *rqstp, struct xdr_stream *xdr, - struct nfs4_create_res *res) +static int nfs4_xdr_dec_create(void *rqstp, struct xdr_stream *xdr, + void *_res) { + struct nfs4_create_res *res = _res; struct compound_hdr hdr; int status; @@ -6327,8 +6390,8 @@ static int nfs4_xdr_dec_create(struct rpc_rqst *rqstp, struct xdr_stream *xdr, /* * Decode SYMLINK response */ -static int nfs4_xdr_dec_symlink(struct rpc_rqst *rqstp, struct xdr_stream *xdr, - struct nfs4_create_res *res) +static int nfs4_xdr_dec_symlink(void *rqstp, struct xdr_stream *xdr, + void *res) { return nfs4_xdr_dec_create(rqstp, xdr, res); } @@ -6336,9 +6399,10 @@ static int nfs4_xdr_dec_symlink(struct rpc_rqst *rqstp, struct xdr_stream *xdr, /* * Decode GETATTR response */ -static int nfs4_xdr_dec_getattr(struct rpc_rqst *rqstp, struct xdr_stream *xdr, - struct nfs4_getattr_res *res) +static int nfs4_xdr_dec_getattr(void *rqstp, struct xdr_stream *xdr, + void *_res) { + struct nfs4_getattr_res *res = _res; struct compound_hdr hdr; int status; @@ -6359,9 +6423,10 @@ static int nfs4_xdr_dec_getattr(struct rpc_rqst *rqstp, struct xdr_stream *xdr, /* * Encode an SETACL request */ -static void nfs4_xdr_enc_setacl(struct rpc_rqst *req, struct xdr_stream *xdr, - struct nfs_setaclargs *args) +static void nfs4_xdr_enc_setacl(void *req, struct xdr_stream *xdr, + void *_args) { + struct nfs_setaclargs *args = _args; struct compound_hdr hdr = { .minorversion = nfs4_xdr_minorversion(&args->seq_args), }; @@ -6377,9 +6442,10 @@ static void nfs4_xdr_enc_setacl(struct rpc_rqst *req, struct xdr_stream *xdr, * Decode SETACL response */ static int -nfs4_xdr_dec_setacl(struct rpc_rqst *rqstp, struct xdr_stream *xdr, - struct nfs_setaclres *res) +nfs4_xdr_dec_setacl(void *rqstp, struct xdr_stream *xdr, + void *_res) { + struct nfs_setaclres *res = _res; struct compound_hdr hdr; int status; @@ -6401,9 +6467,10 @@ nfs4_xdr_dec_setacl(struct rpc_rqst *rqstp, struct xdr_stream *xdr, * Decode GETACL response */ static int -nfs4_xdr_dec_getacl(struct rpc_rqst *rqstp, struct xdr_stream *xdr, - struct nfs_getaclres *res) +nfs4_xdr_dec_getacl(void *rqstp, struct xdr_stream *xdr, + void *_res) { + struct nfs_getaclres *res = _res; struct compound_hdr hdr; int status; @@ -6429,9 +6496,10 @@ nfs4_xdr_dec_getacl(struct rpc_rqst *rqstp, struct xdr_stream *xdr, /* * Decode CLOSE response */ -static int nfs4_xdr_dec_close(struct rpc_rqst *rqstp, struct xdr_stream *xdr, - struct nfs_closeres *res) +static int nfs4_xdr_dec_close(void *rqstp, struct xdr_stream *xdr, + void *_res) { + struct nfs_closeres *res = _res; struct compound_hdr hdr; int status; @@ -6461,9 +6529,10 @@ static int nfs4_xdr_dec_close(struct rpc_rqst *rqstp, struct xdr_stream *xdr, /* * Decode OPEN response */ -static int nfs4_xdr_dec_open(struct rpc_rqst *rqstp, struct xdr_stream *xdr, - struct nfs_openres *res) +static int nfs4_xdr_dec_open(void *rqstp, struct xdr_stream *xdr, + void *_res) { + struct nfs_openres *res = _res; struct compound_hdr hdr; int status; @@ -6492,9 +6561,9 @@ static int nfs4_xdr_dec_open(struct rpc_rqst *rqstp, struct xdr_stream *xdr, /* * Decode OPEN_CONFIRM response */ -static int nfs4_xdr_dec_open_confirm(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_open_confirm(void *rqstp, struct xdr_stream *xdr, - struct nfs_open_confirmres *res) + void *res) { struct compound_hdr hdr; int status; @@ -6513,10 +6582,11 @@ static int nfs4_xdr_dec_open_confirm(struct rpc_rqst *rqstp, /* * Decode OPEN response */ -static int nfs4_xdr_dec_open_noattr(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_open_noattr(void *rqstp, struct xdr_stream *xdr, - struct nfs_openres *res) + void *_res) { + struct nfs_openres *res = _res; struct compound_hdr hdr; int status; @@ -6542,10 +6612,11 @@ static int nfs4_xdr_dec_open_noattr(struct rpc_rqst *rqstp, /* * Decode SETATTR response */ -static int nfs4_xdr_dec_setattr(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_setattr(void *rqstp, struct xdr_stream *xdr, - struct nfs_setattrres *res) + void *_res) { + struct nfs_setattrres *res = _res; struct compound_hdr hdr; int status; @@ -6569,9 +6640,10 @@ static int nfs4_xdr_dec_setattr(struct rpc_rqst *rqstp, /* * Decode LOCK response */ -static int nfs4_xdr_dec_lock(struct rpc_rqst *rqstp, struct xdr_stream *xdr, - struct nfs_lock_res *res) +static int nfs4_xdr_dec_lock(void *rqstp, struct xdr_stream *xdr, + void *_res) { + struct nfs_lock_res *res = _res; struct compound_hdr hdr; int status; @@ -6592,9 +6664,10 @@ static int nfs4_xdr_dec_lock(struct rpc_rqst *rqstp, struct xdr_stream *xdr, /* * Decode LOCKT response */ -static int nfs4_xdr_dec_lockt(struct rpc_rqst *rqstp, struct xdr_stream *xdr, - struct nfs_lockt_res *res) +static int nfs4_xdr_dec_lockt(void *rqstp, struct xdr_stream *xdr, + void *_res) { + struct nfs_lockt_res *res = _res; struct compound_hdr hdr; int status; @@ -6615,9 +6688,10 @@ static int nfs4_xdr_dec_lockt(struct rpc_rqst *rqstp, struct xdr_stream *xdr, /* * Decode LOCKU response */ -static int nfs4_xdr_dec_locku(struct rpc_rqst *rqstp, struct xdr_stream *xdr, - struct nfs_locku_res *res) +static int nfs4_xdr_dec_locku(void *rqstp, struct xdr_stream *xdr, + void *_res) { + struct nfs_locku_res *res = _res; struct compound_hdr hdr; int status; @@ -6635,7 +6709,7 @@ static int nfs4_xdr_dec_locku(struct rpc_rqst *rqstp, struct xdr_stream *xdr, return status; } -static int nfs4_xdr_dec_release_lockowner(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_release_lockowner(void *rqstp, struct xdr_stream *xdr, void *dummy) { struct compound_hdr hdr; @@ -6650,10 +6724,11 @@ static int nfs4_xdr_dec_release_lockowner(struct rpc_rqst *rqstp, /* * Decode READLINK response */ -static int nfs4_xdr_dec_readlink(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_readlink(void *rqstp, struct xdr_stream *xdr, - struct nfs4_readlink_res *res) + void *_res) { + struct nfs4_readlink_res *res = _res; struct compound_hdr hdr; int status; @@ -6674,9 +6749,10 @@ static int nfs4_xdr_dec_readlink(struct rpc_rqst *rqstp, /* * Decode READDIR response */ -static int nfs4_xdr_dec_readdir(struct rpc_rqst *rqstp, struct xdr_stream *xdr, - struct nfs4_readdir_res *res) +static int nfs4_xdr_dec_readdir(void *rqstp, struct xdr_stream *xdr, + void *_res) { + struct nfs4_readdir_res *res = _res; struct compound_hdr hdr; int status; @@ -6697,9 +6773,10 @@ static int nfs4_xdr_dec_readdir(struct rpc_rqst *rqstp, struct xdr_stream *xdr, /* * Decode Read response */ -static int nfs4_xdr_dec_read(struct rpc_rqst *rqstp, struct xdr_stream *xdr, - struct nfs_pgio_res *res) +static int nfs4_xdr_dec_read(void *rqstp, struct xdr_stream *xdr, + void *_res) { + struct nfs_pgio_res *res = _res; struct compound_hdr hdr; int status; @@ -6723,9 +6800,10 @@ static int nfs4_xdr_dec_read(struct rpc_rqst *rqstp, struct xdr_stream *xdr, /* * Decode WRITE response */ -static int nfs4_xdr_dec_write(struct rpc_rqst *rqstp, struct xdr_stream *xdr, - struct nfs_pgio_res *res) +static int nfs4_xdr_dec_write(void *rqstp, struct xdr_stream *xdr, + void *_res) { + struct nfs_pgio_res *res = _res; struct compound_hdr hdr; int status; @@ -6753,9 +6831,10 @@ static int nfs4_xdr_dec_write(struct rpc_rqst *rqstp, struct xdr_stream *xdr, /* * Decode COMMIT response */ -static int nfs4_xdr_dec_commit(struct rpc_rqst *rqstp, struct xdr_stream *xdr, - struct nfs_commitres *res) +static int nfs4_xdr_dec_commit(void *rqstp, struct xdr_stream *xdr, + void *_res) { + struct nfs_commitres *res = _res; struct compound_hdr hdr; int status; @@ -6777,9 +6856,10 @@ static int nfs4_xdr_dec_commit(struct rpc_rqst *rqstp, struct xdr_stream *xdr, /* * Decode FSINFO response */ -static int nfs4_xdr_dec_fsinfo(struct rpc_rqst *req, struct xdr_stream *xdr, - struct nfs4_fsinfo_res *res) +static int nfs4_xdr_dec_fsinfo(void *req, struct xdr_stream *xdr, + void *_res) { + struct nfs4_fsinfo_res *res = _res; struct compound_hdr hdr; int status; @@ -6796,9 +6876,10 @@ static int nfs4_xdr_dec_fsinfo(struct rpc_rqst *req, struct xdr_stream *xdr, /* * Decode PATHCONF response */ -static int nfs4_xdr_dec_pathconf(struct rpc_rqst *req, struct xdr_stream *xdr, - struct nfs4_pathconf_res *res) +static int nfs4_xdr_dec_pathconf(void *req, struct xdr_stream *xdr, + void *_res) { + struct nfs4_pathconf_res *res = _res; struct compound_hdr hdr; int status; @@ -6815,9 +6896,10 @@ static int nfs4_xdr_dec_pathconf(struct rpc_rqst *req, struct xdr_stream *xdr, /* * Decode STATFS response */ -static int nfs4_xdr_dec_statfs(struct rpc_rqst *req, struct xdr_stream *xdr, - struct nfs4_statfs_res *res) +static int nfs4_xdr_dec_statfs(void *req, struct xdr_stream *xdr, + void *_res) { + struct nfs4_statfs_res *res = _res; struct compound_hdr hdr; int status; @@ -6834,10 +6916,11 @@ static int nfs4_xdr_dec_statfs(struct rpc_rqst *req, struct xdr_stream *xdr, /* * Decode GETATTR_BITMAP response */ -static int nfs4_xdr_dec_server_caps(struct rpc_rqst *req, +static int nfs4_xdr_dec_server_caps(void *req, struct xdr_stream *xdr, - struct nfs4_server_caps_res *res) + void *_res) { + struct nfs4_server_caps_res *res = _res; struct compound_hdr hdr; int status; @@ -6858,7 +6941,7 @@ static int nfs4_xdr_dec_server_caps(struct rpc_rqst *req, /* * Decode RENEW response */ -static int nfs4_xdr_dec_renew(struct rpc_rqst *rqstp, struct xdr_stream *xdr, +static int nfs4_xdr_dec_renew(void *rqstp, struct xdr_stream *xdr, void *__unused) { struct compound_hdr hdr; @@ -6873,9 +6956,9 @@ static int nfs4_xdr_dec_renew(struct rpc_rqst *rqstp, struct xdr_stream *xdr, /* * Decode SETCLIENTID response */ -static int nfs4_xdr_dec_setclientid(struct rpc_rqst *req, +static int nfs4_xdr_dec_setclientid(void *req, struct xdr_stream *xdr, - struct nfs4_setclientid_res *res) + void *res) { struct compound_hdr hdr; int status; @@ -6889,8 +6972,9 @@ static int nfs4_xdr_dec_setclientid(struct rpc_rqst *req, /* * Decode SETCLIENTID_CONFIRM response */ -static int nfs4_xdr_dec_setclientid_confirm(struct rpc_rqst *req, - struct xdr_stream *xdr) +static int nfs4_xdr_dec_setclientid_confirm(void *req, + struct xdr_stream *xdr, + void *res) { struct compound_hdr hdr; int status; @@ -6904,10 +6988,11 @@ static int nfs4_xdr_dec_setclientid_confirm(struct rpc_rqst *req, /* * Decode DELEGRETURN response */ -static int nfs4_xdr_dec_delegreturn(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_delegreturn(void *rqstp, struct xdr_stream *xdr, - struct nfs4_delegreturnres *res) + void *_res) { + struct nfs4_delegreturnres *res = _res; struct compound_hdr hdr; int status; @@ -6931,10 +7016,11 @@ static int nfs4_xdr_dec_delegreturn(struct rpc_rqst *rqstp, /* * Decode FS_LOCATIONS response */ -static int nfs4_xdr_dec_fs_locations(struct rpc_rqst *req, +static int nfs4_xdr_dec_fs_locations(void *req, struct xdr_stream *xdr, - struct nfs4_fs_locations_res *res) + void *_res) { + struct nfs4_fs_locations_res *res = _res; struct compound_hdr hdr; int status; @@ -6974,10 +7060,11 @@ static int nfs4_xdr_dec_fs_locations(struct rpc_rqst *req, /* * Decode SECINFO response */ -static int nfs4_xdr_dec_secinfo(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_secinfo(void *rqstp, struct xdr_stream *xdr, - struct nfs4_secinfo_res *res) + void *_res) { + struct nfs4_secinfo_res *res = _res; struct compound_hdr hdr; int status; @@ -6998,10 +7085,11 @@ static int nfs4_xdr_dec_secinfo(struct rpc_rqst *rqstp, /* * Decode FSID_PRESENT response */ -static int nfs4_xdr_dec_fsid_present(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_fsid_present(void *rqstp, struct xdr_stream *xdr, - struct nfs4_fsid_present_res *res) + void *_res) { + struct nfs4_fsid_present_res *res = _res; struct compound_hdr hdr; int status; @@ -7027,7 +7115,7 @@ static int nfs4_xdr_dec_fsid_present(struct rpc_rqst *rqstp, /* * Decode BIND_CONN_TO_SESSION response */ -static int nfs4_xdr_dec_bind_conn_to_session(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_bind_conn_to_session(void *rqstp, struct xdr_stream *xdr, void *res) { @@ -7043,7 +7131,7 @@ static int nfs4_xdr_dec_bind_conn_to_session(struct rpc_rqst *rqstp, /* * Decode EXCHANGE_ID response */ -static int nfs4_xdr_dec_exchange_id(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_exchange_id(void *rqstp, struct xdr_stream *xdr, void *res) { @@ -7059,9 +7147,9 @@ static int nfs4_xdr_dec_exchange_id(struct rpc_rqst *rqstp, /* * Decode CREATE_SESSION response */ -static int nfs4_xdr_dec_create_session(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_create_session(void *rqstp, struct xdr_stream *xdr, - struct nfs41_create_session_res *res) + void *res) { struct compound_hdr hdr; int status; @@ -7075,7 +7163,7 @@ static int nfs4_xdr_dec_create_session(struct rpc_rqst *rqstp, /* * Decode DESTROY_SESSION response */ -static int nfs4_xdr_dec_destroy_session(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_destroy_session(void *rqstp, struct xdr_stream *xdr, void *res) { @@ -7091,7 +7179,7 @@ static int nfs4_xdr_dec_destroy_session(struct rpc_rqst *rqstp, /* * Decode DESTROY_CLIENTID response */ -static int nfs4_xdr_dec_destroy_clientid(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_destroy_clientid(void *rqstp, struct xdr_stream *xdr, void *res) { @@ -7107,9 +7195,9 @@ static int nfs4_xdr_dec_destroy_clientid(struct rpc_rqst *rqstp, /* * Decode SEQUENCE response */ -static int nfs4_xdr_dec_sequence(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_sequence(void *rqstp, struct xdr_stream *xdr, - struct nfs4_sequence_res *res) + void *res) { struct compound_hdr hdr; int status; @@ -7123,10 +7211,11 @@ static int nfs4_xdr_dec_sequence(struct rpc_rqst *rqstp, /* * Decode GET_LEASE_TIME response */ -static int nfs4_xdr_dec_get_lease_time(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_get_lease_time(void *rqstp, struct xdr_stream *xdr, - struct nfs4_get_lease_time_res *res) + void *_res) { + struct nfs4_get_lease_time_res *res = _res; struct compound_hdr hdr; int status; @@ -7143,10 +7232,11 @@ static int nfs4_xdr_dec_get_lease_time(struct rpc_rqst *rqstp, /* * Decode RECLAIM_COMPLETE response */ -static int nfs4_xdr_dec_reclaim_complete(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_reclaim_complete(void *rqstp, struct xdr_stream *xdr, - struct nfs41_reclaim_complete_res *res) + void *_res) { + struct nfs41_reclaim_complete_res *res = _res; struct compound_hdr hdr; int status; @@ -7161,10 +7251,11 @@ static int nfs4_xdr_dec_reclaim_complete(struct rpc_rqst *rqstp, /* * Decode GETDEVINFO response */ -static int nfs4_xdr_dec_getdeviceinfo(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_getdeviceinfo(void *rqstp, struct xdr_stream *xdr, - struct nfs4_getdeviceinfo_res *res) + void *_res) { + struct nfs4_getdeviceinfo_res *res = _res; struct compound_hdr hdr; int status; @@ -7182,10 +7273,11 @@ static int nfs4_xdr_dec_getdeviceinfo(struct rpc_rqst *rqstp, /* * Decode LAYOUTGET response */ -static int nfs4_xdr_dec_layoutget(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_layoutget(void *rqstp, struct xdr_stream *xdr, - struct nfs4_layoutget_res *res) + void *_res) { + struct nfs4_layoutget_res *res = _res; struct compound_hdr hdr; int status; @@ -7206,10 +7298,11 @@ static int nfs4_xdr_dec_layoutget(struct rpc_rqst *rqstp, /* * Decode LAYOUTRETURN response */ -static int nfs4_xdr_dec_layoutreturn(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_layoutreturn(void *rqstp, struct xdr_stream *xdr, - struct nfs4_layoutreturn_res *res) + void *_res) { + struct nfs4_layoutreturn_res *res = _res; struct compound_hdr hdr; int status; @@ -7230,10 +7323,11 @@ static int nfs4_xdr_dec_layoutreturn(struct rpc_rqst *rqstp, /* * Decode LAYOUTCOMMIT response */ -static int nfs4_xdr_dec_layoutcommit(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_layoutcommit(void *rqstp, struct xdr_stream *xdr, - struct nfs4_layoutcommit_res *res) + void *_res) { + struct nfs4_layoutcommit_res *res = _res; struct compound_hdr hdr; int status; @@ -7257,10 +7351,11 @@ static int nfs4_xdr_dec_layoutcommit(struct rpc_rqst *rqstp, /* * Decode SECINFO_NO_NAME response */ -static int nfs4_xdr_dec_secinfo_no_name(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_secinfo_no_name(void *rqstp, struct xdr_stream *xdr, - struct nfs4_secinfo_res *res) + void *_res) { + struct nfs4_secinfo_res *res = _res; struct compound_hdr hdr; int status; @@ -7281,10 +7376,11 @@ static int nfs4_xdr_dec_secinfo_no_name(struct rpc_rqst *rqstp, /* * Decode TEST_STATEID response */ -static int nfs4_xdr_dec_test_stateid(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_test_stateid(void *rqstp, struct xdr_stream *xdr, - struct nfs41_test_stateid_res *res) + void *_res) { + struct nfs41_test_stateid_res *res = _res; struct compound_hdr hdr; int status; @@ -7302,10 +7398,11 @@ static int nfs4_xdr_dec_test_stateid(struct rpc_rqst *rqstp, /* * Decode FREE_STATEID response */ -static int nfs4_xdr_dec_free_stateid(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_free_stateid(void *rqstp, struct xdr_stream *xdr, - struct nfs41_free_stateid_res *res) + void *_res) { + struct nfs41_free_stateid_res *res = _res; struct compound_hdr hdr; int status; @@ -7470,8 +7567,8 @@ nfs4_stat_to_errno(int stat) #define PROC(proc, argtype, restype) \ [NFSPROC4_CLNT_##proc] = { \ .p_proc = NFSPROC4_COMPOUND, \ - .p_encode = (kxdreproc_t)nfs4_xdr_##argtype, \ - .p_decode = (kxdrdproc_t)nfs4_xdr_##restype, \ + .p_encode = nfs4_xdr_##argtype, \ + .p_decode = nfs4_xdr_##restype, \ .p_arglen = NFS4_##argtype##_sz, \ .p_replen = NFS4_##restype##_sz, \ .p_statidx = NFSPROC4_CLNT_##proc, \ diff --git a/fs/nfs/read.c b/fs/nfs/read.c index defc923..67b8000 100644 --- a/fs/nfs/read.c +++ b/fs/nfs/read.c @@ -346,7 +346,7 @@ struct nfs_readdesc { }; static int -readpage_async_filler(void *data, struct page *page) +readpage_async_filler(struct file *data, struct page *page) { struct nfs_readdesc *desc = (struct nfs_readdesc *)data; struct nfs_page *new; diff --git a/fs/nfs/symlink.c b/fs/nfs/symlink.c index 4fe3eea..8922b2b 100644 --- a/fs/nfs/symlink.c +++ b/fs/nfs/symlink.c @@ -25,9 +25,10 @@ * and straight-forward than readdir caching. */ -static int nfs_symlink_filler(struct inode *inode, struct page *page) +static int nfs_symlink_filler(struct file *_inode, struct page *page) { int error; + struct inode *inode = (struct inode *)_inode; error = NFS_PROTO(inode)->readlink(inode, page, 0, PAGE_SIZE); if (error < 0) @@ -64,8 +65,7 @@ static const char *nfs_get_link(struct dentry *dentry, err = ERR_PTR(nfs_revalidate_mapping(inode, inode->i_mapping)); if (err) return err; - page = read_cache_page(&inode->i_data, 0, - (filler_t *)nfs_symlink_filler, inode); + page = read_cache_page(&inode->i_data, 0, nfs_symlink_filler, inode); if (IS_ERR(page)) return ERR_CAST(page); } diff --git a/fs/nfsd/current_stateid.h b/fs/nfsd/current_stateid.h index 4123551..813b403 100644 --- a/fs/nfsd/current_stateid.h +++ b/fs/nfsd/current_stateid.h @@ -8,21 +8,21 @@ extern void clear_current_stateid(struct nfsd4_compound_state *cstate); /* * functions to set current state id */ -extern void nfsd4_set_opendowngradestateid(struct nfsd4_compound_state *cstate, struct nfsd4_open_downgrade *); -extern void nfsd4_set_openstateid(struct nfsd4_compound_state *, struct nfsd4_open *); -extern void nfsd4_set_lockstateid(struct nfsd4_compound_state *, struct nfsd4_lock *); -extern void nfsd4_set_closestateid(struct nfsd4_compound_state *, struct nfsd4_close *); +extern void nfsd4_set_opendowngradestateid(struct nfsd4_compound_state *cstate, void *); +extern void nfsd4_set_openstateid(struct nfsd4_compound_state *, void *); +extern void nfsd4_set_lockstateid(struct nfsd4_compound_state *, void *); +extern void nfsd4_set_closestateid(struct nfsd4_compound_state *, void *); /* * functions to consume current state id */ -extern void nfsd4_get_opendowngradestateid(struct nfsd4_compound_state *cstate, struct nfsd4_open_downgrade *); -extern void nfsd4_get_delegreturnstateid(struct nfsd4_compound_state *, struct nfsd4_delegreturn *); -extern void nfsd4_get_freestateid(struct nfsd4_compound_state *, struct nfsd4_free_stateid *); -extern void nfsd4_get_setattrstateid(struct nfsd4_compound_state *, struct nfsd4_setattr *); -extern void nfsd4_get_closestateid(struct nfsd4_compound_state *, struct nfsd4_close *); -extern void nfsd4_get_lockustateid(struct nfsd4_compound_state *, struct nfsd4_locku *); -extern void nfsd4_get_readstateid(struct nfsd4_compound_state *, struct nfsd4_read *); -extern void nfsd4_get_writestateid(struct nfsd4_compound_state *, struct nfsd4_write *); +extern void nfsd4_get_opendowngradestateid(struct nfsd4_compound_state *cstate, void *); +extern void nfsd4_get_delegreturnstateid(struct nfsd4_compound_state *, void *); +extern void nfsd4_get_freestateid(struct nfsd4_compound_state *, void *); +extern void nfsd4_get_setattrstateid(struct nfsd4_compound_state *, void *); +extern void nfsd4_get_closestateid(struct nfsd4_compound_state *, void *); +extern void nfsd4_get_lockustateid(struct nfsd4_compound_state *, void *); +extern void nfsd4_get_readstateid(struct nfsd4_compound_state *, void *); +extern void nfsd4_get_writestateid(struct nfsd4_compound_state *, void *); #endif /* _NFSD4_CURRENT_STATE_H */ diff --git a/fs/nfsd/nfs2acl.c b/fs/nfsd/nfs2acl.c index d08cd88..5d74e50 100644 --- a/fs/nfsd/nfs2acl.c +++ b/fs/nfsd/nfs2acl.c @@ -27,9 +27,10 @@ nfsacld_proc_null(struct svc_rqst *rqstp, void *argp, void *resp) /* * Get the Access and/or Default ACL of a file. */ -static __be32 nfsacld_proc_getacl(struct svc_rqst * rqstp, - struct nfsd3_getaclargs *argp, struct nfsd3_getaclres *resp) +static __be32 nfsacld_proc_getacl(struct svc_rqst * rqstp, void *_argp, void *_resp) { + struct nfsd3_getaclargs *argp = _argp; + struct nfsd3_getaclres *resp = _resp; struct posix_acl *acl; struct inode *inode; svc_fh *fh; @@ -87,10 +88,10 @@ static __be32 nfsacld_proc_getacl(struct svc_rqst * rqstp, /* * Set the Access and/or Default ACL of a file. */ -static __be32 nfsacld_proc_setacl(struct svc_rqst * rqstp, - struct nfsd3_setaclargs *argp, - struct nfsd_attrstat *resp) +static __be32 nfsacld_proc_setacl(struct svc_rqst * rqstp, void *_argp, void *_resp) { + struct nfsd3_setaclargs *argp = _argp; + struct nfsd_attrstat *resp = _resp; struct inode *inode; svc_fh *fh; __be32 nfserr = 0; @@ -141,9 +142,10 @@ static __be32 nfsacld_proc_setacl(struct svc_rqst * rqstp, /* * Check file attributes */ -static __be32 nfsacld_proc_getattr(struct svc_rqst * rqstp, - struct nfsd_fhandle *argp, struct nfsd_attrstat *resp) +static __be32 nfsacld_proc_getattr(struct svc_rqst * rqstp, void *_argp, void *_resp) { + struct nfsd_fhandle *argp = _argp; + struct nfsd_attrstat *resp = _resp; __be32 nfserr; dprintk("nfsd: GETATTR %s\n", SVCFH_fmt(&argp->fh)); @@ -158,9 +160,10 @@ static __be32 nfsacld_proc_getattr(struct svc_rqst * rqstp, /* * Check file access */ -static __be32 nfsacld_proc_access(struct svc_rqst *rqstp, struct nfsd3_accessargs *argp, - struct nfsd3_accessres *resp) +static __be32 nfsacld_proc_access(struct svc_rqst *rqstp, void *_argp, void *_resp) { + struct nfsd3_accessargs *argp = _argp; + struct nfsd3_accessres *resp = _resp; __be32 nfserr; dprintk("nfsd: ACCESS(2acl) %s 0x%x\n", @@ -179,9 +182,10 @@ static __be32 nfsacld_proc_access(struct svc_rqst *rqstp, struct nfsd3_accessarg /* * XDR decode functions */ -static int nfsaclsvc_decode_getaclargs(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_getaclargs *argp) +static int nfsaclsvc_decode_getaclargs(void *rqstp, __be32 *p, void *_argp) { + struct nfsd3_getaclargs *argp = _argp; + p = nfs2svc_decode_fh(p, &argp->fh); if (!p) return 0; @@ -191,9 +195,10 @@ static int nfsaclsvc_decode_getaclargs(struct svc_rqst *rqstp, __be32 *p, } -static int nfsaclsvc_decode_setaclargs(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_setaclargs *argp) +static int nfsaclsvc_decode_setaclargs(void *_rqstp, __be32 *p, void *_argp) { + struct svc_rqst *rqstp = _rqstp; + struct nfsd3_setaclargs *argp = _argp; struct kvec *head = rqstp->rq_arg.head; unsigned int base; int n; @@ -217,18 +222,20 @@ static int nfsaclsvc_decode_setaclargs(struct svc_rqst *rqstp, __be32 *p, return (n > 0); } -static int nfsaclsvc_decode_fhandleargs(struct svc_rqst *rqstp, __be32 *p, - struct nfsd_fhandle *argp) +static int nfsaclsvc_decode_fhandleargs(void *rqstp, __be32 *p, void *_argp) { + struct nfsd_fhandle *argp = _argp; + p = nfs2svc_decode_fh(p, &argp->fh); if (!p) return 0; return xdr_argsize_check(rqstp, p); } -static int nfsaclsvc_decode_accessargs(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_accessargs *argp) +static int nfsaclsvc_decode_accessargs(void *rqstp, __be32 *p, void *_argp) { + struct nfsd3_accessargs *argp = _argp; + p = nfs2svc_decode_fh(p, &argp->fh); if (!p) return 0; @@ -245,15 +252,16 @@ static int nfsaclsvc_decode_accessargs(struct svc_rqst *rqstp, __be32 *p, * There must be an encoding function for void results so svc_process * will work properly. */ -static int nfsaclsvc_encode_voidres(struct svc_rqst *rqstp, __be32 *p, void *dummy) +static int nfsaclsvc_encode_voidres(void *rqstp, __be32 *p, void *dummy) { return xdr_ressize_check(rqstp, p); } /* GETACL */ -static int nfsaclsvc_encode_getaclres(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_getaclres *resp) +static int nfsaclsvc_encode_getaclres(void *_rqstp, __be32 *p, void *_resp) { + struct svc_rqst *rqstp = _rqstp; + struct nfsd3_getaclres *resp = _resp; struct dentry *dentry = resp->fh.fh_dentry; struct inode *inode; struct kvec *head = rqstp->rq_res.head; @@ -296,17 +304,19 @@ static int nfsaclsvc_encode_getaclres(struct svc_rqst *rqstp, __be32 *p, return (n > 0); } -static int nfsaclsvc_encode_attrstatres(struct svc_rqst *rqstp, __be32 *p, - struct nfsd_attrstat *resp) +static int nfsaclsvc_encode_attrstatres(void *rqstp, __be32 *p, void *_resp) { + struct nfsd_attrstat *resp = _resp; + p = nfs2svc_encode_fattr(rqstp, p, &resp->fh, &resp->stat); return xdr_ressize_check(rqstp, p); } /* ACCESS */ -static int nfsaclsvc_encode_accessres(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_accessres *resp) +static int nfsaclsvc_encode_accessres(void *rqstp, __be32 *p, void *_resp) { + struct nfsd3_accessres *resp = _resp; + p = nfs2svc_encode_fattr(rqstp, p, &resp->fh, &resp->stat); *p++ = htonl(resp->access); return xdr_ressize_check(rqstp, p); @@ -315,27 +325,30 @@ static int nfsaclsvc_encode_accessres(struct svc_rqst *rqstp, __be32 *p, /* * XDR release functions */ -static int nfsaclsvc_release_getacl(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_getaclres *resp) +static int nfsaclsvc_release_getacl(void *rqstp, __be32 *p, void *_resp) { + struct nfsd3_getaclres *resp = _resp; + fh_put(&resp->fh); posix_acl_release(resp->acl_access); posix_acl_release(resp->acl_default); return 1; } -static int nfsaclsvc_release_attrstat(struct svc_rqst *rqstp, __be32 *p, - struct nfsd_attrstat *resp) +static int nfsaclsvc_release_attrstat(void *rqstp, __be32 *p, void *_resp) { + struct nfsd_attrstat *resp = _resp; + fh_put(&resp->fh); return 1; } -static int nfsaclsvc_release_access(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_accessres *resp) +static int nfsaclsvc_release_access(void *rqstp, __be32 *p, void *_resp) { - fh_put(&resp->fh); - return 1; + struct nfsd3_accessres *resp = _resp; + + fh_put(&resp->fh); + return 1; } #define nfsaclsvc_decode_voidargs NULL @@ -346,10 +359,10 @@ static int nfsaclsvc_release_access(struct svc_rqst *rqstp, __be32 *p, struct nfsd3_voidargs { int dummy; }; #define PROC(name, argt, rest, relt, cache, respsize) \ - { (svc_procfunc) nfsacld_proc_##name, \ - (kxdrproc_t) nfsaclsvc_decode_##argt##args, \ - (kxdrproc_t) nfsaclsvc_encode_##rest##res, \ - (kxdrproc_t) nfsaclsvc_release_##relt, \ + { nfsacld_proc_##name, \ + nfsaclsvc_decode_##argt##args, \ + nfsaclsvc_encode_##rest##res, \ + nfsaclsvc_release_##relt, \ sizeof(struct nfsd3_##argt##args), \ sizeof(struct nfsd3_##rest##res), \ 0, \ diff --git a/fs/nfsd/nfs3acl.c b/fs/nfsd/nfs3acl.c index 0c89034..36a8d76 100644 --- a/fs/nfsd/nfs3acl.c +++ b/fs/nfsd/nfs3acl.c @@ -26,9 +26,10 @@ nfsd3_proc_null(struct svc_rqst *rqstp, void *argp, void *resp) /* * Get the Access and/or Default ACL of a file. */ -static __be32 nfsd3_proc_getacl(struct svc_rqst * rqstp, - struct nfsd3_getaclargs *argp, struct nfsd3_getaclres *resp) +static __be32 nfsd3_proc_getacl(struct svc_rqst * rqstp, void *_argp, void *_resp) { + struct nfsd3_getaclargs *argp = _argp; + struct nfsd3_getaclres *resp = _resp; struct posix_acl *acl; struct inode *inode; svc_fh *fh; @@ -80,10 +81,10 @@ static __be32 nfsd3_proc_getacl(struct svc_rqst * rqstp, /* * Set the Access and/or Default ACL of a file. */ -static __be32 nfsd3_proc_setacl(struct svc_rqst * rqstp, - struct nfsd3_setaclargs *argp, - struct nfsd3_attrstat *resp) +static __be32 nfsd3_proc_setacl(struct svc_rqst * rqstp, void *_argp, void *_resp) { + struct nfsd3_setaclargs *argp = _argp; + struct nfsd3_attrstat *resp = _resp; struct inode *inode; svc_fh *fh; __be32 nfserr = 0; @@ -123,9 +124,10 @@ static __be32 nfsd3_proc_setacl(struct svc_rqst * rqstp, /* * XDR decode functions */ -static int nfs3svc_decode_getaclargs(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_getaclargs *args) +static int nfs3svc_decode_getaclargs(void *rqstp, __be32 *p, void *_args) { + struct nfsd3_getaclargs *args = _args; + p = nfs3svc_decode_fh(p, &args->fh); if (!p) return 0; @@ -135,9 +137,10 @@ static int nfs3svc_decode_getaclargs(struct svc_rqst *rqstp, __be32 *p, } -static int nfs3svc_decode_setaclargs(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_setaclargs *args) +static int nfs3svc_decode_setaclargs(void *_rqstp, __be32 *p, void *_args) { + struct svc_rqst *rqstp = _rqstp; + struct nfsd3_setaclargs *args = _args; struct kvec *head = rqstp->rq_arg.head; unsigned int base; int n; @@ -166,9 +169,10 @@ static int nfs3svc_decode_setaclargs(struct svc_rqst *rqstp, __be32 *p, */ /* GETACL */ -static int nfs3svc_encode_getaclres(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_getaclres *resp) +static int nfs3svc_encode_getaclres(void *_rqstp, __be32 *p, void *_resp) { + struct svc_rqst *rqstp = _rqstp; + struct nfsd3_getaclres *resp = _resp; struct dentry *dentry = resp->fh.fh_dentry; p = nfs3svc_encode_post_op_attr(rqstp, p, &resp->fh); @@ -211,9 +215,10 @@ static int nfs3svc_encode_getaclres(struct svc_rqst *rqstp, __be32 *p, } /* SETACL */ -static int nfs3svc_encode_setaclres(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_attrstat *resp) +static int nfs3svc_encode_setaclres(void *rqstp, __be32 *p, void *_resp) { + struct nfsd3_attrstat *resp = _resp; + p = nfs3svc_encode_post_op_attr(rqstp, p, &resp->fh); return xdr_ressize_check(rqstp, p); @@ -222,9 +227,10 @@ static int nfs3svc_encode_setaclres(struct svc_rqst *rqstp, __be32 *p, /* * XDR release functions */ -static int nfs3svc_release_getacl(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_getaclres *resp) +static int nfs3svc_release_getacl(void *rqstp, __be32 *p, void *_resp) { + struct nfsd3_getaclres *resp = _resp; + fh_put(&resp->fh); posix_acl_release(resp->acl_access); posix_acl_release(resp->acl_default); @@ -238,10 +244,10 @@ static int nfs3svc_release_getacl(struct svc_rqst *rqstp, __be32 *p, struct nfsd3_voidargs { int dummy; }; #define PROC(name, argt, rest, relt, cache, respsize) \ - { (svc_procfunc) nfsd3_proc_##name, \ - (kxdrproc_t) nfs3svc_decode_##argt##args, \ - (kxdrproc_t) nfs3svc_encode_##rest##res, \ - (kxdrproc_t) nfs3svc_release_##relt, \ + { nfsd3_proc_##name, \ + nfs3svc_decode_##argt##args, \ + nfs3svc_encode_##rest##res, \ + nfs3svc_release_##relt, \ sizeof(struct nfsd3_##argt##args), \ sizeof(struct nfsd3_##rest##res), \ 0, \ diff --git a/fs/nfsd/nfs3proc.c b/fs/nfsd/nfs3proc.c index d818e4f..bb15590 100644 --- a/fs/nfsd/nfs3proc.c +++ b/fs/nfsd/nfs3proc.c @@ -40,9 +40,10 @@ nfsd3_proc_null(struct svc_rqst *rqstp, void *argp, void *resp) * Get a file's attributes */ static __be32 -nfsd3_proc_getattr(struct svc_rqst *rqstp, struct nfsd_fhandle *argp, - struct nfsd3_attrstat *resp) +nfsd3_proc_getattr(struct svc_rqst *rqstp, void *_argp, void *_resp) { + struct nfsd_fhandle *argp = _argp; + struct nfsd3_attrstat *resp = _resp; __be32 nfserr; dprintk("nfsd: GETATTR(3) %s\n", @@ -63,9 +64,10 @@ nfsd3_proc_getattr(struct svc_rqst *rqstp, struct nfsd_fhandle *argp, * Set a file's attributes */ static __be32 -nfsd3_proc_setattr(struct svc_rqst *rqstp, struct nfsd3_sattrargs *argp, - struct nfsd3_attrstat *resp) +nfsd3_proc_setattr(struct svc_rqst *rqstp, void *_argp, void *_resp) { + struct nfsd3_sattrargs *argp = _argp; + struct nfsd3_attrstat *resp = _resp; __be32 nfserr; dprintk("nfsd: SETATTR(3) %s\n", @@ -81,9 +83,10 @@ nfsd3_proc_setattr(struct svc_rqst *rqstp, struct nfsd3_sattrargs *argp, * Look up a path name component */ static __be32 -nfsd3_proc_lookup(struct svc_rqst *rqstp, struct nfsd3_diropargs *argp, - struct nfsd3_diropres *resp) +nfsd3_proc_lookup(struct svc_rqst *rqstp, void *_argp, void *_resp) { + struct nfsd3_diropargs *argp = _argp; + struct nfsd3_diropres *resp = _resp; __be32 nfserr; dprintk("nfsd: LOOKUP(3) %s %.*s\n", @@ -105,9 +108,10 @@ nfsd3_proc_lookup(struct svc_rqst *rqstp, struct nfsd3_diropargs *argp, * Check file access */ static __be32 -nfsd3_proc_access(struct svc_rqst *rqstp, struct nfsd3_accessargs *argp, - struct nfsd3_accessres *resp) +nfsd3_proc_access(struct svc_rqst *rqstp, void *_argp, void *_resp) { + struct nfsd3_accessargs *argp = _argp; + struct nfsd3_accessres *resp = _resp; __be32 nfserr; dprintk("nfsd: ACCESS(3) %s 0x%x\n", @@ -124,9 +128,10 @@ nfsd3_proc_access(struct svc_rqst *rqstp, struct nfsd3_accessargs *argp, * Read a symlink. */ static __be32 -nfsd3_proc_readlink(struct svc_rqst *rqstp, struct nfsd3_readlinkargs *argp, - struct nfsd3_readlinkres *resp) +nfsd3_proc_readlink(struct svc_rqst *rqstp, void *_argp, void *_resp) { + struct nfsd3_readlinkargs *argp = _argp; + struct nfsd3_readlinkres *resp = _resp; __be32 nfserr; dprintk("nfsd: READLINK(3) %s\n", SVCFH_fmt(&argp->fh)); @@ -142,9 +147,10 @@ nfsd3_proc_readlink(struct svc_rqst *rqstp, struct nfsd3_readlinkargs *argp, * Read a portion of a file. */ static __be32 -nfsd3_proc_read(struct svc_rqst *rqstp, struct nfsd3_readargs *argp, - struct nfsd3_readres *resp) +nfsd3_proc_read(struct svc_rqst *rqstp, void *_argp, void *_resp) { + struct nfsd3_readargs *argp = _argp; + struct nfsd3_readres *resp = _resp; __be32 nfserr; u32 max_blocksize = svc_max_payload(rqstp); unsigned long cnt = min(argp->count, max_blocksize); @@ -179,9 +185,10 @@ nfsd3_proc_read(struct svc_rqst *rqstp, struct nfsd3_readargs *argp, * Write data to a file */ static __be32 -nfsd3_proc_write(struct svc_rqst *rqstp, struct nfsd3_writeargs *argp, - struct nfsd3_writeres *resp) +nfsd3_proc_write(struct svc_rqst *rqstp, void *_argp, void *_resp) { + struct nfsd3_writeargs *argp = _argp; + struct nfsd3_writeres *resp = _resp; __be32 nfserr; unsigned long cnt = argp->len; @@ -208,9 +215,10 @@ nfsd3_proc_write(struct svc_rqst *rqstp, struct nfsd3_writeargs *argp, * first reports about SunOS compatibility problems start to pour in... */ static __be32 -nfsd3_proc_create(struct svc_rqst *rqstp, struct nfsd3_createargs *argp, - struct nfsd3_diropres *resp) +nfsd3_proc_create(struct svc_rqst *rqstp, void *_argp, void *_resp) { + struct nfsd3_createargs *argp = _argp; + struct nfsd3_diropres *resp = _resp; svc_fh *dirfhp, *newfhp = NULL; struct iattr *attr; __be32 nfserr; @@ -245,9 +253,10 @@ nfsd3_proc_create(struct svc_rqst *rqstp, struct nfsd3_createargs *argp, * Make directory. This operation is not idempotent. */ static __be32 -nfsd3_proc_mkdir(struct svc_rqst *rqstp, struct nfsd3_createargs *argp, - struct nfsd3_diropres *resp) +nfsd3_proc_mkdir(struct svc_rqst *rqstp, void *_argp, void *_resp) { + struct nfsd3_createargs *argp = _argp; + struct nfsd3_diropres *resp = _resp; __be32 nfserr; dprintk("nfsd: MKDIR(3) %s %.*s\n", @@ -265,9 +274,10 @@ nfsd3_proc_mkdir(struct svc_rqst *rqstp, struct nfsd3_createargs *argp, } static __be32 -nfsd3_proc_symlink(struct svc_rqst *rqstp, struct nfsd3_symlinkargs *argp, - struct nfsd3_diropres *resp) +nfsd3_proc_symlink(struct svc_rqst *rqstp, void *_argp, void *_resp) { + struct nfsd3_symlinkargs *argp = _argp; + struct nfsd3_diropres *resp = _resp; __be32 nfserr; dprintk("nfsd: SYMLINK(3) %s %.*s -> %.*s\n", @@ -286,9 +296,10 @@ nfsd3_proc_symlink(struct svc_rqst *rqstp, struct nfsd3_symlinkargs *argp, * Make socket/fifo/device. */ static __be32 -nfsd3_proc_mknod(struct svc_rqst *rqstp, struct nfsd3_mknodargs *argp, - struct nfsd3_diropres *resp) +nfsd3_proc_mknod(struct svc_rqst *rqstp, void *_argp, void *_resp) { + struct nfsd3_mknodargs *argp = _argp; + struct nfsd3_diropres *resp = _resp; __be32 nfserr; int type; dev_t rdev = 0; @@ -323,9 +334,10 @@ nfsd3_proc_mknod(struct svc_rqst *rqstp, struct nfsd3_mknodargs *argp, * Remove file/fifo/socket etc. */ static __be32 -nfsd3_proc_remove(struct svc_rqst *rqstp, struct nfsd3_diropargs *argp, - struct nfsd3_attrstat *resp) +nfsd3_proc_remove(struct svc_rqst *rqstp, void *_argp, void *_resp) { + struct nfsd3_diropargs *argp = _argp; + struct nfsd3_attrstat *resp = _resp; __be32 nfserr; dprintk("nfsd: REMOVE(3) %s %.*s\n", @@ -344,9 +356,10 @@ nfsd3_proc_remove(struct svc_rqst *rqstp, struct nfsd3_diropargs *argp, * Remove a directory */ static __be32 -nfsd3_proc_rmdir(struct svc_rqst *rqstp, struct nfsd3_diropargs *argp, - struct nfsd3_attrstat *resp) +nfsd3_proc_rmdir(struct svc_rqst *rqstp, void *_argp, void *_resp) { + struct nfsd3_diropargs *argp = _argp; + struct nfsd3_attrstat *resp = _resp; __be32 nfserr; dprintk("nfsd: RMDIR(3) %s %.*s\n", @@ -361,9 +374,10 @@ nfsd3_proc_rmdir(struct svc_rqst *rqstp, struct nfsd3_diropargs *argp, } static __be32 -nfsd3_proc_rename(struct svc_rqst *rqstp, struct nfsd3_renameargs *argp, - struct nfsd3_renameres *resp) +nfsd3_proc_rename(struct svc_rqst *rqstp, void *_argp, void *_resp) { + struct nfsd3_renameargs *argp = _argp; + struct nfsd3_renameres *resp = _resp; __be32 nfserr; dprintk("nfsd: RENAME(3) %s %.*s ->\n", @@ -383,9 +397,10 @@ nfsd3_proc_rename(struct svc_rqst *rqstp, struct nfsd3_renameargs *argp, } static __be32 -nfsd3_proc_link(struct svc_rqst *rqstp, struct nfsd3_linkargs *argp, - struct nfsd3_linkres *resp) +nfsd3_proc_link(struct svc_rqst *rqstp, void *_argp, void *_resp) { + struct nfsd3_linkargs *argp = _argp; + struct nfsd3_linkres *resp = _resp; __be32 nfserr; dprintk("nfsd: LINK(3) %s ->\n", @@ -406,9 +421,10 @@ nfsd3_proc_link(struct svc_rqst *rqstp, struct nfsd3_linkargs *argp, * Read a portion of a directory. */ static __be32 -nfsd3_proc_readdir(struct svc_rqst *rqstp, struct nfsd3_readdirargs *argp, - struct nfsd3_readdirres *resp) +nfsd3_proc_readdir(struct svc_rqst *rqstp, void *_argp, void *_resp) { + struct nfsd3_readdirargs *argp = _argp; + struct nfsd3_readdirres *resp = _resp; __be32 nfserr; int count; @@ -442,9 +458,10 @@ nfsd3_proc_readdir(struct svc_rqst *rqstp, struct nfsd3_readdirargs *argp, * For now, we choose to ignore the dircount parameter. */ static __be32 -nfsd3_proc_readdirplus(struct svc_rqst *rqstp, struct nfsd3_readdirargs *argp, - struct nfsd3_readdirres *resp) +nfsd3_proc_readdirplus(struct svc_rqst *rqstp, void *_argp, void *_resp) { + struct nfsd3_readdirargs *argp = _argp; + struct nfsd3_readdirres *resp = _resp; __be32 nfserr; int count = 0; loff_t offset; @@ -509,9 +526,10 @@ nfsd3_proc_readdirplus(struct svc_rqst *rqstp, struct nfsd3_readdirargs *argp, * Get file system stats */ static __be32 -nfsd3_proc_fsstat(struct svc_rqst * rqstp, struct nfsd_fhandle *argp, - struct nfsd3_fsstatres *resp) +nfsd3_proc_fsstat(struct svc_rqst * rqstp, void *_argp, void *_resp) { + struct nfsd_fhandle *argp = _argp; + struct nfsd3_fsstatres *resp = _resp; __be32 nfserr; dprintk("nfsd: FSSTAT(3) %s\n", @@ -526,9 +544,10 @@ nfsd3_proc_fsstat(struct svc_rqst * rqstp, struct nfsd_fhandle *argp, * Get file system info */ static __be32 -nfsd3_proc_fsinfo(struct svc_rqst * rqstp, struct nfsd_fhandle *argp, - struct nfsd3_fsinfores *resp) +nfsd3_proc_fsinfo(struct svc_rqst * rqstp, void *_argp, void *_resp) { + struct nfsd_fhandle *argp = _argp; + struct nfsd3_fsinfores *resp = _resp; __be32 nfserr; u32 max_blocksize = svc_max_payload(rqstp); @@ -569,9 +588,10 @@ nfsd3_proc_fsinfo(struct svc_rqst * rqstp, struct nfsd_fhandle *argp, * Get pathconf info for the specified file */ static __be32 -nfsd3_proc_pathconf(struct svc_rqst * rqstp, struct nfsd_fhandle *argp, - struct nfsd3_pathconfres *resp) +nfsd3_proc_pathconf(struct svc_rqst * rqstp, void *_argp, void *_resp) { + struct nfsd_fhandle *argp = _argp; + struct nfsd3_pathconfres *resp = _resp; __be32 nfserr; dprintk("nfsd: PATHCONF(3) %s\n", @@ -612,9 +632,10 @@ nfsd3_proc_pathconf(struct svc_rqst * rqstp, struct nfsd_fhandle *argp, * Commit a file (range) to stable storage. */ static __be32 -nfsd3_proc_commit(struct svc_rqst * rqstp, struct nfsd3_commitargs *argp, - struct nfsd3_commitres *resp) +nfsd3_proc_commit(struct svc_rqst * rqstp, void *_argp, void *_resp) { + struct nfsd3_commitargs *argp = _argp; + struct nfsd3_commitres *resp = _resp; __be32 nfserr; dprintk("nfsd: COMMIT(3) %s %u@%Lu\n", @@ -669,213 +690,213 @@ struct nfsd3_voidargs { int dummy; }; static struct svc_procedure nfsd_procedures3[22] = { [NFS3PROC_NULL] = { - .pc_func = (svc_procfunc) nfsd3_proc_null, - .pc_encode = (kxdrproc_t) nfs3svc_encode_voidres, + .pc_func = nfsd3_proc_null, + .pc_encode = nfs3svc_encode_voidres, .pc_argsize = sizeof(struct nfsd3_voidargs), .pc_ressize = sizeof(struct nfsd3_voidres), .pc_cachetype = RC_NOCACHE, .pc_xdrressize = ST, }, [NFS3PROC_GETATTR] = { - .pc_func = (svc_procfunc) nfsd3_proc_getattr, - .pc_decode = (kxdrproc_t) nfs3svc_decode_fhandleargs, - .pc_encode = (kxdrproc_t) nfs3svc_encode_attrstatres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, + .pc_func = nfsd3_proc_getattr, + .pc_decode = nfs3svc_decode_fhandleargs, + .pc_encode = nfs3svc_encode_attrstatres, + .pc_release = nfs3svc_release_fhandle, .pc_argsize = sizeof(struct nfsd3_fhandleargs), .pc_ressize = sizeof(struct nfsd3_attrstatres), .pc_cachetype = RC_NOCACHE, .pc_xdrressize = ST+AT, }, [NFS3PROC_SETATTR] = { - .pc_func = (svc_procfunc) nfsd3_proc_setattr, - .pc_decode = (kxdrproc_t) nfs3svc_decode_sattrargs, - .pc_encode = (kxdrproc_t) nfs3svc_encode_wccstatres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, + .pc_func = nfsd3_proc_setattr, + .pc_decode = nfs3svc_decode_sattrargs, + .pc_encode = nfs3svc_encode_wccstatres, + .pc_release = nfs3svc_release_fhandle, .pc_argsize = sizeof(struct nfsd3_sattrargs), .pc_ressize = sizeof(struct nfsd3_wccstatres), .pc_cachetype = RC_REPLBUFF, .pc_xdrressize = ST+WC, }, [NFS3PROC_LOOKUP] = { - .pc_func = (svc_procfunc) nfsd3_proc_lookup, - .pc_decode = (kxdrproc_t) nfs3svc_decode_diropargs, - .pc_encode = (kxdrproc_t) nfs3svc_encode_diropres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle2, + .pc_func = nfsd3_proc_lookup, + .pc_decode = nfs3svc_decode_diropargs, + .pc_encode = nfs3svc_encode_diropres, + .pc_release = nfs3svc_release_fhandle2, .pc_argsize = sizeof(struct nfsd3_diropargs), .pc_ressize = sizeof(struct nfsd3_diropres), .pc_cachetype = RC_NOCACHE, .pc_xdrressize = ST+FH+pAT+pAT, }, [NFS3PROC_ACCESS] = { - .pc_func = (svc_procfunc) nfsd3_proc_access, - .pc_decode = (kxdrproc_t) nfs3svc_decode_accessargs, - .pc_encode = (kxdrproc_t) nfs3svc_encode_accessres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, + .pc_func = nfsd3_proc_access, + .pc_decode = nfs3svc_decode_accessargs, + .pc_encode = nfs3svc_encode_accessres, + .pc_release = nfs3svc_release_fhandle, .pc_argsize = sizeof(struct nfsd3_accessargs), .pc_ressize = sizeof(struct nfsd3_accessres), .pc_cachetype = RC_NOCACHE, .pc_xdrressize = ST+pAT+1, }, [NFS3PROC_READLINK] = { - .pc_func = (svc_procfunc) nfsd3_proc_readlink, - .pc_decode = (kxdrproc_t) nfs3svc_decode_readlinkargs, - .pc_encode = (kxdrproc_t) nfs3svc_encode_readlinkres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, + .pc_func = nfsd3_proc_readlink, + .pc_decode = nfs3svc_decode_readlinkargs, + .pc_encode = nfs3svc_encode_readlinkres, + .pc_release = nfs3svc_release_fhandle, .pc_argsize = sizeof(struct nfsd3_readlinkargs), .pc_ressize = sizeof(struct nfsd3_readlinkres), .pc_cachetype = RC_NOCACHE, .pc_xdrressize = ST+pAT+1+NFS3_MAXPATHLEN/4, }, [NFS3PROC_READ] = { - .pc_func = (svc_procfunc) nfsd3_proc_read, - .pc_decode = (kxdrproc_t) nfs3svc_decode_readargs, - .pc_encode = (kxdrproc_t) nfs3svc_encode_readres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, + .pc_func = nfsd3_proc_read, + .pc_decode = nfs3svc_decode_readargs, + .pc_encode = nfs3svc_encode_readres, + .pc_release = nfs3svc_release_fhandle, .pc_argsize = sizeof(struct nfsd3_readargs), .pc_ressize = sizeof(struct nfsd3_readres), .pc_cachetype = RC_NOCACHE, .pc_xdrressize = ST+pAT+4+NFSSVC_MAXBLKSIZE/4, }, [NFS3PROC_WRITE] = { - .pc_func = (svc_procfunc) nfsd3_proc_write, - .pc_decode = (kxdrproc_t) nfs3svc_decode_writeargs, - .pc_encode = (kxdrproc_t) nfs3svc_encode_writeres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, + .pc_func = nfsd3_proc_write, + .pc_decode = nfs3svc_decode_writeargs, + .pc_encode = nfs3svc_encode_writeres, + .pc_release = nfs3svc_release_fhandle, .pc_argsize = sizeof(struct nfsd3_writeargs), .pc_ressize = sizeof(struct nfsd3_writeres), .pc_cachetype = RC_REPLBUFF, .pc_xdrressize = ST+WC+4, }, [NFS3PROC_CREATE] = { - .pc_func = (svc_procfunc) nfsd3_proc_create, - .pc_decode = (kxdrproc_t) nfs3svc_decode_createargs, - .pc_encode = (kxdrproc_t) nfs3svc_encode_createres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle2, + .pc_func = nfsd3_proc_create, + .pc_decode = nfs3svc_decode_createargs, + .pc_encode = nfs3svc_encode_createres, + .pc_release = nfs3svc_release_fhandle2, .pc_argsize = sizeof(struct nfsd3_createargs), .pc_ressize = sizeof(struct nfsd3_createres), .pc_cachetype = RC_REPLBUFF, .pc_xdrressize = ST+(1+FH+pAT)+WC, }, [NFS3PROC_MKDIR] = { - .pc_func = (svc_procfunc) nfsd3_proc_mkdir, - .pc_decode = (kxdrproc_t) nfs3svc_decode_mkdirargs, - .pc_encode = (kxdrproc_t) nfs3svc_encode_createres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle2, + .pc_func = nfsd3_proc_mkdir, + .pc_decode = nfs3svc_decode_mkdirargs, + .pc_encode = nfs3svc_encode_createres, + .pc_release = nfs3svc_release_fhandle2, .pc_argsize = sizeof(struct nfsd3_mkdirargs), .pc_ressize = sizeof(struct nfsd3_createres), .pc_cachetype = RC_REPLBUFF, .pc_xdrressize = ST+(1+FH+pAT)+WC, }, [NFS3PROC_SYMLINK] = { - .pc_func = (svc_procfunc) nfsd3_proc_symlink, - .pc_decode = (kxdrproc_t) nfs3svc_decode_symlinkargs, - .pc_encode = (kxdrproc_t) nfs3svc_encode_createres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle2, + .pc_func = nfsd3_proc_symlink, + .pc_decode = nfs3svc_decode_symlinkargs, + .pc_encode = nfs3svc_encode_createres, + .pc_release = nfs3svc_release_fhandle2, .pc_argsize = sizeof(struct nfsd3_symlinkargs), .pc_ressize = sizeof(struct nfsd3_createres), .pc_cachetype = RC_REPLBUFF, .pc_xdrressize = ST+(1+FH+pAT)+WC, }, [NFS3PROC_MKNOD] = { - .pc_func = (svc_procfunc) nfsd3_proc_mknod, - .pc_decode = (kxdrproc_t) nfs3svc_decode_mknodargs, - .pc_encode = (kxdrproc_t) nfs3svc_encode_createres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle2, + .pc_func = nfsd3_proc_mknod, + .pc_decode = nfs3svc_decode_mknodargs, + .pc_encode = nfs3svc_encode_createres, + .pc_release = nfs3svc_release_fhandle2, .pc_argsize = sizeof(struct nfsd3_mknodargs), .pc_ressize = sizeof(struct nfsd3_createres), .pc_cachetype = RC_REPLBUFF, .pc_xdrressize = ST+(1+FH+pAT)+WC, }, [NFS3PROC_REMOVE] = { - .pc_func = (svc_procfunc) nfsd3_proc_remove, - .pc_decode = (kxdrproc_t) nfs3svc_decode_diropargs, - .pc_encode = (kxdrproc_t) nfs3svc_encode_wccstatres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, + .pc_func = nfsd3_proc_remove, + .pc_decode = nfs3svc_decode_diropargs, + .pc_encode = nfs3svc_encode_wccstatres, + .pc_release = nfs3svc_release_fhandle, .pc_argsize = sizeof(struct nfsd3_diropargs), .pc_ressize = sizeof(struct nfsd3_wccstatres), .pc_cachetype = RC_REPLBUFF, .pc_xdrressize = ST+WC, }, [NFS3PROC_RMDIR] = { - .pc_func = (svc_procfunc) nfsd3_proc_rmdir, - .pc_decode = (kxdrproc_t) nfs3svc_decode_diropargs, - .pc_encode = (kxdrproc_t) nfs3svc_encode_wccstatres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, + .pc_func = nfsd3_proc_rmdir, + .pc_decode = nfs3svc_decode_diropargs, + .pc_encode = nfs3svc_encode_wccstatres, + .pc_release = nfs3svc_release_fhandle, .pc_argsize = sizeof(struct nfsd3_diropargs), .pc_ressize = sizeof(struct nfsd3_wccstatres), .pc_cachetype = RC_REPLBUFF, .pc_xdrressize = ST+WC, }, [NFS3PROC_RENAME] = { - .pc_func = (svc_procfunc) nfsd3_proc_rename, - .pc_decode = (kxdrproc_t) nfs3svc_decode_renameargs, - .pc_encode = (kxdrproc_t) nfs3svc_encode_renameres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle2, + .pc_func = nfsd3_proc_rename, + .pc_decode = nfs3svc_decode_renameargs, + .pc_encode = nfs3svc_encode_renameres, + .pc_release = nfs3svc_release_fhandle2, .pc_argsize = sizeof(struct nfsd3_renameargs), .pc_ressize = sizeof(struct nfsd3_renameres), .pc_cachetype = RC_REPLBUFF, .pc_xdrressize = ST+WC+WC, }, [NFS3PROC_LINK] = { - .pc_func = (svc_procfunc) nfsd3_proc_link, - .pc_decode = (kxdrproc_t) nfs3svc_decode_linkargs, - .pc_encode = (kxdrproc_t) nfs3svc_encode_linkres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle2, + .pc_func = nfsd3_proc_link, + .pc_decode = nfs3svc_decode_linkargs, + .pc_encode = nfs3svc_encode_linkres, + .pc_release = nfs3svc_release_fhandle2, .pc_argsize = sizeof(struct nfsd3_linkargs), .pc_ressize = sizeof(struct nfsd3_linkres), .pc_cachetype = RC_REPLBUFF, .pc_xdrressize = ST+pAT+WC, }, [NFS3PROC_READDIR] = { - .pc_func = (svc_procfunc) nfsd3_proc_readdir, - .pc_decode = (kxdrproc_t) nfs3svc_decode_readdirargs, - .pc_encode = (kxdrproc_t) nfs3svc_encode_readdirres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, + .pc_func = nfsd3_proc_readdir, + .pc_decode = nfs3svc_decode_readdirargs, + .pc_encode = nfs3svc_encode_readdirres, + .pc_release = nfs3svc_release_fhandle, .pc_argsize = sizeof(struct nfsd3_readdirargs), .pc_ressize = sizeof(struct nfsd3_readdirres), .pc_cachetype = RC_NOCACHE, }, [NFS3PROC_READDIRPLUS] = { - .pc_func = (svc_procfunc) nfsd3_proc_readdirplus, - .pc_decode = (kxdrproc_t) nfs3svc_decode_readdirplusargs, - .pc_encode = (kxdrproc_t) nfs3svc_encode_readdirres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, + .pc_func = nfsd3_proc_readdirplus, + .pc_decode = nfs3svc_decode_readdirplusargs, + .pc_encode = nfs3svc_encode_readdirres, + .pc_release = nfs3svc_release_fhandle, .pc_argsize = sizeof(struct nfsd3_readdirplusargs), .pc_ressize = sizeof(struct nfsd3_readdirres), .pc_cachetype = RC_NOCACHE, }, [NFS3PROC_FSSTAT] = { - .pc_func = (svc_procfunc) nfsd3_proc_fsstat, - .pc_decode = (kxdrproc_t) nfs3svc_decode_fhandleargs, - .pc_encode = (kxdrproc_t) nfs3svc_encode_fsstatres, + .pc_func = nfsd3_proc_fsstat, + .pc_decode = nfs3svc_decode_fhandleargs, + .pc_encode = nfs3svc_encode_fsstatres, .pc_argsize = sizeof(struct nfsd3_fhandleargs), .pc_ressize = sizeof(struct nfsd3_fsstatres), .pc_cachetype = RC_NOCACHE, .pc_xdrressize = ST+pAT+2*6+1, }, [NFS3PROC_FSINFO] = { - .pc_func = (svc_procfunc) nfsd3_proc_fsinfo, - .pc_decode = (kxdrproc_t) nfs3svc_decode_fhandleargs, - .pc_encode = (kxdrproc_t) nfs3svc_encode_fsinfores, + .pc_func = nfsd3_proc_fsinfo, + .pc_decode = nfs3svc_decode_fhandleargs, + .pc_encode = nfs3svc_encode_fsinfores, .pc_argsize = sizeof(struct nfsd3_fhandleargs), .pc_ressize = sizeof(struct nfsd3_fsinfores), .pc_cachetype = RC_NOCACHE, .pc_xdrressize = ST+pAT+12, }, [NFS3PROC_PATHCONF] = { - .pc_func = (svc_procfunc) nfsd3_proc_pathconf, - .pc_decode = (kxdrproc_t) nfs3svc_decode_fhandleargs, - .pc_encode = (kxdrproc_t) nfs3svc_encode_pathconfres, + .pc_func = nfsd3_proc_pathconf, + .pc_decode = nfs3svc_decode_fhandleargs, + .pc_encode = nfs3svc_encode_pathconfres, .pc_argsize = sizeof(struct nfsd3_fhandleargs), .pc_ressize = sizeof(struct nfsd3_pathconfres), .pc_cachetype = RC_NOCACHE, .pc_xdrressize = ST+pAT+6, }, [NFS3PROC_COMMIT] = { - .pc_func = (svc_procfunc) nfsd3_proc_commit, - .pc_decode = (kxdrproc_t) nfs3svc_decode_commitargs, - .pc_encode = (kxdrproc_t) nfs3svc_encode_commitres, - .pc_release = (kxdrproc_t) nfs3svc_release_fhandle, + .pc_func = nfsd3_proc_commit, + .pc_decode = nfs3svc_decode_commitargs, + .pc_encode = nfs3svc_encode_commitres, + .pc_release = nfs3svc_release_fhandle, .pc_argsize = sizeof(struct nfsd3_commitargs), .pc_ressize = sizeof(struct nfsd3_commitres), .pc_cachetype = RC_NOCACHE, diff --git a/fs/nfsd/nfs3xdr.c b/fs/nfsd/nfs3xdr.c index dba2ff8..9ac9eba 100644 --- a/fs/nfsd/nfs3xdr.c +++ b/fs/nfsd/nfs3xdr.c @@ -273,8 +273,10 @@ void fill_post_wcc(struct svc_fh *fhp) * XDR decode functions */ int -nfs3svc_decode_fhandle(struct svc_rqst *rqstp, __be32 *p, struct nfsd_fhandle *args) +nfs3svc_decode_fhandle(void *rqstp, __be32 *p, void *_args) { + struct nfsd_fhandle *args = _args; + p = decode_fh(p, &args->fh); if (!p) return 0; @@ -282,9 +284,10 @@ nfs3svc_decode_fhandle(struct svc_rqst *rqstp, __be32 *p, struct nfsd_fhandle *a } int -nfs3svc_decode_sattrargs(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_sattrargs *args) +nfs3svc_decode_sattrargs(void *rqstp, __be32 *p, void *_args) { + struct nfsd3_sattrargs *args = _args; + p = decode_fh(p, &args->fh); if (!p) return 0; @@ -300,9 +303,10 @@ nfs3svc_decode_sattrargs(struct svc_rqst *rqstp, __be32 *p, } int -nfs3svc_decode_diropargs(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_diropargs *args) +nfs3svc_decode_diropargs(void *rqstp, __be32 *p, void *_args) { + struct nfsd3_diropargs *args = _args; + if (!(p = decode_fh(p, &args->fh)) || !(p = decode_filename(p, &args->name, &args->len))) return 0; @@ -311,9 +315,10 @@ nfs3svc_decode_diropargs(struct svc_rqst *rqstp, __be32 *p, } int -nfs3svc_decode_accessargs(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_accessargs *args) +nfs3svc_decode_accessargs(void *rqstp, __be32 *p, void *_args) { + struct nfsd3_accessargs *args = _args; + p = decode_fh(p, &args->fh); if (!p) return 0; @@ -323,9 +328,10 @@ nfs3svc_decode_accessargs(struct svc_rqst *rqstp, __be32 *p, } int -nfs3svc_decode_readargs(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_readargs *args) +nfs3svc_decode_readargs(void *_rqstp, __be32 *p, void *_args) { + struct svc_rqst *rqstp = _rqstp; + struct nfsd3_readargs *args = _args; unsigned int len; int v; u32 max_blocksize = svc_max_payload(rqstp); @@ -353,9 +359,10 @@ nfs3svc_decode_readargs(struct svc_rqst *rqstp, __be32 *p, } int -nfs3svc_decode_writeargs(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_writeargs *args) +nfs3svc_decode_writeargs(void *_rqstp, __be32 *p, void *_args) { + struct svc_rqst *rqstp = _rqstp; + struct nfsd3_writeargs *args = _args; unsigned int len, v, hdr, dlen; u32 max_blocksize = svc_max_payload(rqstp); struct kvec *head = rqstp->rq_arg.head; @@ -410,9 +417,11 @@ nfs3svc_decode_writeargs(struct svc_rqst *rqstp, __be32 *p, } int -nfs3svc_decode_createargs(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_createargs *args) +nfs3svc_decode_createargs(void *_rqstp, __be32 *p, void *_args) { + struct svc_rqst *rqstp = _rqstp; + struct nfsd3_createargs *args = _args; + if (!(p = decode_fh(p, &args->fh)) || !(p = decode_filename(p, &args->name, &args->len))) return 0; @@ -433,9 +442,10 @@ nfs3svc_decode_createargs(struct svc_rqst *rqstp, __be32 *p, return xdr_argsize_check(rqstp, p); } int -nfs3svc_decode_mkdirargs(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_createargs *args) +nfs3svc_decode_mkdirargs(void *rqstp, __be32 *p, void *_args) { + struct nfsd3_createargs *args = _args; + if (!(p = decode_fh(p, &args->fh)) || !(p = decode_filename(p, &args->name, &args->len))) return 0; @@ -445,9 +455,10 @@ nfs3svc_decode_mkdirargs(struct svc_rqst *rqstp, __be32 *p, } int -nfs3svc_decode_symlinkargs(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_symlinkargs *args) +nfs3svc_decode_symlinkargs(void *_rqstp, __be32 *p, void *_args) { + struct svc_rqst *rqstp = _rqstp; + struct nfsd3_symlinkargs *args = _args; unsigned int len, avail; char *old, *new; struct kvec *vec; @@ -495,9 +506,10 @@ nfs3svc_decode_symlinkargs(struct svc_rqst *rqstp, __be32 *p, } int -nfs3svc_decode_mknodargs(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_mknodargs *args) +nfs3svc_decode_mknodargs(void *rqstp, __be32 *p, void *_args) { + struct nfsd3_mknodargs *args = _args; + if (!(p = decode_fh(p, &args->fh)) || !(p = decode_filename(p, &args->name, &args->len))) return 0; @@ -517,9 +529,10 @@ nfs3svc_decode_mknodargs(struct svc_rqst *rqstp, __be32 *p, } int -nfs3svc_decode_renameargs(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_renameargs *args) +nfs3svc_decode_renameargs(void *rqstp, __be32 *p, void *_args) { + struct nfsd3_renameargs *args = _args; + if (!(p = decode_fh(p, &args->ffh)) || !(p = decode_filename(p, &args->fname, &args->flen)) || !(p = decode_fh(p, &args->tfh)) @@ -530,9 +543,11 @@ nfs3svc_decode_renameargs(struct svc_rqst *rqstp, __be32 *p, } int -nfs3svc_decode_readlinkargs(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_readlinkargs *args) +nfs3svc_decode_readlinkargs(void *_rqstp, __be32 *p, void *_args) { + struct svc_rqst *rqstp = _rqstp; + struct nfsd3_readlinkargs *args = _args; + p = decode_fh(p, &args->fh); if (!p) return 0; @@ -542,9 +557,10 @@ nfs3svc_decode_readlinkargs(struct svc_rqst *rqstp, __be32 *p, } int -nfs3svc_decode_linkargs(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_linkargs *args) +nfs3svc_decode_linkargs(void *rqstp, __be32 *p, void *_args) { + struct nfsd3_linkargs *args = _args; + if (!(p = decode_fh(p, &args->ffh)) || !(p = decode_fh(p, &args->tfh)) || !(p = decode_filename(p, &args->tname, &args->tlen))) @@ -554,9 +570,11 @@ nfs3svc_decode_linkargs(struct svc_rqst *rqstp, __be32 *p, } int -nfs3svc_decode_readdirargs(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_readdirargs *args) +nfs3svc_decode_readdirargs(void *_rqstp, __be32 *p, void *_args) { + struct svc_rqst *rqstp = _rqstp; + struct nfsd3_readdirargs *args = _args; + p = decode_fh(p, &args->fh); if (!p) return 0; @@ -571,9 +589,10 @@ nfs3svc_decode_readdirargs(struct svc_rqst *rqstp, __be32 *p, } int -nfs3svc_decode_readdirplusargs(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_readdirargs *args) +nfs3svc_decode_readdirplusargs(void *_rqstp, __be32 *p, void *_args) { + struct svc_rqst *rqstp = _rqstp; + struct nfsd3_readdirargs *args = _args; int len; u32 max_blocksize = svc_max_payload(rqstp); @@ -597,9 +616,10 @@ nfs3svc_decode_readdirplusargs(struct svc_rqst *rqstp, __be32 *p, } int -nfs3svc_decode_commitargs(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_commitargs *args) +nfs3svc_decode_commitargs(void *rqstp, __be32 *p, void *_args) { + struct nfsd3_commitargs *args = _args; + p = decode_fh(p, &args->fh); if (!p) return 0; @@ -617,16 +637,17 @@ nfs3svc_decode_commitargs(struct svc_rqst *rqstp, __be32 *p, * will work properly. */ int -nfs3svc_encode_voidres(struct svc_rqst *rqstp, __be32 *p, void *dummy) +nfs3svc_encode_voidres(void *rqstp, __be32 *p, void *dummy) { return xdr_ressize_check(rqstp, p); } /* GETATTR */ int -nfs3svc_encode_attrstat(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_attrstat *resp) +nfs3svc_encode_attrstat(void *rqstp, __be32 *p, void *_resp) { + struct nfsd3_attrstat *resp = _resp; + if (resp->status == 0) { lease_get_mtime(d_inode(resp->fh.fh_dentry), &resp->stat.mtime); @@ -637,18 +658,20 @@ nfs3svc_encode_attrstat(struct svc_rqst *rqstp, __be32 *p, /* SETATTR, REMOVE, RMDIR */ int -nfs3svc_encode_wccstat(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_attrstat *resp) +nfs3svc_encode_wccstat(void *rqstp, __be32 *p, void *_resp) { + struct nfsd3_attrstat *resp = _resp; + p = encode_wcc_data(rqstp, p, &resp->fh); return xdr_ressize_check(rqstp, p); } /* LOOKUP */ int -nfs3svc_encode_diropres(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_diropres *resp) +nfs3svc_encode_diropres(void *rqstp, __be32 *p, void *_resp) { + struct nfsd3_diropres *resp = _resp; + if (resp->status == 0) { p = encode_fh(p, &resp->fh); p = encode_post_op_attr(rqstp, p, &resp->fh); @@ -659,9 +682,10 @@ nfs3svc_encode_diropres(struct svc_rqst *rqstp, __be32 *p, /* ACCESS */ int -nfs3svc_encode_accessres(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_accessres *resp) +nfs3svc_encode_accessres(void *rqstp, __be32 *p, void *_resp) { + struct nfsd3_accessres *resp = _resp; + p = encode_post_op_attr(rqstp, p, &resp->fh); if (resp->status == 0) *p++ = htonl(resp->access); @@ -670,9 +694,11 @@ nfs3svc_encode_accessres(struct svc_rqst *rqstp, __be32 *p, /* READLINK */ int -nfs3svc_encode_readlinkres(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_readlinkres *resp) +nfs3svc_encode_readlinkres(void *_rqstp, __be32 *p, void *_resp) { + struct svc_rqst *rqstp = _rqstp; + struct nfsd3_readlinkres *resp = _resp; + p = encode_post_op_attr(rqstp, p, &resp->fh); if (resp->status == 0) { *p++ = htonl(resp->len); @@ -691,9 +717,11 @@ nfs3svc_encode_readlinkres(struct svc_rqst *rqstp, __be32 *p, /* READ */ int -nfs3svc_encode_readres(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_readres *resp) +nfs3svc_encode_readres(void *_rqstp, __be32 *p, void *_resp) { + struct svc_rqst *rqstp = _rqstp; + struct nfsd3_readres *resp = _resp; + p = encode_post_op_attr(rqstp, p, &resp->fh); if (resp->status == 0) { *p++ = htonl(resp->count); @@ -715,9 +743,10 @@ nfs3svc_encode_readres(struct svc_rqst *rqstp, __be32 *p, /* WRITE */ int -nfs3svc_encode_writeres(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_writeres *resp) +nfs3svc_encode_writeres(void *_rqstp, __be32 *p, void *_resp) { + struct svc_rqst *rqstp = _rqstp; + struct nfsd3_writeres *resp = _resp; struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); p = encode_wcc_data(rqstp, p, &resp->fh); @@ -732,9 +761,10 @@ nfs3svc_encode_writeres(struct svc_rqst *rqstp, __be32 *p, /* CREATE, MKDIR, SYMLINK, MKNOD */ int -nfs3svc_encode_createres(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_diropres *resp) +nfs3svc_encode_createres(void *rqstp, __be32 *p, void *_resp) { + struct nfsd3_diropres *resp = _resp; + if (resp->status == 0) { *p++ = xdr_one; p = encode_fh(p, &resp->fh); @@ -746,9 +776,10 @@ nfs3svc_encode_createres(struct svc_rqst *rqstp, __be32 *p, /* RENAME */ int -nfs3svc_encode_renameres(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_renameres *resp) +nfs3svc_encode_renameres(void *rqstp, __be32 *p, void *_resp) { + struct nfsd3_renameres *resp = _resp; + p = encode_wcc_data(rqstp, p, &resp->ffh); p = encode_wcc_data(rqstp, p, &resp->tfh); return xdr_ressize_check(rqstp, p); @@ -756,9 +787,10 @@ nfs3svc_encode_renameres(struct svc_rqst *rqstp, __be32 *p, /* LINK */ int -nfs3svc_encode_linkres(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_linkres *resp) +nfs3svc_encode_linkres(void *rqstp, __be32 *p, void *_resp) { + struct nfsd3_linkres *resp = _resp; + p = encode_post_op_attr(rqstp, p, &resp->fh); p = encode_wcc_data(rqstp, p, &resp->tfh); return xdr_ressize_check(rqstp, p); @@ -766,9 +798,11 @@ nfs3svc_encode_linkres(struct svc_rqst *rqstp, __be32 *p, /* READDIR */ int -nfs3svc_encode_readdirres(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_readdirres *resp) +nfs3svc_encode_readdirres(void *_rqstp, __be32 *p, void *_resp) { + struct svc_rqst *rqstp = _rqstp; + struct nfsd3_readdirres *resp = _resp; + p = encode_post_op_attr(rqstp, p, &resp->fh); if (resp->status == 0) { @@ -1016,9 +1050,9 @@ nfs3svc_encode_entry_plus(void *cd, const char *name, /* FSSTAT */ int -nfs3svc_encode_fsstatres(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_fsstatres *resp) +nfs3svc_encode_fsstatres(void *rqstp, __be32 *p, void *_resp) { + struct nfsd3_fsstatres *resp = _resp; struct kstatfs *s = &resp->stats; u64 bs = s->f_bsize; @@ -1038,9 +1072,10 @@ nfs3svc_encode_fsstatres(struct svc_rqst *rqstp, __be32 *p, /* FSINFO */ int -nfs3svc_encode_fsinfores(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_fsinfores *resp) +nfs3svc_encode_fsinfores(void *rqstp, __be32 *p, void *_resp) { + struct nfsd3_fsinfores *resp = _resp; + *p++ = xdr_zero; /* no post_op_attr */ if (resp->status == 0) { @@ -1062,9 +1097,10 @@ nfs3svc_encode_fsinfores(struct svc_rqst *rqstp, __be32 *p, /* PATHCONF */ int -nfs3svc_encode_pathconfres(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_pathconfres *resp) +nfs3svc_encode_pathconfres(void *rqstp, __be32 *p, void *_resp) { + struct nfsd3_pathconfres *resp = _resp; + *p++ = xdr_zero; /* no post_op_attr */ if (resp->status == 0) { @@ -1081,9 +1117,10 @@ nfs3svc_encode_pathconfres(struct svc_rqst *rqstp, __be32 *p, /* COMMIT */ int -nfs3svc_encode_commitres(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_commitres *resp) +nfs3svc_encode_commitres(void *_rqstp, __be32 *p, void *_resp) { + struct svc_rqst *rqstp = _rqstp; + struct nfsd3_commitres *resp = _resp; struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); p = encode_wcc_data(rqstp, p, &resp->fh); @@ -1099,17 +1136,19 @@ nfs3svc_encode_commitres(struct svc_rqst *rqstp, __be32 *p, * XDR release functions */ int -nfs3svc_release_fhandle(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_attrstat *resp) +nfs3svc_release_fhandle(void *rqstp, __be32 *p, void *_resp) { + struct nfsd3_attrstat *resp = _resp; + fh_put(&resp->fh); return 1; } int -nfs3svc_release_fhandle2(struct svc_rqst *rqstp, __be32 *p, - struct nfsd3_fhandle_pair *resp) +nfs3svc_release_fhandle2(void *rqstp, __be32 *p, void *_resp) { + struct nfsd3_fhandle_pair *resp = _resp; + fh_put(&resp->fh1); fh_put(&resp->fh2); return 1; diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c index 211dc2a..c8607c1 100644 --- a/fs/nfsd/nfs4callback.c +++ b/fs/nfsd/nfs4callback.c @@ -470,8 +470,7 @@ static int decode_cb_sequence4res(struct xdr_stream *xdr, /* * NB: Without this zero space reservation, callbacks over krb5p fail */ -static void nfs4_xdr_enc_cb_null(struct rpc_rqst *req, struct xdr_stream *xdr, - void *__unused) +static void nfs4_xdr_enc_cb_null(void *req, struct xdr_stream *xdr, void *__unused) { xdr_reserve_space(xdr, 0); } @@ -479,9 +478,9 @@ static void nfs4_xdr_enc_cb_null(struct rpc_rqst *req, struct xdr_stream *xdr, /* * 20.2. Operation 4: CB_RECALL - Recall a Delegation */ -static void nfs4_xdr_enc_cb_recall(struct rpc_rqst *req, struct xdr_stream *xdr, - const struct nfsd4_callback *cb) +static void nfs4_xdr_enc_cb_recall(void *req, struct xdr_stream *xdr, void *_cb) { + const struct nfsd4_callback *cb = _cb; const struct nfs4_delegation *dp = cb_to_delegation(cb); struct nfs4_cb_compound_hdr hdr = { .ident = cb->cb_clp->cl_cb_ident, @@ -504,8 +503,7 @@ static void nfs4_xdr_enc_cb_recall(struct rpc_rqst *req, struct xdr_stream *xdr, * Protocol". */ -static int nfs4_xdr_dec_cb_null(struct rpc_rqst *req, struct xdr_stream *xdr, - void *__unused) +static int nfs4_xdr_dec_cb_null(void *req, struct xdr_stream *xdr, void *__unused) { return 0; } @@ -513,10 +511,11 @@ static int nfs4_xdr_dec_cb_null(struct rpc_rqst *req, struct xdr_stream *xdr, /* * 20.2. Operation 4: CB_RECALL - Recall a Delegation */ -static int nfs4_xdr_dec_cb_recall(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_cb_recall(void *rqstp, struct xdr_stream *xdr, - struct nfsd4_callback *cb) + void *_cb) { + struct nfsd4_callback *cb = _cb; struct nfs4_cb_compound_hdr hdr; int status; @@ -586,10 +585,12 @@ static void encode_cb_layout4args(struct xdr_stream *xdr, hdr->nops++; } -static void nfs4_xdr_enc_cb_layout(struct rpc_rqst *req, +static void nfs4_xdr_enc_cb_layout(void *_req, struct xdr_stream *xdr, - const struct nfsd4_callback *cb) + void *_cb) { + struct rpc_rqst *req = _req; + const struct nfsd4_callback *cb = _cb; const struct nfs4_layout_stateid *ls = container_of(cb, struct nfs4_layout_stateid, ls_recall); struct nfs4_cb_compound_hdr hdr = { @@ -603,10 +604,12 @@ static void nfs4_xdr_enc_cb_layout(struct rpc_rqst *req, encode_cb_nops(&hdr); } -static int nfs4_xdr_dec_cb_layout(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_cb_layout(void *_rqstp, struct xdr_stream *xdr, - struct nfsd4_callback *cb) + void *_cb) { + struct rpc_rqst *rqstp = _rqstp; + struct nfsd4_callback *cb = _cb; struct nfs4_cb_compound_hdr hdr; int status; @@ -632,10 +635,12 @@ static void encode_stateowner(struct xdr_stream *xdr, struct nfs4_stateowner *so xdr_encode_opaque(p, so->so_owner.data, so->so_owner.len); } -static void nfs4_xdr_enc_cb_notify_lock(struct rpc_rqst *req, +static void nfs4_xdr_enc_cb_notify_lock(void *_req, struct xdr_stream *xdr, - const struct nfsd4_callback *cb) + void *_cb) { + struct rpc_rqst *req = _req; + const struct nfsd4_callback *cb = _cb; const struct nfsd4_blocked_lock *nbl = container_of(cb, struct nfsd4_blocked_lock, nbl_cb); struct nfs4_lockowner *lo = (struct nfs4_lockowner *)nbl->nbl_lock.fl_owner; @@ -660,10 +665,12 @@ static void nfs4_xdr_enc_cb_notify_lock(struct rpc_rqst *req, encode_cb_nops(&hdr); } -static int nfs4_xdr_dec_cb_notify_lock(struct rpc_rqst *rqstp, +static int nfs4_xdr_dec_cb_notify_lock(void *_rqstp, struct xdr_stream *xdr, - struct nfsd4_callback *cb) + void *_cb) { + struct rpc_rqst *rqstp = _rqstp; + struct nfsd4_callback *cb = _cb; struct nfs4_cb_compound_hdr hdr; int status; @@ -685,8 +692,8 @@ static int nfs4_xdr_dec_cb_notify_lock(struct rpc_rqst *rqstp, #define PROC(proc, call, argtype, restype) \ [NFSPROC4_CLNT_##proc] = { \ .p_proc = NFSPROC4_CB_##call, \ - .p_encode = (kxdreproc_t)nfs4_xdr_enc_##argtype, \ - .p_decode = (kxdrdproc_t)nfs4_xdr_dec_##restype, \ + .p_encode = nfs4_xdr_enc_##argtype, \ + .p_decode = nfs4_xdr_dec_##restype, \ .p_arglen = NFS4_enc_##argtype##_sz, \ .p_replen = NFS4_dec_##restype##_sz, \ .p_statidx = NFSPROC4_CB_##call, \ diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c index abb09b5..973ae5f 100644 --- a/fs/nfsd/nfs4proc.c +++ b/fs/nfsd/nfs4proc.c @@ -358,8 +358,9 @@ copy_clientid(clientid_t *clid, struct nfsd4_session *session) static __be32 nfsd4_open(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_open *open) + void *_open) { + struct nfsd4_open *open = _open; __be32 status; struct svc_fh *resfh = NULL; struct net *net = SVC_NET(rqstp); @@ -496,8 +497,10 @@ static __be32 nfsd4_open_omfg(struct svc_rqst *rqstp, struct nfsd4_compound_stat */ static __be32 nfsd4_getfh(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct svc_fh **getfh) + void *_getfh) { + struct svc_fh **getfh = (struct svc_fh **)_getfh; + if (!cstate->current_fh.fh_dentry) return nfserr_nofilehandle; @@ -507,8 +510,10 @@ nfsd4_getfh(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, static __be32 nfsd4_putfh(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_putfh *putfh) + void *_putfh) { + struct nfsd4_putfh *putfh = _putfh; + fh_put(&cstate->current_fh); cstate->current_fh.fh_handle.fh_size = putfh->pf_fhlen; memcpy(&cstate->current_fh.fh_handle.fh_base, putfh->pf_fhval, @@ -562,8 +567,10 @@ nfsd4_savefh(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, */ static __be32 nfsd4_access(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_access *access) + void *_access) { + struct nfsd4_access *access = _access; + if (access->ac_req_access & ~NFS3_ACCESS_FULL) return nfserr_inval; @@ -588,8 +595,10 @@ static void gen_boot_verifier(nfs4_verifier *verifier, struct net *net) static __be32 nfsd4_commit(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_commit *commit) + void *_commit) { + struct nfsd4_commit *commit = _commit; + gen_boot_verifier(&commit->co_verf, SVC_NET(rqstp)); return nfsd_commit(rqstp, &cstate->current_fh, commit->co_offset, commit->co_count); @@ -597,8 +606,9 @@ nfsd4_commit(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, static __be32 nfsd4_create(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_create *create) + void *_create) { + struct nfsd4_create *create = _create; struct svc_fh resfh; __be32 status; dev_t rdev; @@ -684,8 +694,9 @@ nfsd4_create(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, static __be32 nfsd4_getattr(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_getattr *getattr) + void *_getattr) { + struct nfsd4_getattr *getattr = _getattr; __be32 status; status = fh_verify(rqstp, &cstate->current_fh, 0, NFSD_MAY_NOP); @@ -705,8 +716,9 @@ nfsd4_getattr(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, static __be32 nfsd4_link(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_link *link) + void *_link) { + struct nfsd4_link *link = _link; __be32 status = nfserr_nofilehandle; if (!cstate->save_fh.fh_dentry) @@ -744,8 +756,9 @@ nfsd4_lookupp(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, static __be32 nfsd4_lookup(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_lookup *lookup) + void *_lookup) { + struct nfsd4_lookup *lookup = _lookup; return nfsd_lookup(rqstp, &cstate->current_fh, lookup->lo_name, lookup->lo_len, &cstate->current_fh); @@ -753,8 +766,9 @@ nfsd4_lookup(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, static __be32 nfsd4_read(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_read *read) + void *_read) { + struct nfsd4_read *read = _read; __be32 status; read->rd_filp = NULL; @@ -789,8 +803,9 @@ nfsd4_read(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, static __be32 nfsd4_readdir(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_readdir *readdir) + void *_readdir) { + struct nfsd4_readdir *readdir = _readdir; u64 cookie = readdir->rd_cookie; static const nfs4_verifier zeroverf; @@ -814,8 +829,10 @@ nfsd4_readdir(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, static __be32 nfsd4_readlink(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_readlink *readlink) + void *_readlink) { + struct nfsd4_readlink *readlink = _readlink; + readlink->rl_rqstp = rqstp; readlink->rl_fhp = &cstate->current_fh; return nfs_ok; @@ -823,8 +840,9 @@ nfsd4_readlink(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, static __be32 nfsd4_remove(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_remove *remove) + void *_remove) { + struct nfsd4_remove *remove = _remove; __be32 status; if (opens_in_grace(SVC_NET(rqstp))) @@ -840,8 +858,9 @@ nfsd4_remove(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, static __be32 nfsd4_rename(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_rename *rename) + void *_rename) { + struct nfsd4_rename *rename = _rename; __be32 status = nfserr_nofilehandle; if (!cstate->save_fh.fh_dentry) @@ -861,8 +880,9 @@ nfsd4_rename(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, static __be32 nfsd4_secinfo(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_secinfo *secinfo) + void *_secinfo) { + struct nfsd4_secinfo *secinfo = _secinfo; struct svc_export *exp; struct dentry *dentry; __be32 err; @@ -890,8 +910,9 @@ nfsd4_secinfo(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, static __be32 nfsd4_secinfo_no_name(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_secinfo_no_name *sin) + void *_sin) { + struct nfsd4_secinfo_no_name *sin = _sin; __be32 err; switch (sin->sin_style) { @@ -913,8 +934,9 @@ nfsd4_secinfo_no_name(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstat static __be32 nfsd4_setattr(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_setattr *setattr) + void *_setattr) { + struct nfsd4_setattr *setattr = _setattr; __be32 status = nfs_ok; int err; @@ -974,8 +996,9 @@ static int fill_in_write_vector(struct kvec *vec, struct nfsd4_write *write) static __be32 nfsd4_write(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_write *write) + void *_write) { + struct nfsd4_write *write = _write; stateid_t *stateid = &write->wr_stateid; struct file *filp = NULL; __be32 status = nfs_ok; @@ -1048,8 +1071,9 @@ nfsd4_verify_copy(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, static __be32 nfsd4_clone(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_clone *clone) + void *_clone) { + struct nfsd4_clone *clone = _clone; struct file *src, *dst; __be32 status; @@ -1069,8 +1093,9 @@ nfsd4_clone(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, static __be32 nfsd4_copy(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_copy *copy) + void *_copy) { + struct nfsd4_copy *copy = _copy; struct file *src, *dst; __be32 status; ssize_t bytes; @@ -1125,23 +1150,28 @@ nfsd4_fallocate(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, static __be32 nfsd4_allocate(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_fallocate *fallocate) + void *_fallocate) { + struct nfsd4_fallocate *fallocate = _fallocate; + return nfsd4_fallocate(rqstp, cstate, fallocate, 0); } static __be32 nfsd4_deallocate(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_fallocate *fallocate) + void *_fallocate) { + struct nfsd4_fallocate *fallocate = _fallocate; + return nfsd4_fallocate(rqstp, cstate, fallocate, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE); } static __be32 nfsd4_seek(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_seek *seek) + void *_seek) { + struct nfsd4_seek *seek = (struct nfsd4_seek *)_seek; int whence; __be32 status; struct file *file; @@ -1188,8 +1218,9 @@ nfsd4_seek(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, */ static __be32 _nfsd4_verify(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_verify *verify) + void *_verify) { + struct nfsd4_verify *verify = _verify; __be32 *buf, *p; int count; __be32 status; @@ -1246,8 +1277,9 @@ _nfsd4_verify(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, static __be32 nfsd4_nverify(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_verify *verify) + void *_verify) { + struct nfsd4_verify *verify = _verify; __be32 status; status = _nfsd4_verify(rqstp, cstate, verify); @@ -1256,8 +1288,9 @@ nfsd4_nverify(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, static __be32 nfsd4_verify(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_verify *verify) + void *_verify) { + struct nfsd4_verify *verify = _verify; __be32 status; status = _nfsd4_verify(rqstp, cstate, verify); @@ -1285,8 +1318,9 @@ nfsd4_layout_verify(struct svc_export *exp, unsigned int layout_type) static __be32 nfsd4_getdeviceinfo(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_getdeviceinfo *gdp) + void *_gdp) { + struct nfsd4_getdeviceinfo *gdp = _gdp; const struct nfsd4_layout_ops *ops; struct nfsd4_deviceid_map *map; struct svc_export *exp; @@ -1331,8 +1365,9 @@ nfsd4_getdeviceinfo(struct svc_rqst *rqstp, static __be32 nfsd4_layoutget(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_layoutget *lgp) + void *_lgp) { + struct nfsd4_layoutget *lgp = _lgp; struct svc_fh *current_fh = &cstate->current_fh; const struct nfsd4_layout_ops *ops; struct nfs4_layout_stateid *ls; @@ -1411,8 +1446,9 @@ nfsd4_layoutget(struct svc_rqst *rqstp, static __be32 nfsd4_layoutcommit(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_layoutcommit *lcp) + void *_lcp) { + struct nfsd4_layoutcommit *lcp = _lcp; const struct nfsd4_layout_seg *seg = &lcp->lc_seg; struct svc_fh *current_fh = &cstate->current_fh; const struct nfsd4_layout_ops *ops; @@ -1475,8 +1511,9 @@ nfsd4_layoutcommit(struct svc_rqst *rqstp, static __be32 nfsd4_layoutreturn(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_layoutreturn *lrp) + void *_lrp) { + struct nfsd4_layoutreturn *lrp = _lrp; struct svc_fh *current_fh = &cstate->current_fh; __be32 nfserr; @@ -1578,7 +1615,7 @@ struct nfsd4_operation { nfsd4op_rsize op_rsize_bop; stateid_getter op_get_currentstateid; stateid_setter op_set_currentstateid; -}; +} __do_const; static struct nfsd4_operation nfsd4_ops[]; @@ -1686,10 +1723,10 @@ static void svcxdr_init_encode(struct svc_rqst *rqstp, * COMPOUND call. */ static __be32 -nfsd4_proc_compound(struct svc_rqst *rqstp, - struct nfsd4_compoundargs *args, - struct nfsd4_compoundres *resp) +nfsd4_proc_compound(struct svc_rqst *rqstp, void *_args, void *_resp) { + struct nfsd4_compoundargs *args = _args; + struct nfsd4_compoundres *resp = _resp; struct nfsd4_op *op; struct nfsd4_operation *opdesc; struct nfsd4_compound_state *cstate = &resp->cstate; @@ -2060,344 +2097,344 @@ static inline u32 nfsd4_layoutreturn_rsize(struct svc_rqst *rqstp, struct nfsd4_ static struct nfsd4_operation nfsd4_ops[] = { [OP_ACCESS] = { - .op_func = (nfsd4op_func)nfsd4_access, + .op_func = nfsd4_access, .op_name = "OP_ACCESS", }, [OP_CLOSE] = { - .op_func = (nfsd4op_func)nfsd4_close, + .op_func = nfsd4_close, .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_CLOSE", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_status_stateid_rsize, - .op_get_currentstateid = (stateid_getter)nfsd4_get_closestateid, - .op_set_currentstateid = (stateid_setter)nfsd4_set_closestateid, + .op_rsize_bop = nfsd4_status_stateid_rsize, + .op_get_currentstateid = nfsd4_get_closestateid, + .op_set_currentstateid = nfsd4_set_closestateid, }, [OP_COMMIT] = { - .op_func = (nfsd4op_func)nfsd4_commit, + .op_func = nfsd4_commit, .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_COMMIT", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_commit_rsize, + .op_rsize_bop = nfsd4_commit_rsize, }, [OP_CREATE] = { - .op_func = (nfsd4op_func)nfsd4_create, + .op_func = nfsd4_create, .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME | OP_CLEAR_STATEID, .op_name = "OP_CREATE", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_create_rsize, + .op_rsize_bop = nfsd4_create_rsize, }, [OP_DELEGRETURN] = { - .op_func = (nfsd4op_func)nfsd4_delegreturn, + .op_func = nfsd4_delegreturn, .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_DELEGRETURN", .op_rsize_bop = nfsd4_only_status_rsize, - .op_get_currentstateid = (stateid_getter)nfsd4_get_delegreturnstateid, + .op_get_currentstateid = nfsd4_get_delegreturnstateid, }, [OP_GETATTR] = { - .op_func = (nfsd4op_func)nfsd4_getattr, + .op_func = nfsd4_getattr, .op_flags = ALLOWED_ON_ABSENT_FS, .op_rsize_bop = nfsd4_getattr_rsize, .op_name = "OP_GETATTR", }, [OP_GETFH] = { - .op_func = (nfsd4op_func)nfsd4_getfh, + .op_func = nfsd4_getfh, .op_name = "OP_GETFH", }, [OP_LINK] = { - .op_func = (nfsd4op_func)nfsd4_link, + .op_func = nfsd4_link, .op_flags = ALLOWED_ON_ABSENT_FS | OP_MODIFIES_SOMETHING | OP_CACHEME, .op_name = "OP_LINK", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_link_rsize, + .op_rsize_bop = nfsd4_link_rsize, }, [OP_LOCK] = { - .op_func = (nfsd4op_func)nfsd4_lock, + .op_func = nfsd4_lock, .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_LOCK", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_lock_rsize, - .op_set_currentstateid = (stateid_setter)nfsd4_set_lockstateid, + .op_rsize_bop = nfsd4_lock_rsize, + .op_set_currentstateid = nfsd4_set_lockstateid, }, [OP_LOCKT] = { - .op_func = (nfsd4op_func)nfsd4_lockt, + .op_func = nfsd4_lockt, .op_name = "OP_LOCKT", }, [OP_LOCKU] = { - .op_func = (nfsd4op_func)nfsd4_locku, + .op_func = nfsd4_locku, .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_LOCKU", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_status_stateid_rsize, - .op_get_currentstateid = (stateid_getter)nfsd4_get_lockustateid, + .op_rsize_bop = nfsd4_status_stateid_rsize, + .op_get_currentstateid = nfsd4_get_lockustateid, }, [OP_LOOKUP] = { - .op_func = (nfsd4op_func)nfsd4_lookup, + .op_func = nfsd4_lookup, .op_flags = OP_HANDLES_WRONGSEC | OP_CLEAR_STATEID, .op_name = "OP_LOOKUP", }, [OP_LOOKUPP] = { - .op_func = (nfsd4op_func)nfsd4_lookupp, + .op_func = nfsd4_lookupp, .op_flags = OP_HANDLES_WRONGSEC | OP_CLEAR_STATEID, .op_name = "OP_LOOKUPP", }, [OP_NVERIFY] = { - .op_func = (nfsd4op_func)nfsd4_nverify, + .op_func = nfsd4_nverify, .op_name = "OP_NVERIFY", }, [OP_OPEN] = { - .op_func = (nfsd4op_func)nfsd4_open, + .op_func = nfsd4_open, .op_flags = OP_HANDLES_WRONGSEC | OP_MODIFIES_SOMETHING, .op_name = "OP_OPEN", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_open_rsize, - .op_set_currentstateid = (stateid_setter)nfsd4_set_openstateid, + .op_rsize_bop = nfsd4_open_rsize, + .op_set_currentstateid = nfsd4_set_openstateid, }, [OP_OPEN_CONFIRM] = { - .op_func = (nfsd4op_func)nfsd4_open_confirm, + .op_func = nfsd4_open_confirm, .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_OPEN_CONFIRM", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_status_stateid_rsize, + .op_rsize_bop = nfsd4_status_stateid_rsize, }, [OP_OPEN_DOWNGRADE] = { - .op_func = (nfsd4op_func)nfsd4_open_downgrade, + .op_func = nfsd4_open_downgrade, .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_OPEN_DOWNGRADE", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_status_stateid_rsize, - .op_get_currentstateid = (stateid_getter)nfsd4_get_opendowngradestateid, - .op_set_currentstateid = (stateid_setter)nfsd4_set_opendowngradestateid, + .op_rsize_bop = nfsd4_status_stateid_rsize, + .op_get_currentstateid = nfsd4_get_opendowngradestateid, + .op_set_currentstateid = nfsd4_set_opendowngradestateid, }, [OP_PUTFH] = { - .op_func = (nfsd4op_func)nfsd4_putfh, + .op_func = nfsd4_putfh, .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS | OP_IS_PUTFH_LIKE | OP_CLEAR_STATEID, .op_name = "OP_PUTFH", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_PUTPUBFH] = { - .op_func = (nfsd4op_func)nfsd4_putrootfh, + .op_func = nfsd4_putrootfh, .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS | OP_IS_PUTFH_LIKE | OP_CLEAR_STATEID, .op_name = "OP_PUTPUBFH", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_PUTROOTFH] = { - .op_func = (nfsd4op_func)nfsd4_putrootfh, + .op_func = nfsd4_putrootfh, .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS | OP_IS_PUTFH_LIKE | OP_CLEAR_STATEID, .op_name = "OP_PUTROOTFH", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_READ] = { - .op_func = (nfsd4op_func)nfsd4_read, + .op_func = nfsd4_read, .op_name = "OP_READ", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_read_rsize, - .op_get_currentstateid = (stateid_getter)nfsd4_get_readstateid, + .op_rsize_bop = nfsd4_read_rsize, + .op_get_currentstateid = nfsd4_get_readstateid, }, [OP_READDIR] = { - .op_func = (nfsd4op_func)nfsd4_readdir, + .op_func = nfsd4_readdir, .op_name = "OP_READDIR", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_readdir_rsize, + .op_rsize_bop = nfsd4_readdir_rsize, }, [OP_READLINK] = { - .op_func = (nfsd4op_func)nfsd4_readlink, + .op_func = nfsd4_readlink, .op_name = "OP_READLINK", }, [OP_REMOVE] = { - .op_func = (nfsd4op_func)nfsd4_remove, + .op_func = nfsd4_remove, .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME, .op_name = "OP_REMOVE", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_remove_rsize, + .op_rsize_bop = nfsd4_remove_rsize, }, [OP_RENAME] = { - .op_func = (nfsd4op_func)nfsd4_rename, + .op_func = nfsd4_rename, .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME, .op_name = "OP_RENAME", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_rename_rsize, + .op_rsize_bop = nfsd4_rename_rsize, }, [OP_RENEW] = { - .op_func = (nfsd4op_func)nfsd4_renew, + .op_func = nfsd4_renew, .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS | OP_MODIFIES_SOMETHING, .op_name = "OP_RENEW", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_RESTOREFH] = { - .op_func = (nfsd4op_func)nfsd4_restorefh, + .op_func = nfsd4_restorefh, .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS | OP_IS_PUTFH_LIKE | OP_MODIFIES_SOMETHING, .op_name = "OP_RESTOREFH", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_SAVEFH] = { - .op_func = (nfsd4op_func)nfsd4_savefh, + .op_func = nfsd4_savefh, .op_flags = OP_HANDLES_WRONGSEC | OP_MODIFIES_SOMETHING, .op_name = "OP_SAVEFH", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_SECINFO] = { - .op_func = (nfsd4op_func)nfsd4_secinfo, + .op_func = nfsd4_secinfo, .op_flags = OP_HANDLES_WRONGSEC, .op_name = "OP_SECINFO", }, [OP_SETATTR] = { - .op_func = (nfsd4op_func)nfsd4_setattr, + .op_func = nfsd4_setattr, .op_name = "OP_SETATTR", .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME, - .op_rsize_bop = (nfsd4op_rsize)nfsd4_setattr_rsize, - .op_get_currentstateid = (stateid_getter)nfsd4_get_setattrstateid, + .op_rsize_bop = nfsd4_setattr_rsize, + .op_get_currentstateid = nfsd4_get_setattrstateid, }, [OP_SETCLIENTID] = { - .op_func = (nfsd4op_func)nfsd4_setclientid, + .op_func = nfsd4_setclientid, .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS | OP_MODIFIES_SOMETHING | OP_CACHEME, .op_name = "OP_SETCLIENTID", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_setclientid_rsize, + .op_rsize_bop = nfsd4_setclientid_rsize, }, [OP_SETCLIENTID_CONFIRM] = { - .op_func = (nfsd4op_func)nfsd4_setclientid_confirm, + .op_func = nfsd4_setclientid_confirm, .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS | OP_MODIFIES_SOMETHING | OP_CACHEME, .op_name = "OP_SETCLIENTID_CONFIRM", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_VERIFY] = { - .op_func = (nfsd4op_func)nfsd4_verify, + .op_func = nfsd4_verify, .op_name = "OP_VERIFY", }, [OP_WRITE] = { - .op_func = (nfsd4op_func)nfsd4_write, + .op_func = nfsd4_write, .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME, .op_name = "OP_WRITE", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_write_rsize, - .op_get_currentstateid = (stateid_getter)nfsd4_get_writestateid, + .op_rsize_bop = nfsd4_write_rsize, + .op_get_currentstateid = nfsd4_get_writestateid, }, [OP_RELEASE_LOCKOWNER] = { - .op_func = (nfsd4op_func)nfsd4_release_lockowner, + .op_func = nfsd4_release_lockowner, .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS | OP_MODIFIES_SOMETHING, .op_name = "OP_RELEASE_LOCKOWNER", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, /* NFSv4.1 operations */ [OP_EXCHANGE_ID] = { - .op_func = (nfsd4op_func)nfsd4_exchange_id, + .op_func = nfsd4_exchange_id, .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_AS_FIRST_OP | OP_MODIFIES_SOMETHING, .op_name = "OP_EXCHANGE_ID", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_exchange_id_rsize, + .op_rsize_bop = nfsd4_exchange_id_rsize, }, [OP_BACKCHANNEL_CTL] = { - .op_func = (nfsd4op_func)nfsd4_backchannel_ctl, + .op_func = nfsd4_backchannel_ctl, .op_flags = ALLOWED_WITHOUT_FH | OP_MODIFIES_SOMETHING, .op_name = "OP_BACKCHANNEL_CTL", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_BIND_CONN_TO_SESSION] = { - .op_func = (nfsd4op_func)nfsd4_bind_conn_to_session, + .op_func = nfsd4_bind_conn_to_session, .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_AS_FIRST_OP | OP_MODIFIES_SOMETHING, .op_name = "OP_BIND_CONN_TO_SESSION", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_bind_conn_to_session_rsize, + .op_rsize_bop = nfsd4_bind_conn_to_session_rsize, }, [OP_CREATE_SESSION] = { - .op_func = (nfsd4op_func)nfsd4_create_session, + .op_func = nfsd4_create_session, .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_AS_FIRST_OP | OP_MODIFIES_SOMETHING, .op_name = "OP_CREATE_SESSION", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_create_session_rsize, + .op_rsize_bop = nfsd4_create_session_rsize, }, [OP_DESTROY_SESSION] = { - .op_func = (nfsd4op_func)nfsd4_destroy_session, + .op_func = nfsd4_destroy_session, .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_AS_FIRST_OP | OP_MODIFIES_SOMETHING, .op_name = "OP_DESTROY_SESSION", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_SEQUENCE] = { - .op_func = (nfsd4op_func)nfsd4_sequence, + .op_func = nfsd4_sequence, .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_AS_FIRST_OP, .op_name = "OP_SEQUENCE", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_sequence_rsize, + .op_rsize_bop = nfsd4_sequence_rsize, }, [OP_DESTROY_CLIENTID] = { - .op_func = (nfsd4op_func)nfsd4_destroy_clientid, + .op_func = nfsd4_destroy_clientid, .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_AS_FIRST_OP | OP_MODIFIES_SOMETHING, .op_name = "OP_DESTROY_CLIENTID", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_RECLAIM_COMPLETE] = { - .op_func = (nfsd4op_func)nfsd4_reclaim_complete, + .op_func = nfsd4_reclaim_complete, .op_flags = ALLOWED_WITHOUT_FH | OP_MODIFIES_SOMETHING, .op_name = "OP_RECLAIM_COMPLETE", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_SECINFO_NO_NAME] = { - .op_func = (nfsd4op_func)nfsd4_secinfo_no_name, + .op_func = nfsd4_secinfo_no_name, .op_flags = OP_HANDLES_WRONGSEC, .op_name = "OP_SECINFO_NO_NAME", }, [OP_TEST_STATEID] = { - .op_func = (nfsd4op_func)nfsd4_test_stateid, + .op_func = nfsd4_test_stateid, .op_flags = ALLOWED_WITHOUT_FH, .op_name = "OP_TEST_STATEID", }, [OP_FREE_STATEID] = { - .op_func = (nfsd4op_func)nfsd4_free_stateid, + .op_func = nfsd4_free_stateid, .op_flags = ALLOWED_WITHOUT_FH | OP_MODIFIES_SOMETHING, .op_name = "OP_FREE_STATEID", - .op_get_currentstateid = (stateid_getter)nfsd4_get_freestateid, - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_get_currentstateid = nfsd4_get_freestateid, + .op_rsize_bop = nfsd4_only_status_rsize, }, #ifdef CONFIG_NFSD_PNFS [OP_GETDEVICEINFO] = { - .op_func = (nfsd4op_func)nfsd4_getdeviceinfo, + .op_func = nfsd4_getdeviceinfo, .op_flags = ALLOWED_WITHOUT_FH, .op_name = "OP_GETDEVICEINFO", }, [OP_LAYOUTGET] = { - .op_func = (nfsd4op_func)nfsd4_layoutget, + .op_func = nfsd4_layoutget, .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_LAYOUTGET", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_layoutget_rsize, + .op_rsize_bop = nfsd4_layoutget_rsize, }, [OP_LAYOUTCOMMIT] = { - .op_func = (nfsd4op_func)nfsd4_layoutcommit, + .op_func = nfsd4_layoutcommit, .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_LAYOUTCOMMIT", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_layoutcommit_rsize, + .op_rsize_bop = nfsd4_layoutcommit_rsize, }, [OP_LAYOUTRETURN] = { - .op_func = (nfsd4op_func)nfsd4_layoutreturn, + .op_func = nfsd4_layoutreturn, .op_flags = OP_MODIFIES_SOMETHING, .op_name = "OP_LAYOUTRETURN", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_layoutreturn_rsize, + .op_rsize_bop = nfsd4_layoutreturn_rsize, }, #endif /* CONFIG_NFSD_PNFS */ /* NFSv4.2 operations */ [OP_ALLOCATE] = { - .op_func = (nfsd4op_func)nfsd4_allocate, + .op_func = nfsd4_allocate, .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME, .op_name = "OP_ALLOCATE", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_DEALLOCATE] = { - .op_func = (nfsd4op_func)nfsd4_deallocate, + .op_func = nfsd4_deallocate, .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME, .op_name = "OP_DEALLOCATE", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_CLONE] = { - .op_func = (nfsd4op_func)nfsd4_clone, + .op_func = nfsd4_clone, .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME, .op_name = "OP_CLONE", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, + .op_rsize_bop = nfsd4_only_status_rsize, }, [OP_COPY] = { - .op_func = (nfsd4op_func)nfsd4_copy, + .op_func = nfsd4_copy, .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME, .op_name = "OP_COPY", - .op_rsize_bop = (nfsd4op_rsize)nfsd4_copy_rsize, + .op_rsize_bop = nfsd4_copy_rsize, }, [OP_SEEK] = { - .op_func = (nfsd4op_func)nfsd4_seek, + .op_func = nfsd4_seek, .op_name = "OP_SEEK", }, }; @@ -2474,17 +2511,17 @@ struct nfsd4_voidargs { int dummy; }; static struct svc_procedure nfsd_procedures4[2] = { [NFSPROC4_NULL] = { - .pc_func = (svc_procfunc) nfsd4_proc_null, - .pc_encode = (kxdrproc_t) nfs4svc_encode_voidres, + .pc_func = nfsd4_proc_null, + .pc_encode = nfs4svc_encode_voidres, .pc_argsize = sizeof(struct nfsd4_voidargs), .pc_ressize = sizeof(struct nfsd4_voidres), .pc_cachetype = RC_NOCACHE, .pc_xdrressize = 1, }, [NFSPROC4_COMPOUND] = { - .pc_func = (svc_procfunc) nfsd4_proc_compound, - .pc_decode = (kxdrproc_t) nfs4svc_decode_compoundargs, - .pc_encode = (kxdrproc_t) nfs4svc_encode_compoundres, + .pc_func = nfsd4_proc_compound, + .pc_decode = nfs4svc_decode_compoundargs, + .pc_encode = nfs4svc_encode_compoundres, .pc_argsize = sizeof(struct nfsd4_compoundargs), .pc_ressize = sizeof(struct nfsd4_compoundres), .pc_release = nfsd4_release_compoundargs, diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c index a0dee8a..b6021ad 100644 --- a/fs/nfsd/nfs4state.c +++ b/fs/nfsd/nfs4state.c @@ -2417,8 +2417,9 @@ static bool client_has_state(struct nfs4_client *clp) __be32 nfsd4_exchange_id(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_exchange_id *exid) + void *_exid) { + struct nfsd4_exchange_id *exid = _exid; struct nfs4_client *conf, *new; struct nfs4_client *unconf = NULL; __be32 status; @@ -2712,8 +2713,9 @@ static __be32 nfsd4_check_cb_sec(struct nfsd4_cb_sec *cbs) __be32 nfsd4_create_session(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_create_session *cr_ses) + void *_cr_ses) { + struct nfsd4_create_session *cr_ses = _cr_ses; struct sockaddr *sa = svc_addr(rqstp); struct nfs4_client *conf, *unconf; struct nfs4_client *old = NULL; @@ -2837,8 +2839,9 @@ static __be32 nfsd4_map_bcts_dir(u32 *dir) return nfserr_inval; } -__be32 nfsd4_backchannel_ctl(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, struct nfsd4_backchannel_ctl *bc) +__be32 nfsd4_backchannel_ctl(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, void *_bc) { + struct nfsd4_backchannel_ctl *bc = _bc; struct nfsd4_session *session = cstate->session; struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); __be32 status; @@ -2858,8 +2861,9 @@ __be32 nfsd4_backchannel_ctl(struct svc_rqst *rqstp, struct nfsd4_compound_state __be32 nfsd4_bind_conn_to_session(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_bind_conn_to_session *bcts) + void *_bcts) { + struct nfsd4_bind_conn_to_session *bcts = _bcts; __be32 status; struct nfsd4_conn *conn; struct nfsd4_session *session; @@ -2901,8 +2905,9 @@ static bool nfsd4_compound_in_session(struct nfsd4_session *session, struct nfs4 __be32 nfsd4_destroy_session(struct svc_rqst *r, struct nfsd4_compound_state *cstate, - struct nfsd4_destroy_session *sessionid) + void *_sessionid) { + struct nfsd4_destroy_session *sessionid = _sessionid; struct nfsd4_session *ses; __be32 status; int ref_held_by_me = 0; @@ -2998,8 +3003,9 @@ static bool nfsd4_request_too_big(struct svc_rqst *rqstp, __be32 nfsd4_sequence(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_sequence *seq) + void *_seq) { + struct nfsd4_sequence *seq = _seq; struct nfsd4_compoundres *resp = rqstp->rq_resp; struct xdr_stream *xdr = &resp->xdr; struct nfsd4_session *session; @@ -3133,8 +3139,9 @@ nfsd4_sequence_done(struct nfsd4_compoundres *resp) } __be32 -nfsd4_destroy_clientid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, struct nfsd4_destroy_clientid *dc) +nfsd4_destroy_clientid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, void *_dc) { + struct nfsd4_destroy_clientid *dc = _dc; struct nfs4_client *conf, *unconf; struct nfs4_client *clp = NULL; __be32 status = 0; @@ -3174,8 +3181,9 @@ nfsd4_destroy_clientid(struct svc_rqst *rqstp, struct nfsd4_compound_state *csta } __be32 -nfsd4_reclaim_complete(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, struct nfsd4_reclaim_complete *rc) +nfsd4_reclaim_complete(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, void *_rc) { + struct nfsd4_reclaim_complete *rc = _rc; __be32 status = 0; if (rc->rca_one_fs) { @@ -3212,8 +3220,9 @@ nfsd4_reclaim_complete(struct svc_rqst *rqstp, struct nfsd4_compound_state *csta __be32 nfsd4_setclientid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_setclientid *setclid) + void *_setclid) { + struct nfsd4_setclientid *setclid = _setclid; struct xdr_netobj clname = setclid->se_name; nfs4_verifier clverifier = setclid->se_verf; struct nfs4_client *conf, *new; @@ -3271,8 +3280,9 @@ nfsd4_setclientid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, __be32 nfsd4_setclientid_confirm(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_setclientid_confirm *setclientid_confirm) + void *_setclientid_confirm) { + struct nfsd4_setclientid_confirm *setclientid_confirm = _setclientid_confirm; struct nfs4_client *conf, *unconf; struct nfs4_client *old = NULL; nfs4_verifier confirm = setclientid_confirm->sc_confirm; @@ -4519,8 +4529,9 @@ void nfsd4_cleanup_open_state(struct nfsd4_compound_state *cstate, __be32 nfsd4_renew(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - clientid_t *clid) + void *_clid) { + clientid_t *clid = _clid; struct nfs4_client *clp; __be32 status; struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); @@ -5006,8 +5017,9 @@ nfs4_preprocess_stateid_op(struct svc_rqst *rqstp, */ __be32 nfsd4_test_stateid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_test_stateid *test_stateid) + void *_test_stateid) { + struct nfsd4_test_stateid *test_stateid = _test_stateid; struct nfsd4_test_stateid_id *stateid; struct nfs4_client *cl = cstate->session->se_client; @@ -5046,8 +5058,9 @@ nfsd4_free_lock_stateid(stateid_t *stateid, struct nfs4_stid *s) __be32 nfsd4_free_stateid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_free_stateid *free_stateid) + void *_free_stateid) { + struct nfsd4_free_stateid *free_stateid = _free_stateid; stateid_t *stateid = &free_stateid->fr_stateid; struct nfs4_stid *s; struct nfs4_delegation *dp; @@ -5175,8 +5188,9 @@ static __be32 nfs4_preprocess_confirmed_seqid_op(struct nfsd4_compound_state *cs __be32 nfsd4_open_confirm(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_open_confirm *oc) + void *_oc) { + struct nfsd4_open_confirm *oc = _oc; __be32 status; struct nfs4_openowner *oo; struct nfs4_ol_stateid *stp; @@ -5244,8 +5258,9 @@ static inline void nfs4_stateid_downgrade(struct nfs4_ol_stateid *stp, u32 to_ac __be32 nfsd4_open_downgrade(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_open_downgrade *od) + void *_od) { + struct nfsd4_open_downgrade *od = _od; __be32 status; struct nfs4_ol_stateid *stp; struct nfsd_net *nn = net_generic(SVC_NET(rqstp), nfsd_net_id); @@ -5313,8 +5328,9 @@ static void nfsd4_close_open_stateid(struct nfs4_ol_stateid *s) */ __be32 nfsd4_close(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_close *close) + void *_close) { + struct nfsd4_close *close = _close; __be32 status; struct nfs4_ol_stateid *stp; struct net *net = SVC_NET(rqstp); @@ -5343,8 +5359,9 @@ nfsd4_close(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, __be32 nfsd4_delegreturn(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_delegreturn *dr) + void *_dr) { + struct nfsd4_delegreturn *dr = _dr; struct nfs4_delegation *dp; stateid_t *stateid = &dr->dr_stateid; struct nfs4_stid *s; @@ -5719,8 +5736,9 @@ lookup_or_create_lock_state(struct nfsd4_compound_state *cstate, */ __be32 nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_lock *lock) + void *_lock) { + struct nfsd4_lock *lock = _lock; struct nfs4_openowner *open_sop = NULL; struct nfs4_lockowner *lock_sop = NULL; struct nfs4_ol_stateid *lock_stp = NULL; @@ -5952,8 +5970,9 @@ static __be32 nfsd_test_lock(struct svc_rqst *rqstp, struct svc_fh *fhp, struct */ __be32 nfsd4_lockt(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_lockt *lockt) + void *_lockt) { + struct nfsd4_lockt *lockt = _lockt; struct file_lock *file_lock = NULL; struct nfs4_lockowner *lo = NULL; __be32 status; @@ -6025,8 +6044,9 @@ nfsd4_lockt(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, __be32 nfsd4_locku(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_locku *locku) + void *_locku) { + struct nfsd4_locku *locku = _locku; struct nfs4_ol_stateid *stp; struct file *filp = NULL; struct file_lock *file_lock = NULL; @@ -6132,8 +6152,9 @@ check_for_locks(struct nfs4_file *fp, struct nfs4_lockowner *lowner) __be32 nfsd4_release_lockowner(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate, - struct nfsd4_release_lockowner *rlockowner) + void *_rlockowner) { + struct nfsd4_release_lockowner *rlockowner = _rlockowner; clientid_t *clid = &rlockowner->rl_clientid; struct nfs4_stateowner *sop; struct nfs4_lockowner *lo = NULL; @@ -7114,26 +7135,34 @@ clear_current_stateid(struct nfsd4_compound_state *cstate) * functions to set current state id */ void -nfsd4_set_opendowngradestateid(struct nfsd4_compound_state *cstate, struct nfsd4_open_downgrade *odp) +nfsd4_set_opendowngradestateid(struct nfsd4_compound_state *cstate, void *_odp) { + struct nfsd4_open_downgrade *odp = _odp; + put_stateid(cstate, &odp->od_stateid); } void -nfsd4_set_openstateid(struct nfsd4_compound_state *cstate, struct nfsd4_open *open) +nfsd4_set_openstateid(struct nfsd4_compound_state *cstate, void *_open) { + struct nfsd4_open *open = _open; + put_stateid(cstate, &open->op_stateid); } void -nfsd4_set_closestateid(struct nfsd4_compound_state *cstate, struct nfsd4_close *close) +nfsd4_set_closestateid(struct nfsd4_compound_state *cstate, void *_close) { + struct nfsd4_close *close = _close; + put_stateid(cstate, &close->cl_stateid); } void -nfsd4_set_lockstateid(struct nfsd4_compound_state *cstate, struct nfsd4_lock *lock) +nfsd4_set_lockstateid(struct nfsd4_compound_state *cstate, void *_lock) { + struct nfsd4_lock *lock = _lock; + put_stateid(cstate, &lock->lk_resp_stateid); } @@ -7142,49 +7171,65 @@ nfsd4_set_lockstateid(struct nfsd4_compound_state *cstate, struct nfsd4_lock *lo */ void -nfsd4_get_opendowngradestateid(struct nfsd4_compound_state *cstate, struct nfsd4_open_downgrade *odp) +nfsd4_get_opendowngradestateid(struct nfsd4_compound_state *cstate, void *_odp) { + struct nfsd4_open_downgrade *odp = _odp; + get_stateid(cstate, &odp->od_stateid); } void -nfsd4_get_delegreturnstateid(struct nfsd4_compound_state *cstate, struct nfsd4_delegreturn *drp) +nfsd4_get_delegreturnstateid(struct nfsd4_compound_state *cstate, void *_drp) { + struct nfsd4_delegreturn *drp = _drp; + get_stateid(cstate, &drp->dr_stateid); } void -nfsd4_get_freestateid(struct nfsd4_compound_state *cstate, struct nfsd4_free_stateid *fsp) +nfsd4_get_freestateid(struct nfsd4_compound_state *cstate, void *_fsp) { + struct nfsd4_free_stateid *fsp = _fsp; + get_stateid(cstate, &fsp->fr_stateid); } void -nfsd4_get_setattrstateid(struct nfsd4_compound_state *cstate, struct nfsd4_setattr *setattr) +nfsd4_get_setattrstateid(struct nfsd4_compound_state *cstate, void *_setattr) { + struct nfsd4_setattr *setattr = _setattr; + get_stateid(cstate, &setattr->sa_stateid); } void -nfsd4_get_closestateid(struct nfsd4_compound_state *cstate, struct nfsd4_close *close) +nfsd4_get_closestateid(struct nfsd4_compound_state *cstate, void *_close) { + struct nfsd4_close *close = _close; + get_stateid(cstate, &close->cl_stateid); } void -nfsd4_get_lockustateid(struct nfsd4_compound_state *cstate, struct nfsd4_locku *locku) +nfsd4_get_lockustateid(struct nfsd4_compound_state *cstate, void *_locku) { + struct nfsd4_locku *locku = _locku; + get_stateid(cstate, &locku->lu_stateid); } void -nfsd4_get_readstateid(struct nfsd4_compound_state *cstate, struct nfsd4_read *read) +nfsd4_get_readstateid(struct nfsd4_compound_state *cstate, void *_read) { + struct nfsd4_read *read = _read; + get_stateid(cstate, &read->rd_stateid); } void -nfsd4_get_writestateid(struct nfsd4_compound_state *cstate, struct nfsd4_write *write) +nfsd4_get_writestateid(struct nfsd4_compound_state *cstate, void *_write) { + struct nfsd4_write *write = _write; + get_stateid(cstate, &write->wr_stateid); } diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c index c2d2895..76324ed 100644 --- a/fs/nfsd/nfs4xdr.c +++ b/fs/nfsd/nfs4xdr.c @@ -447,8 +447,9 @@ nfsd4_decode_fattr(struct nfsd4_compoundargs *argp, u32 *bmval, } static __be32 -nfsd4_decode_stateid(struct nfsd4_compoundargs *argp, stateid_t *sid) +nfsd4_decode_stateid(struct nfsd4_compoundargs *argp, void *_sid) { + stateid_t *sid = _sid; DECODE_HEAD; READ_BUF(sizeof(stateid_t)); @@ -459,8 +460,9 @@ nfsd4_decode_stateid(struct nfsd4_compoundargs *argp, stateid_t *sid) } static __be32 -nfsd4_decode_access(struct nfsd4_compoundargs *argp, struct nfsd4_access *access) +nfsd4_decode_access(struct nfsd4_compoundargs *argp, void *_access) { + struct nfsd4_access *access = _access; DECODE_HEAD; READ_BUF(4); @@ -469,8 +471,9 @@ nfsd4_decode_access(struct nfsd4_compoundargs *argp, struct nfsd4_access *access DECODE_TAIL; } -static __be32 nfsd4_decode_cb_sec(struct nfsd4_compoundargs *argp, struct nfsd4_cb_sec *cbs) +static __be32 nfsd4_decode_cb_sec(struct nfsd4_compoundargs *argp, void *_cbs) { + struct nfsd4_cb_sec *cbs = _cbs; DECODE_HEAD; u32 dummy, uid, gid; char *machine_name; @@ -549,8 +552,9 @@ static __be32 nfsd4_decode_cb_sec(struct nfsd4_compoundargs *argp, struct nfsd4_ DECODE_TAIL; } -static __be32 nfsd4_decode_backchannel_ctl(struct nfsd4_compoundargs *argp, struct nfsd4_backchannel_ctl *bc) +static __be32 nfsd4_decode_backchannel_ctl(struct nfsd4_compoundargs *argp, void *_bc) { + struct nfsd4_backchannel_ctl *bc = _bc; DECODE_HEAD; READ_BUF(4); @@ -560,8 +564,9 @@ static __be32 nfsd4_decode_backchannel_ctl(struct nfsd4_compoundargs *argp, stru DECODE_TAIL; } -static __be32 nfsd4_decode_bind_conn_to_session(struct nfsd4_compoundargs *argp, struct nfsd4_bind_conn_to_session *bcts) +static __be32 nfsd4_decode_bind_conn_to_session(struct nfsd4_compoundargs *argp, void *_bcts) { + struct nfsd4_bind_conn_to_session *bcts = _bcts; DECODE_HEAD; READ_BUF(NFS4_MAX_SESSIONID_LEN + 8); @@ -573,8 +578,9 @@ static __be32 nfsd4_decode_bind_conn_to_session(struct nfsd4_compoundargs *argp, } static __be32 -nfsd4_decode_close(struct nfsd4_compoundargs *argp, struct nfsd4_close *close) +nfsd4_decode_close(struct nfsd4_compoundargs *argp, void *_close) { + struct nfsd4_close *close = _close; DECODE_HEAD; READ_BUF(4); @@ -586,8 +592,9 @@ nfsd4_decode_close(struct nfsd4_compoundargs *argp, struct nfsd4_close *close) static __be32 -nfsd4_decode_commit(struct nfsd4_compoundargs *argp, struct nfsd4_commit *commit) +nfsd4_decode_commit(struct nfsd4_compoundargs *argp, void *_commit) { + struct nfsd4_commit *commit = _commit; DECODE_HEAD; READ_BUF(12); @@ -598,8 +605,9 @@ nfsd4_decode_commit(struct nfsd4_compoundargs *argp, struct nfsd4_commit *commit } static __be32 -nfsd4_decode_create(struct nfsd4_compoundargs *argp, struct nfsd4_create *create) +nfsd4_decode_create(struct nfsd4_compoundargs *argp, void *_create) { + struct nfsd4_create *create = _create; DECODE_HEAD; READ_BUF(4); @@ -642,20 +650,25 @@ nfsd4_decode_create(struct nfsd4_compoundargs *argp, struct nfsd4_create *create } static inline __be32 -nfsd4_decode_delegreturn(struct nfsd4_compoundargs *argp, struct nfsd4_delegreturn *dr) +nfsd4_decode_delegreturn(struct nfsd4_compoundargs *argp, void *_dr) { + struct nfsd4_delegreturn *dr = _dr; + return nfsd4_decode_stateid(argp, &dr->dr_stateid); } static inline __be32 -nfsd4_decode_getattr(struct nfsd4_compoundargs *argp, struct nfsd4_getattr *getattr) +nfsd4_decode_getattr(struct nfsd4_compoundargs *argp, void *_getattr) { + struct nfsd4_getattr *getattr = _getattr; + return nfsd4_decode_bitmap(argp, getattr->ga_bmval); } static __be32 -nfsd4_decode_link(struct nfsd4_compoundargs *argp, struct nfsd4_link *link) +nfsd4_decode_link(struct nfsd4_compoundargs *argp, void *_link) { + struct nfsd4_link *link = _link; DECODE_HEAD; READ_BUF(4); @@ -669,8 +682,9 @@ nfsd4_decode_link(struct nfsd4_compoundargs *argp, struct nfsd4_link *link) } static __be32 -nfsd4_decode_lock(struct nfsd4_compoundargs *argp, struct nfsd4_lock *lock) +nfsd4_decode_lock(struct nfsd4_compoundargs *argp, void *_lock) { + struct nfsd4_lock *lock = _lock; DECODE_HEAD; /* @@ -709,8 +723,9 @@ nfsd4_decode_lock(struct nfsd4_compoundargs *argp, struct nfsd4_lock *lock) } static __be32 -nfsd4_decode_lockt(struct nfsd4_compoundargs *argp, struct nfsd4_lockt *lockt) +nfsd4_decode_lockt(struct nfsd4_compoundargs *argp, void *_lockt) { + struct nfsd4_lockt *lockt = _lockt; DECODE_HEAD; READ_BUF(32); @@ -728,8 +743,9 @@ nfsd4_decode_lockt(struct nfsd4_compoundargs *argp, struct nfsd4_lockt *lockt) } static __be32 -nfsd4_decode_locku(struct nfsd4_compoundargs *argp, struct nfsd4_locku *locku) +nfsd4_decode_locku(struct nfsd4_compoundargs *argp, void *_locku) { + struct nfsd4_locku *locku = _locku; DECODE_HEAD; READ_BUF(8); @@ -748,8 +764,9 @@ nfsd4_decode_locku(struct nfsd4_compoundargs *argp, struct nfsd4_locku *locku) } static __be32 -nfsd4_decode_lookup(struct nfsd4_compoundargs *argp, struct nfsd4_lookup *lookup) +nfsd4_decode_lookup(struct nfsd4_compoundargs *argp, void *_lookup) { + struct nfsd4_lookup *lookup = _lookup; DECODE_HEAD; READ_BUF(4); @@ -847,8 +864,9 @@ static __be32 nfsd4_decode_opaque(struct nfsd4_compoundargs *argp, struct xdr_ne } static __be32 -nfsd4_decode_open(struct nfsd4_compoundargs *argp, struct nfsd4_open *open) +nfsd4_decode_open(struct nfsd4_compoundargs *argp, void *_open) { + struct nfsd4_open *open = _open; DECODE_HEAD; u32 dummy; @@ -960,8 +978,9 @@ nfsd4_decode_open(struct nfsd4_compoundargs *argp, struct nfsd4_open *open) } static __be32 -nfsd4_decode_open_confirm(struct nfsd4_compoundargs *argp, struct nfsd4_open_confirm *open_conf) +nfsd4_decode_open_confirm(struct nfsd4_compoundargs *argp, void *_open_conf) { + struct nfsd4_open_confirm *open_conf = _open_conf; DECODE_HEAD; if (argp->minorversion >= 1) @@ -977,8 +996,9 @@ nfsd4_decode_open_confirm(struct nfsd4_compoundargs *argp, struct nfsd4_open_con } static __be32 -nfsd4_decode_open_downgrade(struct nfsd4_compoundargs *argp, struct nfsd4_open_downgrade *open_down) +nfsd4_decode_open_downgrade(struct nfsd4_compoundargs *argp, void *_open_down) { + struct nfsd4_open_downgrade *open_down = _open_down; DECODE_HEAD; status = nfsd4_decode_stateid(argp, &open_down->od_stateid); @@ -997,8 +1017,9 @@ nfsd4_decode_open_downgrade(struct nfsd4_compoundargs *argp, struct nfsd4_open_d } static __be32 -nfsd4_decode_putfh(struct nfsd4_compoundargs *argp, struct nfsd4_putfh *putfh) +nfsd4_decode_putfh(struct nfsd4_compoundargs *argp, void *_putfh) { + struct nfsd4_putfh *putfh = _putfh; DECODE_HEAD; READ_BUF(4); @@ -1020,8 +1041,9 @@ nfsd4_decode_putpubfh(struct nfsd4_compoundargs *argp, void *p) } static __be32 -nfsd4_decode_read(struct nfsd4_compoundargs *argp, struct nfsd4_read *read) +nfsd4_decode_read(struct nfsd4_compoundargs *argp, void *_read) { + struct nfsd4_read *read = _read; DECODE_HEAD; status = nfsd4_decode_stateid(argp, &read->rd_stateid); @@ -1035,8 +1057,9 @@ nfsd4_decode_read(struct nfsd4_compoundargs *argp, struct nfsd4_read *read) } static __be32 -nfsd4_decode_readdir(struct nfsd4_compoundargs *argp, struct nfsd4_readdir *readdir) +nfsd4_decode_readdir(struct nfsd4_compoundargs *argp, void *_readdir) { + struct nfsd4_readdir *readdir = _readdir; DECODE_HEAD; READ_BUF(24); @@ -1051,8 +1074,9 @@ nfsd4_decode_readdir(struct nfsd4_compoundargs *argp, struct nfsd4_readdir *read } static __be32 -nfsd4_decode_remove(struct nfsd4_compoundargs *argp, struct nfsd4_remove *remove) +nfsd4_decode_remove(struct nfsd4_compoundargs *argp, void *_remove) { + struct nfsd4_remove *remove = _remove; DECODE_HEAD; READ_BUF(4); @@ -1066,8 +1090,9 @@ nfsd4_decode_remove(struct nfsd4_compoundargs *argp, struct nfsd4_remove *remove } static __be32 -nfsd4_decode_rename(struct nfsd4_compoundargs *argp, struct nfsd4_rename *rename) +nfsd4_decode_rename(struct nfsd4_compoundargs *argp, void *_rename) { + struct nfsd4_rename *rename = _rename; DECODE_HEAD; READ_BUF(4); @@ -1087,7 +1112,7 @@ nfsd4_decode_rename(struct nfsd4_compoundargs *argp, struct nfsd4_rename *rename } static __be32 -nfsd4_decode_renew(struct nfsd4_compoundargs *argp, clientid_t *clientid) +nfsd4_decode_renew(struct nfsd4_compoundargs *argp, void *clientid) { DECODE_HEAD; @@ -1102,8 +1127,9 @@ nfsd4_decode_renew(struct nfsd4_compoundargs *argp, clientid_t *clientid) static __be32 nfsd4_decode_secinfo(struct nfsd4_compoundargs *argp, - struct nfsd4_secinfo *secinfo) + void *_secinfo) { + struct nfsd4_secinfo *secinfo = _secinfo; DECODE_HEAD; READ_BUF(4); @@ -1118,8 +1144,9 @@ nfsd4_decode_secinfo(struct nfsd4_compoundargs *argp, static __be32 nfsd4_decode_secinfo_no_name(struct nfsd4_compoundargs *argp, - struct nfsd4_secinfo_no_name *sin) + void *_sin) { + struct nfsd4_secinfo_no_name *sin = _sin; DECODE_HEAD; READ_BUF(4); @@ -1128,8 +1155,9 @@ nfsd4_decode_secinfo_no_name(struct nfsd4_compoundargs *argp, } static __be32 -nfsd4_decode_setattr(struct nfsd4_compoundargs *argp, struct nfsd4_setattr *setattr) +nfsd4_decode_setattr(struct nfsd4_compoundargs *argp, void *_setattr) { + struct nfsd4_setattr *setattr = _setattr; __be32 status; status = nfsd4_decode_stateid(argp, &setattr->sa_stateid); @@ -1140,8 +1168,9 @@ nfsd4_decode_setattr(struct nfsd4_compoundargs *argp, struct nfsd4_setattr *seta } static __be32 -nfsd4_decode_setclientid(struct nfsd4_compoundargs *argp, struct nfsd4_setclientid *setclientid) +nfsd4_decode_setclientid(struct nfsd4_compoundargs *argp, void *_setclientid) { + struct nfsd4_setclientid *setclientid = _setclientid; DECODE_HEAD; if (argp->minorversion >= 1) @@ -1170,8 +1199,9 @@ nfsd4_decode_setclientid(struct nfsd4_compoundargs *argp, struct nfsd4_setclient } static __be32 -nfsd4_decode_setclientid_confirm(struct nfsd4_compoundargs *argp, struct nfsd4_setclientid_confirm *scd_c) +nfsd4_decode_setclientid_confirm(struct nfsd4_compoundargs *argp, void *_scd_c) { + struct nfsd4_setclientid_confirm *scd_c = _scd_c; DECODE_HEAD; if (argp->minorversion >= 1) @@ -1186,8 +1216,9 @@ nfsd4_decode_setclientid_confirm(struct nfsd4_compoundargs *argp, struct nfsd4_s /* Also used for NVERIFY */ static __be32 -nfsd4_decode_verify(struct nfsd4_compoundargs *argp, struct nfsd4_verify *verify) +nfsd4_decode_verify(struct nfsd4_compoundargs *argp, void *_verify) { + struct nfsd4_verify *verify = _verify; DECODE_HEAD; if ((status = nfsd4_decode_bitmap(argp, verify->ve_bmval))) @@ -1205,8 +1236,9 @@ nfsd4_decode_verify(struct nfsd4_compoundargs *argp, struct nfsd4_verify *verify } static __be32 -nfsd4_decode_write(struct nfsd4_compoundargs *argp, struct nfsd4_write *write) +nfsd4_decode_write(struct nfsd4_compoundargs *argp, void *_write) { + struct nfsd4_write *write = _write; int avail; int len; DECODE_HEAD; @@ -1256,8 +1288,9 @@ nfsd4_decode_write(struct nfsd4_compoundargs *argp, struct nfsd4_write *write) } static __be32 -nfsd4_decode_release_lockowner(struct nfsd4_compoundargs *argp, struct nfsd4_release_lockowner *rlockowner) +nfsd4_decode_release_lockowner(struct nfsd4_compoundargs *argp, void *_rlockowner) { + struct nfsd4_release_lockowner *rlockowner = _rlockowner; DECODE_HEAD; if (argp->minorversion >= 1) @@ -1276,8 +1309,9 @@ nfsd4_decode_release_lockowner(struct nfsd4_compoundargs *argp, struct nfsd4_rel static __be32 nfsd4_decode_exchange_id(struct nfsd4_compoundargs *argp, - struct nfsd4_exchange_id *exid) + void *_exid) { + struct nfsd4_exchange_id *exid = _exid; int dummy, tmp; DECODE_HEAD; @@ -1378,8 +1412,9 @@ nfsd4_decode_exchange_id(struct nfsd4_compoundargs *argp, static __be32 nfsd4_decode_create_session(struct nfsd4_compoundargs *argp, - struct nfsd4_create_session *sess) + void *_sess) { + struct nfsd4_create_session *sess = _sess; DECODE_HEAD; u32 dummy; @@ -1430,8 +1465,9 @@ nfsd4_decode_create_session(struct nfsd4_compoundargs *argp, static __be32 nfsd4_decode_destroy_session(struct nfsd4_compoundargs *argp, - struct nfsd4_destroy_session *destroy_session) + void *_destroy_session) { + struct nfsd4_destroy_session *destroy_session = _destroy_session; DECODE_HEAD; READ_BUF(NFS4_MAX_SESSIONID_LEN); COPYMEM(destroy_session->sessionid.data, NFS4_MAX_SESSIONID_LEN); @@ -1441,8 +1477,9 @@ nfsd4_decode_destroy_session(struct nfsd4_compoundargs *argp, static __be32 nfsd4_decode_free_stateid(struct nfsd4_compoundargs *argp, - struct nfsd4_free_stateid *free_stateid) + void *_free_stateid) { + struct nfsd4_free_stateid *free_stateid = _free_stateid; DECODE_HEAD; READ_BUF(sizeof(stateid_t)); @@ -1454,8 +1491,9 @@ nfsd4_decode_free_stateid(struct nfsd4_compoundargs *argp, static __be32 nfsd4_decode_sequence(struct nfsd4_compoundargs *argp, - struct nfsd4_sequence *seq) + void *_seq) { + struct nfsd4_sequence *seq = _seq; DECODE_HEAD; READ_BUF(NFS4_MAX_SESSIONID_LEN + 16); @@ -1469,8 +1507,9 @@ nfsd4_decode_sequence(struct nfsd4_compoundargs *argp, } static __be32 -nfsd4_decode_test_stateid(struct nfsd4_compoundargs *argp, struct nfsd4_test_stateid *test_stateid) +nfsd4_decode_test_stateid(struct nfsd4_compoundargs *argp, void *_test_stateid) { + struct nfsd4_test_stateid *test_stateid = _test_stateid; int i; __be32 *p, status; struct nfsd4_test_stateid_id *stateid; @@ -1504,8 +1543,9 @@ nfsd4_decode_test_stateid(struct nfsd4_compoundargs *argp, struct nfsd4_test_sta goto out; } -static __be32 nfsd4_decode_destroy_clientid(struct nfsd4_compoundargs *argp, struct nfsd4_destroy_clientid *dc) +static __be32 nfsd4_decode_destroy_clientid(struct nfsd4_compoundargs *argp, void *_dc) { + struct nfsd4_destroy_clientid *dc = _dc; DECODE_HEAD; READ_BUF(8); @@ -1514,8 +1554,9 @@ static __be32 nfsd4_decode_destroy_clientid(struct nfsd4_compoundargs *argp, str DECODE_TAIL; } -static __be32 nfsd4_decode_reclaim_complete(struct nfsd4_compoundargs *argp, struct nfsd4_reclaim_complete *rc) +static __be32 nfsd4_decode_reclaim_complete(struct nfsd4_compoundargs *argp, void *_rc) { + struct nfsd4_reclaim_complete *rc = _rc; DECODE_HEAD; READ_BUF(4); @@ -1527,8 +1568,9 @@ static __be32 nfsd4_decode_reclaim_complete(struct nfsd4_compoundargs *argp, str #ifdef CONFIG_NFSD_PNFS static __be32 nfsd4_decode_getdeviceinfo(struct nfsd4_compoundargs *argp, - struct nfsd4_getdeviceinfo *gdev) + void *_gdev) { + struct nfsd4_getdeviceinfo *gdev = _gdev; DECODE_HEAD; u32 num, i; @@ -1552,8 +1594,9 @@ nfsd4_decode_getdeviceinfo(struct nfsd4_compoundargs *argp, static __be32 nfsd4_decode_layoutget(struct nfsd4_compoundargs *argp, - struct nfsd4_layoutget *lgp) + void *_lgp) { + struct nfsd4_layoutget *lgp = _lgp; DECODE_HEAD; READ_BUF(36); @@ -1576,8 +1619,9 @@ nfsd4_decode_layoutget(struct nfsd4_compoundargs *argp, static __be32 nfsd4_decode_layoutcommit(struct nfsd4_compoundargs *argp, - struct nfsd4_layoutcommit *lcp) + void *_lcp) { + struct nfsd4_layoutcommit *lcp = _lcp; DECODE_HEAD; u32 timechange; @@ -1624,8 +1668,9 @@ nfsd4_decode_layoutcommit(struct nfsd4_compoundargs *argp, static __be32 nfsd4_decode_layoutreturn(struct nfsd4_compoundargs *argp, - struct nfsd4_layoutreturn *lrp) + void *_lrp) { + struct nfsd4_layoutreturn *lrp = _lrp; DECODE_HEAD; READ_BUF(16); @@ -1659,8 +1704,9 @@ nfsd4_decode_layoutreturn(struct nfsd4_compoundargs *argp, static __be32 nfsd4_decode_fallocate(struct nfsd4_compoundargs *argp, - struct nfsd4_fallocate *fallocate) + void *_fallocate) { + struct nfsd4_fallocate *fallocate = _fallocate; DECODE_HEAD; status = nfsd4_decode_stateid(argp, &fallocate->falloc_stateid); @@ -1675,8 +1721,9 @@ nfsd4_decode_fallocate(struct nfsd4_compoundargs *argp, } static __be32 -nfsd4_decode_clone(struct nfsd4_compoundargs *argp, struct nfsd4_clone *clone) +nfsd4_decode_clone(struct nfsd4_compoundargs *argp, void *_clone) { + struct nfsd4_clone *clone = _clone; DECODE_HEAD; status = nfsd4_decode_stateid(argp, &clone->cl_src_stateid); @@ -1694,8 +1741,9 @@ nfsd4_decode_clone(struct nfsd4_compoundargs *argp, struct nfsd4_clone *clone) } static __be32 -nfsd4_decode_copy(struct nfsd4_compoundargs *argp, struct nfsd4_copy *copy) +nfsd4_decode_copy(struct nfsd4_compoundargs *argp, void *_copy) { + struct nfsd4_copy *copy = _copy; DECODE_HEAD; unsigned int tmp; @@ -1718,8 +1766,9 @@ nfsd4_decode_copy(struct nfsd4_compoundargs *argp, struct nfsd4_copy *copy) } static __be32 -nfsd4_decode_seek(struct nfsd4_compoundargs *argp, struct nfsd4_seek *seek) +nfsd4_decode_seek(struct nfsd4_compoundargs *argp, void *_seek) { + struct nfsd4_seek *seek = _seek; DECODE_HEAD; status = nfsd4_decode_stateid(argp, &seek->seek_stateid); @@ -1747,88 +1796,88 @@ nfsd4_decode_notsupp(struct nfsd4_compoundargs *argp, void *p) typedef __be32(*nfsd4_dec)(struct nfsd4_compoundargs *argp, void *); -static nfsd4_dec nfsd4_dec_ops[] = { - [OP_ACCESS] = (nfsd4_dec)nfsd4_decode_access, - [OP_CLOSE] = (nfsd4_dec)nfsd4_decode_close, - [OP_COMMIT] = (nfsd4_dec)nfsd4_decode_commit, - [OP_CREATE] = (nfsd4_dec)nfsd4_decode_create, - [OP_DELEGPURGE] = (nfsd4_dec)nfsd4_decode_notsupp, - [OP_DELEGRETURN] = (nfsd4_dec)nfsd4_decode_delegreturn, - [OP_GETATTR] = (nfsd4_dec)nfsd4_decode_getattr, - [OP_GETFH] = (nfsd4_dec)nfsd4_decode_noop, - [OP_LINK] = (nfsd4_dec)nfsd4_decode_link, - [OP_LOCK] = (nfsd4_dec)nfsd4_decode_lock, - [OP_LOCKT] = (nfsd4_dec)nfsd4_decode_lockt, - [OP_LOCKU] = (nfsd4_dec)nfsd4_decode_locku, - [OP_LOOKUP] = (nfsd4_dec)nfsd4_decode_lookup, - [OP_LOOKUPP] = (nfsd4_dec)nfsd4_decode_noop, - [OP_NVERIFY] = (nfsd4_dec)nfsd4_decode_verify, - [OP_OPEN] = (nfsd4_dec)nfsd4_decode_open, - [OP_OPENATTR] = (nfsd4_dec)nfsd4_decode_notsupp, - [OP_OPEN_CONFIRM] = (nfsd4_dec)nfsd4_decode_open_confirm, - [OP_OPEN_DOWNGRADE] = (nfsd4_dec)nfsd4_decode_open_downgrade, - [OP_PUTFH] = (nfsd4_dec)nfsd4_decode_putfh, - [OP_PUTPUBFH] = (nfsd4_dec)nfsd4_decode_putpubfh, - [OP_PUTROOTFH] = (nfsd4_dec)nfsd4_decode_noop, - [OP_READ] = (nfsd4_dec)nfsd4_decode_read, - [OP_READDIR] = (nfsd4_dec)nfsd4_decode_readdir, - [OP_READLINK] = (nfsd4_dec)nfsd4_decode_noop, - [OP_REMOVE] = (nfsd4_dec)nfsd4_decode_remove, - [OP_RENAME] = (nfsd4_dec)nfsd4_decode_rename, - [OP_RENEW] = (nfsd4_dec)nfsd4_decode_renew, - [OP_RESTOREFH] = (nfsd4_dec)nfsd4_decode_noop, - [OP_SAVEFH] = (nfsd4_dec)nfsd4_decode_noop, - [OP_SECINFO] = (nfsd4_dec)nfsd4_decode_secinfo, - [OP_SETATTR] = (nfsd4_dec)nfsd4_decode_setattr, - [OP_SETCLIENTID] = (nfsd4_dec)nfsd4_decode_setclientid, - [OP_SETCLIENTID_CONFIRM] = (nfsd4_dec)nfsd4_decode_setclientid_confirm, - [OP_VERIFY] = (nfsd4_dec)nfsd4_decode_verify, - [OP_WRITE] = (nfsd4_dec)nfsd4_decode_write, - [OP_RELEASE_LOCKOWNER] = (nfsd4_dec)nfsd4_decode_release_lockowner, +static const nfsd4_dec nfsd4_dec_ops[] = { + [OP_ACCESS] = nfsd4_decode_access, + [OP_CLOSE] = nfsd4_decode_close, + [OP_COMMIT] = nfsd4_decode_commit, + [OP_CREATE] = nfsd4_decode_create, + [OP_DELEGPURGE] = nfsd4_decode_notsupp, + [OP_DELEGRETURN] = nfsd4_decode_delegreturn, + [OP_GETATTR] = nfsd4_decode_getattr, + [OP_GETFH] = nfsd4_decode_noop, + [OP_LINK] = nfsd4_decode_link, + [OP_LOCK] = nfsd4_decode_lock, + [OP_LOCKT] = nfsd4_decode_lockt, + [OP_LOCKU] = nfsd4_decode_locku, + [OP_LOOKUP] = nfsd4_decode_lookup, + [OP_LOOKUPP] = nfsd4_decode_noop, + [OP_NVERIFY] = nfsd4_decode_verify, + [OP_OPEN] = nfsd4_decode_open, + [OP_OPENATTR] = nfsd4_decode_notsupp, + [OP_OPEN_CONFIRM] = nfsd4_decode_open_confirm, + [OP_OPEN_DOWNGRADE] = nfsd4_decode_open_downgrade, + [OP_PUTFH] = nfsd4_decode_putfh, + [OP_PUTPUBFH] = nfsd4_decode_putpubfh, + [OP_PUTROOTFH] = nfsd4_decode_noop, + [OP_READ] = nfsd4_decode_read, + [OP_READDIR] = nfsd4_decode_readdir, + [OP_READLINK] = nfsd4_decode_noop, + [OP_REMOVE] = nfsd4_decode_remove, + [OP_RENAME] = nfsd4_decode_rename, + [OP_RENEW] = nfsd4_decode_renew, + [OP_RESTOREFH] = nfsd4_decode_noop, + [OP_SAVEFH] = nfsd4_decode_noop, + [OP_SECINFO] = nfsd4_decode_secinfo, + [OP_SETATTR] = nfsd4_decode_setattr, + [OP_SETCLIENTID] = nfsd4_decode_setclientid, + [OP_SETCLIENTID_CONFIRM] = nfsd4_decode_setclientid_confirm, + [OP_VERIFY] = nfsd4_decode_verify, + [OP_WRITE] = nfsd4_decode_write, + [OP_RELEASE_LOCKOWNER] = nfsd4_decode_release_lockowner, /* new operations for NFSv4.1 */ - [OP_BACKCHANNEL_CTL] = (nfsd4_dec)nfsd4_decode_backchannel_ctl, - [OP_BIND_CONN_TO_SESSION]= (nfsd4_dec)nfsd4_decode_bind_conn_to_session, - [OP_EXCHANGE_ID] = (nfsd4_dec)nfsd4_decode_exchange_id, - [OP_CREATE_SESSION] = (nfsd4_dec)nfsd4_decode_create_session, - [OP_DESTROY_SESSION] = (nfsd4_dec)nfsd4_decode_destroy_session, - [OP_FREE_STATEID] = (nfsd4_dec)nfsd4_decode_free_stateid, - [OP_GET_DIR_DELEGATION] = (nfsd4_dec)nfsd4_decode_notsupp, + [OP_BACKCHANNEL_CTL] = nfsd4_decode_backchannel_ctl, + [OP_BIND_CONN_TO_SESSION]= nfsd4_decode_bind_conn_to_session, + [OP_EXCHANGE_ID] = nfsd4_decode_exchange_id, + [OP_CREATE_SESSION] = nfsd4_decode_create_session, + [OP_DESTROY_SESSION] = nfsd4_decode_destroy_session, + [OP_FREE_STATEID] = nfsd4_decode_free_stateid, + [OP_GET_DIR_DELEGATION] = nfsd4_decode_notsupp, #ifdef CONFIG_NFSD_PNFS - [OP_GETDEVICEINFO] = (nfsd4_dec)nfsd4_decode_getdeviceinfo, - [OP_GETDEVICELIST] = (nfsd4_dec)nfsd4_decode_notsupp, - [OP_LAYOUTCOMMIT] = (nfsd4_dec)nfsd4_decode_layoutcommit, - [OP_LAYOUTGET] = (nfsd4_dec)nfsd4_decode_layoutget, - [OP_LAYOUTRETURN] = (nfsd4_dec)nfsd4_decode_layoutreturn, + [OP_GETDEVICEINFO] = nfsd4_decode_getdeviceinfo, + [OP_GETDEVICELIST] = nfsd4_decode_notsupp, + [OP_LAYOUTCOMMIT] = nfsd4_decode_layoutcommit, + [OP_LAYOUTGET] = nfsd4_decode_layoutget, + [OP_LAYOUTRETURN] = nfsd4_decode_layoutreturn, #else - [OP_GETDEVICEINFO] = (nfsd4_dec)nfsd4_decode_notsupp, - [OP_GETDEVICELIST] = (nfsd4_dec)nfsd4_decode_notsupp, - [OP_LAYOUTCOMMIT] = (nfsd4_dec)nfsd4_decode_notsupp, - [OP_LAYOUTGET] = (nfsd4_dec)nfsd4_decode_notsupp, - [OP_LAYOUTRETURN] = (nfsd4_dec)nfsd4_decode_notsupp, + [OP_GETDEVICEINFO] = nfsd4_decode_notsupp, + [OP_GETDEVICELIST] = nfsd4_decode_notsupp, + [OP_LAYOUTCOMMIT] = nfsd4_decode_notsupp, + [OP_LAYOUTGET] = nfsd4_decode_notsupp, + [OP_LAYOUTRETURN] = nfsd4_decode_notsupp, #endif - [OP_SECINFO_NO_NAME] = (nfsd4_dec)nfsd4_decode_secinfo_no_name, - [OP_SEQUENCE] = (nfsd4_dec)nfsd4_decode_sequence, - [OP_SET_SSV] = (nfsd4_dec)nfsd4_decode_notsupp, - [OP_TEST_STATEID] = (nfsd4_dec)nfsd4_decode_test_stateid, - [OP_WANT_DELEGATION] = (nfsd4_dec)nfsd4_decode_notsupp, - [OP_DESTROY_CLIENTID] = (nfsd4_dec)nfsd4_decode_destroy_clientid, - [OP_RECLAIM_COMPLETE] = (nfsd4_dec)nfsd4_decode_reclaim_complete, + [OP_SECINFO_NO_NAME] = nfsd4_decode_secinfo_no_name, + [OP_SEQUENCE] = nfsd4_decode_sequence, + [OP_SET_SSV] = nfsd4_decode_notsupp, + [OP_TEST_STATEID] = nfsd4_decode_test_stateid, + [OP_WANT_DELEGATION] = nfsd4_decode_notsupp, + [OP_DESTROY_CLIENTID] = nfsd4_decode_destroy_clientid, + [OP_RECLAIM_COMPLETE] = nfsd4_decode_reclaim_complete, /* new operations for NFSv4.2 */ - [OP_ALLOCATE] = (nfsd4_dec)nfsd4_decode_fallocate, - [OP_COPY] = (nfsd4_dec)nfsd4_decode_copy, - [OP_COPY_NOTIFY] = (nfsd4_dec)nfsd4_decode_notsupp, - [OP_DEALLOCATE] = (nfsd4_dec)nfsd4_decode_fallocate, - [OP_IO_ADVISE] = (nfsd4_dec)nfsd4_decode_notsupp, - [OP_LAYOUTERROR] = (nfsd4_dec)nfsd4_decode_notsupp, - [OP_LAYOUTSTATS] = (nfsd4_dec)nfsd4_decode_notsupp, - [OP_OFFLOAD_CANCEL] = (nfsd4_dec)nfsd4_decode_notsupp, - [OP_OFFLOAD_STATUS] = (nfsd4_dec)nfsd4_decode_notsupp, - [OP_READ_PLUS] = (nfsd4_dec)nfsd4_decode_notsupp, - [OP_SEEK] = (nfsd4_dec)nfsd4_decode_seek, - [OP_WRITE_SAME] = (nfsd4_dec)nfsd4_decode_notsupp, - [OP_CLONE] = (nfsd4_dec)nfsd4_decode_clone, + [OP_ALLOCATE] = nfsd4_decode_fallocate, + [OP_COPY] = nfsd4_decode_copy, + [OP_COPY_NOTIFY] = nfsd4_decode_notsupp, + [OP_DEALLOCATE] = nfsd4_decode_fallocate, + [OP_IO_ADVISE] = nfsd4_decode_notsupp, + [OP_LAYOUTERROR] = nfsd4_decode_notsupp, + [OP_LAYOUTSTATS] = nfsd4_decode_notsupp, + [OP_OFFLOAD_CANCEL] = nfsd4_decode_notsupp, + [OP_OFFLOAD_STATUS] = nfsd4_decode_notsupp, + [OP_READ_PLUS] = nfsd4_decode_notsupp, + [OP_SEEK] = nfsd4_decode_seek, + [OP_WRITE_SAME] = nfsd4_decode_notsupp, + [OP_CLONE] = nfsd4_decode_clone, }; static inline bool @@ -3056,8 +3105,9 @@ nfsd4_encode_stateid(struct xdr_stream *xdr, stateid_t *sid) } static __be32 -nfsd4_encode_access(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_access *access) +nfsd4_encode_access(struct nfsd4_compoundres *resp, __be32 nfserr, void *_access) { + struct nfsd4_access *access = _access; struct xdr_stream *xdr = &resp->xdr; __be32 *p; @@ -3071,8 +3121,9 @@ nfsd4_encode_access(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_ return nfserr; } -static __be32 nfsd4_encode_bind_conn_to_session(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_bind_conn_to_session *bcts) +static __be32 nfsd4_encode_bind_conn_to_session(struct nfsd4_compoundres *resp, __be32 nfserr, void *_bcts) { + struct nfsd4_bind_conn_to_session *bcts = _bcts; struct xdr_stream *xdr = &resp->xdr; __be32 *p; @@ -3090,8 +3141,10 @@ static __be32 nfsd4_encode_bind_conn_to_session(struct nfsd4_compoundres *resp, } static __be32 -nfsd4_encode_close(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_close *close) +nfsd4_encode_close(struct nfsd4_compoundres *resp, __be32 nfserr, void *_close) { + struct nfsd4_close *close = _close; + struct xdr_stream *xdr = &resp->xdr; if (!nfserr) @@ -3102,8 +3155,9 @@ nfsd4_encode_close(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_c static __be32 -nfsd4_encode_commit(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_commit *commit) +nfsd4_encode_commit(struct nfsd4_compoundres *resp, __be32 nfserr, void *_commit) { + struct nfsd4_commit *commit = _commit; struct xdr_stream *xdr = &resp->xdr; __be32 *p; @@ -3118,8 +3172,9 @@ nfsd4_encode_commit(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_ } static __be32 -nfsd4_encode_create(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_create *create) +nfsd4_encode_create(struct nfsd4_compoundres *resp, __be32 nfserr, void *_create) { + struct nfsd4_create *create = _create; struct xdr_stream *xdr = &resp->xdr; __be32 *p; @@ -3135,8 +3190,9 @@ nfsd4_encode_create(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_ } static __be32 -nfsd4_encode_getattr(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_getattr *getattr) +nfsd4_encode_getattr(struct nfsd4_compoundres *resp, __be32 nfserr, void *_getattr) { + struct nfsd4_getattr *getattr = _getattr; struct svc_fh *fhp = getattr->ga_fhp; struct xdr_stream *xdr = &resp->xdr; @@ -3150,8 +3206,9 @@ nfsd4_encode_getattr(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4 } static __be32 -nfsd4_encode_getfh(struct nfsd4_compoundres *resp, __be32 nfserr, struct svc_fh **fhpp) +nfsd4_encode_getfh(struct nfsd4_compoundres *resp, __be32 nfserr, void *_fhpp) { + struct svc_fh **fhpp = (struct svc_fh **)_fhpp; struct xdr_stream *xdr = &resp->xdr; struct svc_fh *fhp = *fhpp; unsigned int len; @@ -3207,8 +3264,10 @@ nfsd4_encode_lock_denied(struct xdr_stream *xdr, struct nfsd4_lock_denied *ld) } static __be32 -nfsd4_encode_lock(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_lock *lock) +nfsd4_encode_lock(struct nfsd4_compoundres *resp, __be32 nfserr, void *_lock) { + struct nfsd4_lock *lock = _lock; + struct xdr_stream *xdr = &resp->xdr; if (!nfserr) @@ -3220,8 +3279,9 @@ nfsd4_encode_lock(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_lo } static __be32 -nfsd4_encode_lockt(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_lockt *lockt) +nfsd4_encode_lockt(struct nfsd4_compoundres *resp, __be32 nfserr, void *_lockt) { + struct nfsd4_lockt *lockt = _lockt; struct xdr_stream *xdr = &resp->xdr; if (nfserr == nfserr_denied) @@ -3230,8 +3290,9 @@ nfsd4_encode_lockt(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_l } static __be32 -nfsd4_encode_locku(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_locku *locku) +nfsd4_encode_locku(struct nfsd4_compoundres *resp, __be32 nfserr, void *_locku) { + struct nfsd4_locku *locku = _locku; struct xdr_stream *xdr = &resp->xdr; if (!nfserr) @@ -3242,8 +3303,9 @@ nfsd4_encode_locku(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_l static __be32 -nfsd4_encode_link(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_link *link) +nfsd4_encode_link(struct nfsd4_compoundres *resp, __be32 nfserr, void *_link) { + struct nfsd4_link *link = _link; struct xdr_stream *xdr = &resp->xdr; __be32 *p; @@ -3258,8 +3320,9 @@ nfsd4_encode_link(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_li static __be32 -nfsd4_encode_open(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_open *open) +nfsd4_encode_open(struct nfsd4_compoundres *resp, __be32 nfserr, void *_open) { + struct nfsd4_open *open = _open; struct xdr_stream *xdr = &resp->xdr; __be32 *p; @@ -3356,8 +3419,10 @@ nfsd4_encode_open(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_op } static __be32 -nfsd4_encode_open_confirm(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_open_confirm *oc) +nfsd4_encode_open_confirm(struct nfsd4_compoundres *resp, __be32 nfserr, void *_oc) { + struct nfsd4_open_confirm *oc = _oc; + struct xdr_stream *xdr = &resp->xdr; if (!nfserr) @@ -3367,8 +3432,10 @@ nfsd4_encode_open_confirm(struct nfsd4_compoundres *resp, __be32 nfserr, struct } static __be32 -nfsd4_encode_open_downgrade(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_open_downgrade *od) +nfsd4_encode_open_downgrade(struct nfsd4_compoundres *resp, __be32 nfserr, void *_od) { + struct nfsd4_open_downgrade *od = _od; + struct xdr_stream *xdr = &resp->xdr; if (!nfserr) @@ -3501,9 +3568,9 @@ static __be32 nfsd4_encode_readv(struct nfsd4_compoundres *resp, } static __be32 -nfsd4_encode_read(struct nfsd4_compoundres *resp, __be32 nfserr, - struct nfsd4_read *read) +nfsd4_encode_read(struct nfsd4_compoundres *resp, __be32 nfserr, void *_read) { + struct nfsd4_read *read = _read; unsigned long maxcount; struct xdr_stream *xdr = &resp->xdr; struct file *file = read->rd_filp; @@ -3555,8 +3622,9 @@ nfsd4_encode_read(struct nfsd4_compoundres *resp, __be32 nfserr, } static __be32 -nfsd4_encode_readlink(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_readlink *readlink) +nfsd4_encode_readlink(struct nfsd4_compoundres *resp, __be32 nfserr, void *_readlink) { + struct nfsd4_readlink *readlink = _readlink; int maxcount; __be32 wire_count; int zero = 0; @@ -3600,8 +3668,9 @@ nfsd4_encode_readlink(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd } static __be32 -nfsd4_encode_readdir(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_readdir *readdir) +nfsd4_encode_readdir(struct nfsd4_compoundres *resp, __be32 nfserr, void *_readdir) { + struct nfsd4_readdir *readdir = _readdir; int maxcount; int bytes_left; loff_t offset; @@ -3693,8 +3762,9 @@ nfsd4_encode_readdir(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4 } static __be32 -nfsd4_encode_remove(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_remove *remove) +nfsd4_encode_remove(struct nfsd4_compoundres *resp, __be32 nfserr, void *_remove) { + struct nfsd4_remove *remove = _remove; struct xdr_stream *xdr = &resp->xdr; __be32 *p; @@ -3708,8 +3778,9 @@ nfsd4_encode_remove(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_ } static __be32 -nfsd4_encode_rename(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_rename *rename) +nfsd4_encode_rename(struct nfsd4_compoundres *resp, __be32 nfserr, void *_rename) { + struct nfsd4_rename *rename = _rename; struct xdr_stream *xdr = &resp->xdr; __be32 *p; @@ -3725,8 +3796,9 @@ nfsd4_encode_rename(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_ static __be32 nfsd4_do_encode_secinfo(struct xdr_stream *xdr, - __be32 nfserr, struct svc_export *exp) + __be32 nfserr, void *_exp) { + struct svc_export *exp = _exp; u32 i, nflavs, supported; struct exp_flavor_info *flavs; struct exp_flavor_info def_flavs[2]; @@ -3801,8 +3873,9 @@ nfsd4_do_encode_secinfo(struct xdr_stream *xdr, static __be32 nfsd4_encode_secinfo(struct nfsd4_compoundres *resp, __be32 nfserr, - struct nfsd4_secinfo *secinfo) + void *_secinfo) { + struct nfsd4_secinfo *secinfo = _secinfo; struct xdr_stream *xdr = &resp->xdr; return nfsd4_do_encode_secinfo(xdr, nfserr, secinfo->si_exp); @@ -3810,8 +3883,9 @@ nfsd4_encode_secinfo(struct nfsd4_compoundres *resp, __be32 nfserr, static __be32 nfsd4_encode_secinfo_no_name(struct nfsd4_compoundres *resp, __be32 nfserr, - struct nfsd4_secinfo_no_name *secinfo) + void *_secinfo) { + struct nfsd4_secinfo_no_name *secinfo = _secinfo; struct xdr_stream *xdr = &resp->xdr; return nfsd4_do_encode_secinfo(xdr, nfserr, secinfo->sin_exp); @@ -3822,8 +3896,9 @@ nfsd4_encode_secinfo_no_name(struct nfsd4_compoundres *resp, __be32 nfserr, * regardless of the error status. */ static __be32 -nfsd4_encode_setattr(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_setattr *setattr) +nfsd4_encode_setattr(struct nfsd4_compoundres *resp, __be32 nfserr, void *_setattr) { + struct nfsd4_setattr *setattr = _setattr; struct xdr_stream *xdr = &resp->xdr; __be32 *p; @@ -3846,8 +3921,9 @@ nfsd4_encode_setattr(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4 } static __be32 -nfsd4_encode_setclientid(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_setclientid *scd) +nfsd4_encode_setclientid(struct nfsd4_compoundres *resp, __be32 nfserr, void *_scd) { + struct nfsd4_setclientid *scd = _scd; struct xdr_stream *xdr = &resp->xdr; __be32 *p; @@ -3870,8 +3946,9 @@ nfsd4_encode_setclientid(struct nfsd4_compoundres *resp, __be32 nfserr, struct n } static __be32 -nfsd4_encode_write(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_write *write) +nfsd4_encode_write(struct nfsd4_compoundres *resp, __be32 nfserr, void *_write) { + struct nfsd4_write *write = _write; struct xdr_stream *xdr = &resp->xdr; __be32 *p; @@ -3889,8 +3966,9 @@ nfsd4_encode_write(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_w static __be32 nfsd4_encode_exchange_id(struct nfsd4_compoundres *resp, __be32 nfserr, - struct nfsd4_exchange_id *exid) + void *_exid) { + struct nfsd4_exchange_id *exid = _exid; struct xdr_stream *xdr = &resp->xdr; __be32 *p; char *major_id; @@ -3972,8 +4050,9 @@ nfsd4_encode_exchange_id(struct nfsd4_compoundres *resp, __be32 nfserr, static __be32 nfsd4_encode_create_session(struct nfsd4_compoundres *resp, __be32 nfserr, - struct nfsd4_create_session *sess) + void *_sess) { + struct nfsd4_create_session *sess = _sess; struct xdr_stream *xdr = &resp->xdr; __be32 *p; @@ -4028,8 +4107,9 @@ nfsd4_encode_create_session(struct nfsd4_compoundres *resp, __be32 nfserr, static __be32 nfsd4_encode_sequence(struct nfsd4_compoundres *resp, __be32 nfserr, - struct nfsd4_sequence *seq) + void *_seq) { + struct nfsd4_sequence *seq = _seq; struct xdr_stream *xdr = &resp->xdr; __be32 *p; @@ -4054,8 +4134,9 @@ nfsd4_encode_sequence(struct nfsd4_compoundres *resp, __be32 nfserr, static __be32 nfsd4_encode_test_stateid(struct nfsd4_compoundres *resp, __be32 nfserr, - struct nfsd4_test_stateid *test_stateid) + void *_test_stateid) { + struct nfsd4_test_stateid *test_stateid = _test_stateid; struct xdr_stream *xdr = &resp->xdr; struct nfsd4_test_stateid_id *stateid, *next; __be32 *p; @@ -4077,9 +4158,9 @@ nfsd4_encode_test_stateid(struct nfsd4_compoundres *resp, __be32 nfserr, #ifdef CONFIG_NFSD_PNFS static __be32 -nfsd4_encode_getdeviceinfo(struct nfsd4_compoundres *resp, __be32 nfserr, - struct nfsd4_getdeviceinfo *gdev) +nfsd4_encode_getdeviceinfo(struct nfsd4_compoundres *resp, __be32 nfserr, void *_gdev) { + struct nfsd4_getdeviceinfo *gdev = _gdev; struct xdr_stream *xdr = &resp->xdr; const struct nfsd4_layout_ops *ops; u32 starting_len = xdr->buf->len, needed_len; @@ -4147,9 +4228,9 @@ nfsd4_encode_getdeviceinfo(struct nfsd4_compoundres *resp, __be32 nfserr, } static __be32 -nfsd4_encode_layoutget(struct nfsd4_compoundres *resp, __be32 nfserr, - struct nfsd4_layoutget *lgp) +nfsd4_encode_layoutget(struct nfsd4_compoundres *resp, __be32 nfserr, void *_lgp) { + struct nfsd4_layoutget *lgp = _lgp; struct xdr_stream *xdr = &resp->xdr; const struct nfsd4_layout_ops *ops; __be32 *p; @@ -4182,9 +4263,9 @@ nfsd4_encode_layoutget(struct nfsd4_compoundres *resp, __be32 nfserr, } static __be32 -nfsd4_encode_layoutcommit(struct nfsd4_compoundres *resp, __be32 nfserr, - struct nfsd4_layoutcommit *lcp) +nfsd4_encode_layoutcommit(struct nfsd4_compoundres *resp, __be32 nfserr, void *_lcp) { + struct nfsd4_layoutcommit *lcp = _lcp; struct xdr_stream *xdr = &resp->xdr; __be32 *p; @@ -4206,9 +4287,9 @@ nfsd4_encode_layoutcommit(struct nfsd4_compoundres *resp, __be32 nfserr, } static __be32 -nfsd4_encode_layoutreturn(struct nfsd4_compoundres *resp, __be32 nfserr, - struct nfsd4_layoutreturn *lrp) +nfsd4_encode_layoutreturn(struct nfsd4_compoundres *resp, __be32 nfserr, void *_lrp) { + struct nfsd4_layoutreturn *lrp = _lrp; struct xdr_stream *xdr = &resp->xdr; __be32 *p; @@ -4243,9 +4324,9 @@ nfsd42_encode_write_res(struct nfsd4_compoundres *resp, struct nfsd42_write_res } static __be32 -nfsd4_encode_copy(struct nfsd4_compoundres *resp, __be32 nfserr, - struct nfsd4_copy *copy) +nfsd4_encode_copy(struct nfsd4_compoundres *resp, __be32 nfserr, void *_copy) { + struct nfsd4_copy *copy = _copy; __be32 *p; if (!nfserr) { @@ -4262,8 +4343,9 @@ nfsd4_encode_copy(struct nfsd4_compoundres *resp, __be32 nfserr, static __be32 nfsd4_encode_seek(struct nfsd4_compoundres *resp, __be32 nfserr, - struct nfsd4_seek *seek) + void *_seek) { + struct nfsd4_seek *seek= (struct nfsd4_seek *)_seek; __be32 *p; if (nfserr) @@ -4290,87 +4372,87 @@ typedef __be32(* nfsd4_enc)(struct nfsd4_compoundres *, __be32, void *); * done in the decoding phase. */ static nfsd4_enc nfsd4_enc_ops[] = { - [OP_ACCESS] = (nfsd4_enc)nfsd4_encode_access, - [OP_CLOSE] = (nfsd4_enc)nfsd4_encode_close, - [OP_COMMIT] = (nfsd4_enc)nfsd4_encode_commit, - [OP_CREATE] = (nfsd4_enc)nfsd4_encode_create, - [OP_DELEGPURGE] = (nfsd4_enc)nfsd4_encode_noop, - [OP_DELEGRETURN] = (nfsd4_enc)nfsd4_encode_noop, - [OP_GETATTR] = (nfsd4_enc)nfsd4_encode_getattr, - [OP_GETFH] = (nfsd4_enc)nfsd4_encode_getfh, - [OP_LINK] = (nfsd4_enc)nfsd4_encode_link, - [OP_LOCK] = (nfsd4_enc)nfsd4_encode_lock, - [OP_LOCKT] = (nfsd4_enc)nfsd4_encode_lockt, - [OP_LOCKU] = (nfsd4_enc)nfsd4_encode_locku, - [OP_LOOKUP] = (nfsd4_enc)nfsd4_encode_noop, - [OP_LOOKUPP] = (nfsd4_enc)nfsd4_encode_noop, - [OP_NVERIFY] = (nfsd4_enc)nfsd4_encode_noop, - [OP_OPEN] = (nfsd4_enc)nfsd4_encode_open, - [OP_OPENATTR] = (nfsd4_enc)nfsd4_encode_noop, - [OP_OPEN_CONFIRM] = (nfsd4_enc)nfsd4_encode_open_confirm, - [OP_OPEN_DOWNGRADE] = (nfsd4_enc)nfsd4_encode_open_downgrade, - [OP_PUTFH] = (nfsd4_enc)nfsd4_encode_noop, - [OP_PUTPUBFH] = (nfsd4_enc)nfsd4_encode_noop, - [OP_PUTROOTFH] = (nfsd4_enc)nfsd4_encode_noop, - [OP_READ] = (nfsd4_enc)nfsd4_encode_read, - [OP_READDIR] = (nfsd4_enc)nfsd4_encode_readdir, - [OP_READLINK] = (nfsd4_enc)nfsd4_encode_readlink, - [OP_REMOVE] = (nfsd4_enc)nfsd4_encode_remove, - [OP_RENAME] = (nfsd4_enc)nfsd4_encode_rename, - [OP_RENEW] = (nfsd4_enc)nfsd4_encode_noop, - [OP_RESTOREFH] = (nfsd4_enc)nfsd4_encode_noop, - [OP_SAVEFH] = (nfsd4_enc)nfsd4_encode_noop, - [OP_SECINFO] = (nfsd4_enc)nfsd4_encode_secinfo, - [OP_SETATTR] = (nfsd4_enc)nfsd4_encode_setattr, - [OP_SETCLIENTID] = (nfsd4_enc)nfsd4_encode_setclientid, - [OP_SETCLIENTID_CONFIRM] = (nfsd4_enc)nfsd4_encode_noop, - [OP_VERIFY] = (nfsd4_enc)nfsd4_encode_noop, - [OP_WRITE] = (nfsd4_enc)nfsd4_encode_write, - [OP_RELEASE_LOCKOWNER] = (nfsd4_enc)nfsd4_encode_noop, + [OP_ACCESS] = nfsd4_encode_access, + [OP_CLOSE] = nfsd4_encode_close, + [OP_COMMIT] = nfsd4_encode_commit, + [OP_CREATE] = nfsd4_encode_create, + [OP_DELEGPURGE] = nfsd4_encode_noop, + [OP_DELEGRETURN] = nfsd4_encode_noop, + [OP_GETATTR] = nfsd4_encode_getattr, + [OP_GETFH] = nfsd4_encode_getfh, + [OP_LINK] = nfsd4_encode_link, + [OP_LOCK] = nfsd4_encode_lock, + [OP_LOCKT] = nfsd4_encode_lockt, + [OP_LOCKU] = nfsd4_encode_locku, + [OP_LOOKUP] = nfsd4_encode_noop, + [OP_LOOKUPP] = nfsd4_encode_noop, + [OP_NVERIFY] = nfsd4_encode_noop, + [OP_OPEN] = nfsd4_encode_open, + [OP_OPENATTR] = nfsd4_encode_noop, + [OP_OPEN_CONFIRM] = nfsd4_encode_open_confirm, + [OP_OPEN_DOWNGRADE] = nfsd4_encode_open_downgrade, + [OP_PUTFH] = nfsd4_encode_noop, + [OP_PUTPUBFH] = nfsd4_encode_noop, + [OP_PUTROOTFH] = nfsd4_encode_noop, + [OP_READ] = nfsd4_encode_read, + [OP_READDIR] = nfsd4_encode_readdir, + [OP_READLINK] = nfsd4_encode_readlink, + [OP_REMOVE] = nfsd4_encode_remove, + [OP_RENAME] = nfsd4_encode_rename, + [OP_RENEW] = nfsd4_encode_noop, + [OP_RESTOREFH] = nfsd4_encode_noop, + [OP_SAVEFH] = nfsd4_encode_noop, + [OP_SECINFO] = nfsd4_encode_secinfo, + [OP_SETATTR] = nfsd4_encode_setattr, + [OP_SETCLIENTID] = nfsd4_encode_setclientid, + [OP_SETCLIENTID_CONFIRM] = nfsd4_encode_noop, + [OP_VERIFY] = nfsd4_encode_noop, + [OP_WRITE] = nfsd4_encode_write, + [OP_RELEASE_LOCKOWNER] = nfsd4_encode_noop, /* NFSv4.1 operations */ - [OP_BACKCHANNEL_CTL] = (nfsd4_enc)nfsd4_encode_noop, - [OP_BIND_CONN_TO_SESSION] = (nfsd4_enc)nfsd4_encode_bind_conn_to_session, - [OP_EXCHANGE_ID] = (nfsd4_enc)nfsd4_encode_exchange_id, - [OP_CREATE_SESSION] = (nfsd4_enc)nfsd4_encode_create_session, - [OP_DESTROY_SESSION] = (nfsd4_enc)nfsd4_encode_noop, - [OP_FREE_STATEID] = (nfsd4_enc)nfsd4_encode_noop, - [OP_GET_DIR_DELEGATION] = (nfsd4_enc)nfsd4_encode_noop, + [OP_BACKCHANNEL_CTL] = nfsd4_encode_noop, + [OP_BIND_CONN_TO_SESSION] = nfsd4_encode_bind_conn_to_session, + [OP_EXCHANGE_ID] = nfsd4_encode_exchange_id, + [OP_CREATE_SESSION] = nfsd4_encode_create_session, + [OP_DESTROY_SESSION] = nfsd4_encode_noop, + [OP_FREE_STATEID] = nfsd4_encode_noop, + [OP_GET_DIR_DELEGATION] = nfsd4_encode_noop, #ifdef CONFIG_NFSD_PNFS - [OP_GETDEVICEINFO] = (nfsd4_enc)nfsd4_encode_getdeviceinfo, - [OP_GETDEVICELIST] = (nfsd4_enc)nfsd4_encode_noop, - [OP_LAYOUTCOMMIT] = (nfsd4_enc)nfsd4_encode_layoutcommit, - [OP_LAYOUTGET] = (nfsd4_enc)nfsd4_encode_layoutget, - [OP_LAYOUTRETURN] = (nfsd4_enc)nfsd4_encode_layoutreturn, + [OP_GETDEVICEINFO] = nfsd4_encode_getdeviceinfo, + [OP_GETDEVICELIST] = nfsd4_encode_noop, + [OP_LAYOUTCOMMIT] = nfsd4_encode_layoutcommit, + [OP_LAYOUTGET] = nfsd4_encode_layoutget, + [OP_LAYOUTRETURN] = nfsd4_encode_layoutreturn, #else - [OP_GETDEVICEINFO] = (nfsd4_enc)nfsd4_encode_noop, - [OP_GETDEVICELIST] = (nfsd4_enc)nfsd4_encode_noop, - [OP_LAYOUTCOMMIT] = (nfsd4_enc)nfsd4_encode_noop, - [OP_LAYOUTGET] = (nfsd4_enc)nfsd4_encode_noop, - [OP_LAYOUTRETURN] = (nfsd4_enc)nfsd4_encode_noop, + [OP_GETDEVICEINFO] = nfsd4_encode_noop, + [OP_GETDEVICELIST] = nfsd4_encode_noop, + [OP_LAYOUTCOMMIT] = nfsd4_encode_noop, + [OP_LAYOUTGET] = nfsd4_encode_noop, + [OP_LAYOUTRETURN] = nfsd4_encode_noop, #endif - [OP_SECINFO_NO_NAME] = (nfsd4_enc)nfsd4_encode_secinfo_no_name, - [OP_SEQUENCE] = (nfsd4_enc)nfsd4_encode_sequence, - [OP_SET_SSV] = (nfsd4_enc)nfsd4_encode_noop, - [OP_TEST_STATEID] = (nfsd4_enc)nfsd4_encode_test_stateid, - [OP_WANT_DELEGATION] = (nfsd4_enc)nfsd4_encode_noop, - [OP_DESTROY_CLIENTID] = (nfsd4_enc)nfsd4_encode_noop, - [OP_RECLAIM_COMPLETE] = (nfsd4_enc)nfsd4_encode_noop, + [OP_SECINFO_NO_NAME] = nfsd4_encode_secinfo_no_name, + [OP_SEQUENCE] = nfsd4_encode_sequence, + [OP_SET_SSV] = nfsd4_encode_noop, + [OP_TEST_STATEID] = nfsd4_encode_test_stateid, + [OP_WANT_DELEGATION] = nfsd4_encode_noop, + [OP_DESTROY_CLIENTID] = nfsd4_encode_noop, + [OP_RECLAIM_COMPLETE] = nfsd4_encode_noop, /* NFSv4.2 operations */ - [OP_ALLOCATE] = (nfsd4_enc)nfsd4_encode_noop, - [OP_COPY] = (nfsd4_enc)nfsd4_encode_copy, - [OP_COPY_NOTIFY] = (nfsd4_enc)nfsd4_encode_noop, - [OP_DEALLOCATE] = (nfsd4_enc)nfsd4_encode_noop, - [OP_IO_ADVISE] = (nfsd4_enc)nfsd4_encode_noop, - [OP_LAYOUTERROR] = (nfsd4_enc)nfsd4_encode_noop, - [OP_LAYOUTSTATS] = (nfsd4_enc)nfsd4_encode_noop, - [OP_OFFLOAD_CANCEL] = (nfsd4_enc)nfsd4_encode_noop, - [OP_OFFLOAD_STATUS] = (nfsd4_enc)nfsd4_encode_noop, - [OP_READ_PLUS] = (nfsd4_enc)nfsd4_encode_noop, - [OP_SEEK] = (nfsd4_enc)nfsd4_encode_seek, - [OP_WRITE_SAME] = (nfsd4_enc)nfsd4_encode_noop, - [OP_CLONE] = (nfsd4_enc)nfsd4_encode_noop, + [OP_ALLOCATE] = nfsd4_encode_noop, + [OP_COPY] = nfsd4_encode_copy, + [OP_COPY_NOTIFY] = nfsd4_encode_noop, + [OP_DEALLOCATE] = nfsd4_encode_noop, + [OP_IO_ADVISE] = nfsd4_encode_noop, + [OP_LAYOUTERROR] = nfsd4_encode_noop, + [OP_LAYOUTSTATS] = nfsd4_encode_noop, + [OP_OFFLOAD_CANCEL] = nfsd4_encode_noop, + [OP_OFFLOAD_STATUS] = nfsd4_encode_noop, + [OP_READ_PLUS] = nfsd4_encode_noop, + [OP_SEEK] = nfsd4_encode_seek, + [OP_WRITE_SAME] = nfsd4_encode_noop, + [OP_CLONE] = nfsd4_encode_noop, }; /* @@ -4495,9 +4577,9 @@ nfsd4_encode_replay(struct xdr_stream *xdr, struct nfsd4_op *op) } int -nfs4svc_encode_voidres(struct svc_rqst *rqstp, __be32 *p, void *dummy) +nfs4svc_encode_voidres(void *rqstp, __be32 *p, void *dummy) { - return xdr_ressize_check(rqstp, p); + return xdr_ressize_check(rqstp, p); } int nfsd4_release_compoundargs(void *rq, __be32 *p, void *resp) @@ -4520,8 +4602,11 @@ int nfsd4_release_compoundargs(void *rq, __be32 *p, void *resp) } int -nfs4svc_decode_compoundargs(struct svc_rqst *rqstp, __be32 *p, struct nfsd4_compoundargs *args) +nfs4svc_decode_compoundargs(void *_rqstp, __be32 *p, void *_args) { + struct svc_rqst *rqstp = _rqstp; + struct nfsd4_compoundargs *args = _args; + if (rqstp->rq_arg.head[0].iov_len % 4) { /* client is nuts */ dprintk("%s: compound not properly padded! (peeraddr=%pISc xid=0x%x)", @@ -4541,11 +4626,13 @@ nfs4svc_decode_compoundargs(struct svc_rqst *rqstp, __be32 *p, struct nfsd4_comp } int -nfs4svc_encode_compoundres(struct svc_rqst *rqstp, __be32 *p, struct nfsd4_compoundres *resp) +nfs4svc_encode_compoundres(void *_rqstp, __be32 *p, void *_resp) { /* * All that remains is to write the tag and operation count... */ + struct svc_rqst *rqstp = _rqstp; + struct nfsd4_compoundres *resp = _resp; struct xdr_buf *buf = resp->xdr.buf; WARN_ON_ONCE(buf->len != buf->head[0].iov_len + buf->page_len + diff --git a/fs/nfsd/nfsproc.c b/fs/nfsd/nfsproc.c index 010aff5..6471987 100644 --- a/fs/nfsd/nfsproc.c +++ b/fs/nfsd/nfsproc.c @@ -39,9 +39,11 @@ nfsd_return_dirop(__be32 err, struct nfsd_diropres *resp) * N.B. After this call resp->fh needs an fh_put */ static __be32 -nfsd_proc_getattr(struct svc_rqst *rqstp, struct nfsd_fhandle *argp, - struct nfsd_attrstat *resp) +nfsd_proc_getattr(struct svc_rqst *rqstp, void *_argp, + void *_resp) { + struct nfsd_fhandle *argp = _argp; + struct nfsd_attrstat *resp = _resp; __be32 nfserr; dprintk("nfsd: GETATTR %s\n", SVCFH_fmt(&argp->fh)); @@ -56,9 +58,11 @@ nfsd_proc_getattr(struct svc_rqst *rqstp, struct nfsd_fhandle *argp, * N.B. After this call resp->fh needs an fh_put */ static __be32 -nfsd_proc_setattr(struct svc_rqst *rqstp, struct nfsd_sattrargs *argp, - struct nfsd_attrstat *resp) +nfsd_proc_setattr(struct svc_rqst *rqstp, void *_argp, + void *_resp) { + struct nfsd_sattrargs *argp = _argp; + struct nfsd_attrstat *resp = _resp; struct iattr *iap = &argp->attrs; struct svc_fh *fhp; __be32 nfserr; @@ -122,9 +126,11 @@ nfsd_proc_setattr(struct svc_rqst *rqstp, struct nfsd_sattrargs *argp, * N.B. After this call resp->fh needs an fh_put */ static __be32 -nfsd_proc_lookup(struct svc_rqst *rqstp, struct nfsd_diropargs *argp, - struct nfsd_diropres *resp) +nfsd_proc_lookup(struct svc_rqst *rqstp, void *_argp, + void *_resp) { + struct nfsd_diropargs *argp = _argp; + struct nfsd_diropres *resp = _resp; __be32 nfserr; dprintk("nfsd: LOOKUP %s %.*s\n", @@ -142,9 +148,11 @@ nfsd_proc_lookup(struct svc_rqst *rqstp, struct nfsd_diropargs *argp, * Read a symlink. */ static __be32 -nfsd_proc_readlink(struct svc_rqst *rqstp, struct nfsd_readlinkargs *argp, - struct nfsd_readlinkres *resp) +nfsd_proc_readlink(struct svc_rqst *rqstp, void *_argp, + void *_resp) { + struct nfsd_readlinkargs *argp = _argp; + struct nfsd_readlinkres *resp = _resp; __be32 nfserr; dprintk("nfsd: READLINK %s\n", SVCFH_fmt(&argp->fh)); @@ -162,9 +170,11 @@ nfsd_proc_readlink(struct svc_rqst *rqstp, struct nfsd_readlinkargs *argp, * N.B. After this call resp->fh needs an fh_put */ static __be32 -nfsd_proc_read(struct svc_rqst *rqstp, struct nfsd_readargs *argp, - struct nfsd_readres *resp) +nfsd_proc_read(struct svc_rqst *rqstp, void *_argp, + void *_resp) { + struct nfsd_readargs *argp = _argp; + struct nfsd_readres *resp = _resp; __be32 nfserr; dprintk("nfsd: READ %s %d bytes at %d\n", @@ -200,9 +210,11 @@ nfsd_proc_read(struct svc_rqst *rqstp, struct nfsd_readargs *argp, * N.B. After this call resp->fh needs an fh_put */ static __be32 -nfsd_proc_write(struct svc_rqst *rqstp, struct nfsd_writeargs *argp, - struct nfsd_attrstat *resp) +nfsd_proc_write(struct svc_rqst *rqstp, void *_argp, + void *_resp) { + struct nfsd_writeargs *argp = _argp; + struct nfsd_attrstat *resp = _resp; __be32 nfserr; int stable = 1; unsigned long cnt = argp->len; @@ -226,9 +238,11 @@ nfsd_proc_write(struct svc_rqst *rqstp, struct nfsd_writeargs *argp, * N.B. After this call _both_ argp->fh and resp->fh need an fh_put */ static __be32 -nfsd_proc_create(struct svc_rqst *rqstp, struct nfsd_createargs *argp, - struct nfsd_diropres *resp) +nfsd_proc_create(struct svc_rqst *rqstp, void *_argp, + void *_resp) { + struct nfsd_createargs *argp = _argp; + struct nfsd_diropres *resp = _resp; svc_fh *dirfhp = &argp->fh; svc_fh *newfhp = &resp->fh; struct iattr *attr = &argp->attrs; @@ -381,9 +395,10 @@ nfsd_proc_create(struct svc_rqst *rqstp, struct nfsd_createargs *argp, } static __be32 -nfsd_proc_remove(struct svc_rqst *rqstp, struct nfsd_diropargs *argp, +nfsd_proc_remove(struct svc_rqst *rqstp, void *_argp, void *resp) { + struct nfsd_diropargs *argp = _argp; __be32 nfserr; dprintk("nfsd: REMOVE %s %.*s\n", SVCFH_fmt(&argp->fh), @@ -396,9 +411,10 @@ nfsd_proc_remove(struct svc_rqst *rqstp, struct nfsd_diropargs *argp, } static __be32 -nfsd_proc_rename(struct svc_rqst *rqstp, struct nfsd_renameargs *argp, +nfsd_proc_rename(struct svc_rqst *rqstp, void *_argp, void *resp) { + struct nfsd_renameargs *argp = _argp; __be32 nfserr; dprintk("nfsd: RENAME %s %.*s -> \n", @@ -414,9 +430,10 @@ nfsd_proc_rename(struct svc_rqst *rqstp, struct nfsd_renameargs *argp, } static __be32 -nfsd_proc_link(struct svc_rqst *rqstp, struct nfsd_linkargs *argp, +nfsd_proc_link(struct svc_rqst *rqstp, void *_argp, void *resp) { + struct nfsd_linkargs *argp = _argp; __be32 nfserr; dprintk("nfsd: LINK %s ->\n", @@ -434,9 +451,10 @@ nfsd_proc_link(struct svc_rqst *rqstp, struct nfsd_linkargs *argp, } static __be32 -nfsd_proc_symlink(struct svc_rqst *rqstp, struct nfsd_symlinkargs *argp, +nfsd_proc_symlink(struct svc_rqst *rqstp, void *_argp, void *resp) { + struct nfsd_symlinkargs *argp = _argp; struct svc_fh newfh; __be32 nfserr; @@ -464,9 +482,11 @@ nfsd_proc_symlink(struct svc_rqst *rqstp, struct nfsd_symlinkargs *argp, * N.B. After this call resp->fh needs an fh_put */ static __be32 -nfsd_proc_mkdir(struct svc_rqst *rqstp, struct nfsd_createargs *argp, - struct nfsd_diropres *resp) +nfsd_proc_mkdir(struct svc_rqst *rqstp, void *_argp, + void *_resp) { + struct nfsd_createargs *argp = _argp; + struct nfsd_diropres *resp = _resp; __be32 nfserr; dprintk("nfsd: MKDIR %s %.*s\n", SVCFH_fmt(&argp->fh), argp->len, argp->name); @@ -488,9 +508,10 @@ nfsd_proc_mkdir(struct svc_rqst *rqstp, struct nfsd_createargs *argp, * Remove a directory */ static __be32 -nfsd_proc_rmdir(struct svc_rqst *rqstp, struct nfsd_diropargs *argp, +nfsd_proc_rmdir(struct svc_rqst *rqstp, void *_argp, void *resp) { + struct nfsd_diropargs *argp = _argp; __be32 nfserr; dprintk("nfsd: RMDIR %s %.*s\n", SVCFH_fmt(&argp->fh), argp->len, argp->name); @@ -504,9 +525,11 @@ nfsd_proc_rmdir(struct svc_rqst *rqstp, struct nfsd_diropargs *argp, * Read a portion of a directory. */ static __be32 -nfsd_proc_readdir(struct svc_rqst *rqstp, struct nfsd_readdirargs *argp, - struct nfsd_readdirres *resp) +nfsd_proc_readdir(struct svc_rqst *rqstp, void *_argp, + void *_resp) { + struct nfsd_readdirargs *argp = _argp; + struct nfsd_readdirres *resp = _resp; int count; __be32 nfserr; loff_t offset; @@ -544,9 +567,11 @@ nfsd_proc_readdir(struct svc_rqst *rqstp, struct nfsd_readdirargs *argp, * Get file system info */ static __be32 -nfsd_proc_statfs(struct svc_rqst * rqstp, struct nfsd_fhandle *argp, - struct nfsd_statfsres *resp) +nfsd_proc_statfs(struct svc_rqst * rqstp, void *_argp, + void *_resp) { + struct nfsd_fhandle *argp = _argp; + struct nfsd_statfsres *resp = _resp; __be32 nfserr; dprintk("nfsd: STATFS %s\n", SVCFH_fmt(&argp->fh)); @@ -569,166 +594,166 @@ struct nfsd_void { int dummy; }; static struct svc_procedure nfsd_procedures2[18] = { [NFSPROC_NULL] = { - .pc_func = (svc_procfunc) nfsd_proc_null, - .pc_decode = (kxdrproc_t) nfssvc_decode_void, - .pc_encode = (kxdrproc_t) nfssvc_encode_void, + .pc_func = nfsd_proc_null, + .pc_decode = nfssvc_decode_void, + .pc_encode = nfssvc_encode_void, .pc_argsize = sizeof(struct nfsd_void), .pc_ressize = sizeof(struct nfsd_void), .pc_cachetype = RC_NOCACHE, .pc_xdrressize = ST, }, [NFSPROC_GETATTR] = { - .pc_func = (svc_procfunc) nfsd_proc_getattr, - .pc_decode = (kxdrproc_t) nfssvc_decode_fhandle, - .pc_encode = (kxdrproc_t) nfssvc_encode_attrstat, - .pc_release = (kxdrproc_t) nfssvc_release_fhandle, + .pc_func = nfsd_proc_getattr, + .pc_decode = nfssvc_decode_fhandle, + .pc_encode = nfssvc_encode_attrstat, + .pc_release = nfssvc_release_fhandle, .pc_argsize = sizeof(struct nfsd_fhandle), .pc_ressize = sizeof(struct nfsd_attrstat), .pc_cachetype = RC_NOCACHE, .pc_xdrressize = ST+AT, }, [NFSPROC_SETATTR] = { - .pc_func = (svc_procfunc) nfsd_proc_setattr, - .pc_decode = (kxdrproc_t) nfssvc_decode_sattrargs, - .pc_encode = (kxdrproc_t) nfssvc_encode_attrstat, - .pc_release = (kxdrproc_t) nfssvc_release_fhandle, + .pc_func = nfsd_proc_setattr, + .pc_decode = nfssvc_decode_sattrargs, + .pc_encode = nfssvc_encode_attrstat, + .pc_release = nfssvc_release_fhandle, .pc_argsize = sizeof(struct nfsd_sattrargs), .pc_ressize = sizeof(struct nfsd_attrstat), .pc_cachetype = RC_REPLBUFF, .pc_xdrressize = ST+AT, }, [NFSPROC_ROOT] = { - .pc_decode = (kxdrproc_t) nfssvc_decode_void, - .pc_encode = (kxdrproc_t) nfssvc_encode_void, + .pc_decode = nfssvc_decode_void, + .pc_encode = nfssvc_encode_void, .pc_argsize = sizeof(struct nfsd_void), .pc_ressize = sizeof(struct nfsd_void), .pc_cachetype = RC_NOCACHE, .pc_xdrressize = ST, }, [NFSPROC_LOOKUP] = { - .pc_func = (svc_procfunc) nfsd_proc_lookup, - .pc_decode = (kxdrproc_t) nfssvc_decode_diropargs, - .pc_encode = (kxdrproc_t) nfssvc_encode_diropres, - .pc_release = (kxdrproc_t) nfssvc_release_fhandle, + .pc_func = nfsd_proc_lookup, + .pc_decode = nfssvc_decode_diropargs, + .pc_encode = nfssvc_encode_diropres, + .pc_release = nfssvc_release_fhandle, .pc_argsize = sizeof(struct nfsd_diropargs), .pc_ressize = sizeof(struct nfsd_diropres), .pc_cachetype = RC_NOCACHE, .pc_xdrressize = ST+FH+AT, }, [NFSPROC_READLINK] = { - .pc_func = (svc_procfunc) nfsd_proc_readlink, - .pc_decode = (kxdrproc_t) nfssvc_decode_readlinkargs, - .pc_encode = (kxdrproc_t) nfssvc_encode_readlinkres, + .pc_func = nfsd_proc_readlink, + .pc_decode = nfssvc_decode_readlinkargs, + .pc_encode = nfssvc_encode_readlinkres, .pc_argsize = sizeof(struct nfsd_readlinkargs), .pc_ressize = sizeof(struct nfsd_readlinkres), .pc_cachetype = RC_NOCACHE, .pc_xdrressize = ST+1+NFS_MAXPATHLEN/4, }, [NFSPROC_READ] = { - .pc_func = (svc_procfunc) nfsd_proc_read, - .pc_decode = (kxdrproc_t) nfssvc_decode_readargs, - .pc_encode = (kxdrproc_t) nfssvc_encode_readres, - .pc_release = (kxdrproc_t) nfssvc_release_fhandle, + .pc_func = nfsd_proc_read, + .pc_decode = nfssvc_decode_readargs, + .pc_encode = nfssvc_encode_readres, + .pc_release = nfssvc_release_fhandle, .pc_argsize = sizeof(struct nfsd_readargs), .pc_ressize = sizeof(struct nfsd_readres), .pc_cachetype = RC_NOCACHE, .pc_xdrressize = ST+AT+1+NFSSVC_MAXBLKSIZE_V2/4, }, [NFSPROC_WRITECACHE] = { - .pc_decode = (kxdrproc_t) nfssvc_decode_void, - .pc_encode = (kxdrproc_t) nfssvc_encode_void, + .pc_decode = nfssvc_decode_void, + .pc_encode = nfssvc_encode_void, .pc_argsize = sizeof(struct nfsd_void), .pc_ressize = sizeof(struct nfsd_void), .pc_cachetype = RC_NOCACHE, .pc_xdrressize = ST, }, [NFSPROC_WRITE] = { - .pc_func = (svc_procfunc) nfsd_proc_write, - .pc_decode = (kxdrproc_t) nfssvc_decode_writeargs, - .pc_encode = (kxdrproc_t) nfssvc_encode_attrstat, - .pc_release = (kxdrproc_t) nfssvc_release_fhandle, + .pc_func = nfsd_proc_write, + .pc_decode = nfssvc_decode_writeargs, + .pc_encode = nfssvc_encode_attrstat, + .pc_release = nfssvc_release_fhandle, .pc_argsize = sizeof(struct nfsd_writeargs), .pc_ressize = sizeof(struct nfsd_attrstat), .pc_cachetype = RC_REPLBUFF, .pc_xdrressize = ST+AT, }, [NFSPROC_CREATE] = { - .pc_func = (svc_procfunc) nfsd_proc_create, - .pc_decode = (kxdrproc_t) nfssvc_decode_createargs, - .pc_encode = (kxdrproc_t) nfssvc_encode_diropres, - .pc_release = (kxdrproc_t) nfssvc_release_fhandle, + .pc_func = nfsd_proc_create, + .pc_decode = nfssvc_decode_createargs, + .pc_encode = nfssvc_encode_diropres, + .pc_release = nfssvc_release_fhandle, .pc_argsize = sizeof(struct nfsd_createargs), .pc_ressize = sizeof(struct nfsd_diropres), .pc_cachetype = RC_REPLBUFF, .pc_xdrressize = ST+FH+AT, }, [NFSPROC_REMOVE] = { - .pc_func = (svc_procfunc) nfsd_proc_remove, - .pc_decode = (kxdrproc_t) nfssvc_decode_diropargs, - .pc_encode = (kxdrproc_t) nfssvc_encode_void, + .pc_func = nfsd_proc_remove, + .pc_decode = nfssvc_decode_diropargs, + .pc_encode = nfssvc_encode_void, .pc_argsize = sizeof(struct nfsd_diropargs), .pc_ressize = sizeof(struct nfsd_void), .pc_cachetype = RC_REPLSTAT, .pc_xdrressize = ST, }, [NFSPROC_RENAME] = { - .pc_func = (svc_procfunc) nfsd_proc_rename, - .pc_decode = (kxdrproc_t) nfssvc_decode_renameargs, - .pc_encode = (kxdrproc_t) nfssvc_encode_void, + .pc_func = nfsd_proc_rename, + .pc_decode = nfssvc_decode_renameargs, + .pc_encode = nfssvc_encode_void, .pc_argsize = sizeof(struct nfsd_renameargs), .pc_ressize = sizeof(struct nfsd_void), .pc_cachetype = RC_REPLSTAT, .pc_xdrressize = ST, }, [NFSPROC_LINK] = { - .pc_func = (svc_procfunc) nfsd_proc_link, - .pc_decode = (kxdrproc_t) nfssvc_decode_linkargs, - .pc_encode = (kxdrproc_t) nfssvc_encode_void, + .pc_func = nfsd_proc_link, + .pc_decode = nfssvc_decode_linkargs, + .pc_encode = nfssvc_encode_void, .pc_argsize = sizeof(struct nfsd_linkargs), .pc_ressize = sizeof(struct nfsd_void), .pc_cachetype = RC_REPLSTAT, .pc_xdrressize = ST, }, [NFSPROC_SYMLINK] = { - .pc_func = (svc_procfunc) nfsd_proc_symlink, - .pc_decode = (kxdrproc_t) nfssvc_decode_symlinkargs, - .pc_encode = (kxdrproc_t) nfssvc_encode_void, + .pc_func = nfsd_proc_symlink, + .pc_decode = nfssvc_decode_symlinkargs, + .pc_encode = nfssvc_encode_void, .pc_argsize = sizeof(struct nfsd_symlinkargs), .pc_ressize = sizeof(struct nfsd_void), .pc_cachetype = RC_REPLSTAT, .pc_xdrressize = ST, }, [NFSPROC_MKDIR] = { - .pc_func = (svc_procfunc) nfsd_proc_mkdir, - .pc_decode = (kxdrproc_t) nfssvc_decode_createargs, - .pc_encode = (kxdrproc_t) nfssvc_encode_diropres, - .pc_release = (kxdrproc_t) nfssvc_release_fhandle, + .pc_func = nfsd_proc_mkdir, + .pc_decode = nfssvc_decode_createargs, + .pc_encode = nfssvc_encode_diropres, + .pc_release = nfssvc_release_fhandle, .pc_argsize = sizeof(struct nfsd_createargs), .pc_ressize = sizeof(struct nfsd_diropres), .pc_cachetype = RC_REPLBUFF, .pc_xdrressize = ST+FH+AT, }, [NFSPROC_RMDIR] = { - .pc_func = (svc_procfunc) nfsd_proc_rmdir, - .pc_decode = (kxdrproc_t) nfssvc_decode_diropargs, - .pc_encode = (kxdrproc_t) nfssvc_encode_void, + .pc_func = nfsd_proc_rmdir, + .pc_decode = nfssvc_decode_diropargs, + .pc_encode = nfssvc_encode_void, .pc_argsize = sizeof(struct nfsd_diropargs), .pc_ressize = sizeof(struct nfsd_void), .pc_cachetype = RC_REPLSTAT, .pc_xdrressize = ST, }, [NFSPROC_READDIR] = { - .pc_func = (svc_procfunc) nfsd_proc_readdir, - .pc_decode = (kxdrproc_t) nfssvc_decode_readdirargs, - .pc_encode = (kxdrproc_t) nfssvc_encode_readdirres, + .pc_func = nfsd_proc_readdir, + .pc_decode = nfssvc_decode_readdirargs, + .pc_encode = nfssvc_encode_readdirres, .pc_argsize = sizeof(struct nfsd_readdirargs), .pc_ressize = sizeof(struct nfsd_readdirres), .pc_cachetype = RC_NOCACHE, }, [NFSPROC_STATFS] = { - .pc_func = (svc_procfunc) nfsd_proc_statfs, - .pc_decode = (kxdrproc_t) nfssvc_decode_fhandle, - .pc_encode = (kxdrproc_t) nfssvc_encode_statfsres, + .pc_func = nfsd_proc_statfs, + .pc_decode = nfssvc_decode_fhandle, + .pc_encode = nfssvc_encode_statfsres, .pc_argsize = sizeof(struct nfsd_fhandle), .pc_ressize = sizeof(struct nfsd_statfsres), .pc_cachetype = RC_NOCACHE, diff --git a/fs/nfsd/nfsxdr.c b/fs/nfsd/nfsxdr.c index 41b468a..44e3e32 100644 --- a/fs/nfsd/nfsxdr.c +++ b/fs/nfsd/nfsxdr.c @@ -206,14 +206,16 @@ __be32 *nfs2svc_encode_fattr(struct svc_rqst *rqstp, __be32 *p, struct svc_fh *f * XDR decode functions */ int -nfssvc_decode_void(struct svc_rqst *rqstp, __be32 *p, void *dummy) +nfssvc_decode_void(void *rqstp, __be32 *p, void *dummy) { return xdr_argsize_check(rqstp, p); } int -nfssvc_decode_fhandle(struct svc_rqst *rqstp, __be32 *p, struct nfsd_fhandle *args) +nfssvc_decode_fhandle(void *rqstp, __be32 *p, void *_args) { + struct nfsd_fhandle *args = _args; + p = decode_fh(p, &args->fh); if (!p) return 0; @@ -221,9 +223,10 @@ nfssvc_decode_fhandle(struct svc_rqst *rqstp, __be32 *p, struct nfsd_fhandle *ar } int -nfssvc_decode_sattrargs(struct svc_rqst *rqstp, __be32 *p, - struct nfsd_sattrargs *args) +nfssvc_decode_sattrargs(void *rqstp, __be32 *p, void *_args) { + struct nfsd_sattrargs *args = _args; + p = decode_fh(p, &args->fh); if (!p) return 0; @@ -233,9 +236,10 @@ nfssvc_decode_sattrargs(struct svc_rqst *rqstp, __be32 *p, } int -nfssvc_decode_diropargs(struct svc_rqst *rqstp, __be32 *p, - struct nfsd_diropargs *args) +nfssvc_decode_diropargs(void *rqstp, __be32 *p, void *_args) { + struct nfsd_diropargs *args = _args; + if (!(p = decode_fh(p, &args->fh)) || !(p = decode_filename(p, &args->name, &args->len))) return 0; @@ -244,9 +248,10 @@ nfssvc_decode_diropargs(struct svc_rqst *rqstp, __be32 *p, } int -nfssvc_decode_readargs(struct svc_rqst *rqstp, __be32 *p, - struct nfsd_readargs *args) +nfssvc_decode_readargs(void *_rqstp, __be32 *p, void *_args) { + struct svc_rqst *rqstp = _rqstp; + struct nfsd_readargs *args = _args; unsigned int len; int v; p = decode_fh(p, &args->fh); @@ -276,9 +281,10 @@ nfssvc_decode_readargs(struct svc_rqst *rqstp, __be32 *p, } int -nfssvc_decode_writeargs(struct svc_rqst *rqstp, __be32 *p, - struct nfsd_writeargs *args) +nfssvc_decode_writeargs(void *_rqstp, __be32 *p, void *_args) { + struct svc_rqst *rqstp = _rqstp; + struct nfsd_writeargs *args = _args; unsigned int len, hdr, dlen; struct kvec *head = rqstp->rq_arg.head; int v; @@ -330,9 +336,10 @@ nfssvc_decode_writeargs(struct svc_rqst *rqstp, __be32 *p, } int -nfssvc_decode_createargs(struct svc_rqst *rqstp, __be32 *p, - struct nfsd_createargs *args) +nfssvc_decode_createargs(void *rqstp, __be32 *p, void *_args) { + struct nfsd_createargs *args = _args; + if ( !(p = decode_fh(p, &args->fh)) || !(p = decode_filename(p, &args->name, &args->len))) return 0; @@ -342,9 +349,10 @@ nfssvc_decode_createargs(struct svc_rqst *rqstp, __be32 *p, } int -nfssvc_decode_renameargs(struct svc_rqst *rqstp, __be32 *p, - struct nfsd_renameargs *args) +nfssvc_decode_renameargs(void *rqstp, __be32 *p, void *_args) { + struct nfsd_renameargs *args = _args; + if (!(p = decode_fh(p, &args->ffh)) || !(p = decode_filename(p, &args->fname, &args->flen)) || !(p = decode_fh(p, &args->tfh)) @@ -355,8 +363,11 @@ nfssvc_decode_renameargs(struct svc_rqst *rqstp, __be32 *p, } int -nfssvc_decode_readlinkargs(struct svc_rqst *rqstp, __be32 *p, struct nfsd_readlinkargs *args) +nfssvc_decode_readlinkargs(void *_rqstp, __be32 *p, void *_args) { + struct svc_rqst *rqstp = _rqstp; + struct nfsd_readlinkargs *args = _args; + p = decode_fh(p, &args->fh); if (!p) return 0; @@ -366,9 +377,10 @@ nfssvc_decode_readlinkargs(struct svc_rqst *rqstp, __be32 *p, struct nfsd_readli } int -nfssvc_decode_linkargs(struct svc_rqst *rqstp, __be32 *p, - struct nfsd_linkargs *args) +nfssvc_decode_linkargs(void *rqstp, __be32 *p, void *_args) { + struct nfsd_linkargs *args = _args; + if (!(p = decode_fh(p, &args->ffh)) || !(p = decode_fh(p, &args->tfh)) || !(p = decode_filename(p, &args->tname, &args->tlen))) @@ -378,9 +390,10 @@ nfssvc_decode_linkargs(struct svc_rqst *rqstp, __be32 *p, } int -nfssvc_decode_symlinkargs(struct svc_rqst *rqstp, __be32 *p, - struct nfsd_symlinkargs *args) +nfssvc_decode_symlinkargs(void *rqstp, __be32 *p, void *_args) { + struct nfsd_symlinkargs *args = _args; + if ( !(p = decode_fh(p, &args->ffh)) || !(p = decode_filename(p, &args->fname, &args->flen)) || !(p = decode_pathname(p, &args->tname, &args->tlen))) @@ -391,9 +404,11 @@ nfssvc_decode_symlinkargs(struct svc_rqst *rqstp, __be32 *p, } int -nfssvc_decode_readdirargs(struct svc_rqst *rqstp, __be32 *p, - struct nfsd_readdirargs *args) +nfssvc_decode_readdirargs(void *_rqstp, __be32 *p, void *_args) { + struct svc_rqst *rqstp = _rqstp; + struct nfsd_readdirargs *args = _args; + p = decode_fh(p, &args->fh); if (!p) return 0; @@ -409,32 +424,36 @@ nfssvc_decode_readdirargs(struct svc_rqst *rqstp, __be32 *p, * XDR encode functions */ int -nfssvc_encode_void(struct svc_rqst *rqstp, __be32 *p, void *dummy) +nfssvc_encode_void(void *rqstp, __be32 *p, void *dummy) { return xdr_ressize_check(rqstp, p); } int -nfssvc_encode_attrstat(struct svc_rqst *rqstp, __be32 *p, - struct nfsd_attrstat *resp) +nfssvc_encode_attrstat(void *rqstp, __be32 *p, void *_resp) { + struct nfsd_diropres *resp = _resp; + p = encode_fattr(rqstp, p, &resp->fh, &resp->stat); return xdr_ressize_check(rqstp, p); } int -nfssvc_encode_diropres(struct svc_rqst *rqstp, __be32 *p, - struct nfsd_diropres *resp) +nfssvc_encode_diropres(void *rqstp, __be32 *p, void *_resp) { + struct nfsd_diropres *resp = _resp; + p = encode_fh(p, &resp->fh); p = encode_fattr(rqstp, p, &resp->fh, &resp->stat); return xdr_ressize_check(rqstp, p); } int -nfssvc_encode_readlinkres(struct svc_rqst *rqstp, __be32 *p, - struct nfsd_readlinkres *resp) +nfssvc_encode_readlinkres(void *_rqstp, __be32 *p, void *_resp) { + struct svc_rqst *rqstp= _rqstp; + struct nfsd_readlinkres *resp = _resp; + *p++ = htonl(resp->len); xdr_ressize_check(rqstp, p); rqstp->rq_res.page_len = resp->len; @@ -448,9 +467,11 @@ nfssvc_encode_readlinkres(struct svc_rqst *rqstp, __be32 *p, } int -nfssvc_encode_readres(struct svc_rqst *rqstp, __be32 *p, - struct nfsd_readres *resp) +nfssvc_encode_readres(void *_rqstp, __be32 *p, void *_resp) { + struct svc_rqst *rqstp = _rqstp; + struct nfsd_readres *resp = _resp; + p = encode_fattr(rqstp, p, &resp->fh, &resp->stat); *p++ = htonl(resp->count); xdr_ressize_check(rqstp, p); @@ -467,9 +488,11 @@ nfssvc_encode_readres(struct svc_rqst *rqstp, __be32 *p, } int -nfssvc_encode_readdirres(struct svc_rqst *rqstp, __be32 *p, - struct nfsd_readdirres *resp) +nfssvc_encode_readdirres(void *_rqstp, __be32 *p, void *_resp) { + struct svc_rqst *rqstp = _rqstp; + struct nfsd_readdirres *resp = _resp; + xdr_ressize_check(rqstp, p); p = resp->buffer; *p++ = 0; /* no more entries */ @@ -480,9 +503,9 @@ nfssvc_encode_readdirres(struct svc_rqst *rqstp, __be32 *p, } int -nfssvc_encode_statfsres(struct svc_rqst *rqstp, __be32 *p, - struct nfsd_statfsres *resp) +nfssvc_encode_statfsres(void *rqstp, __be32 *p, void *_resp) { + struct nfsd_statfsres *resp = _resp; struct kstatfs *stat = &resp->stats; *p++ = htonl(NFSSVC_MAXBLKSIZE_V2); /* max transfer size */ @@ -542,9 +565,10 @@ nfssvc_encode_entry(void *ccdv, const char *name, * XDR release functions */ int -nfssvc_release_fhandle(struct svc_rqst *rqstp, __be32 *p, - struct nfsd_fhandle *resp) +nfssvc_release_fhandle(void *rqstp, __be32 *p, void *_resp) { + struct nfsd_fhandle *resp = _resp; + fh_put(&resp->fh); return 1; } diff --git a/fs/nfsd/xdr.h b/fs/nfsd/xdr.h index 4f0481d..193c8e7 100644 --- a/fs/nfsd/xdr.h +++ b/fs/nfsd/xdr.h @@ -131,40 +131,30 @@ union nfsd_xdrstore { #define NFS2_SVC_XDRSIZE sizeof(union nfsd_xdrstore) -int nfssvc_decode_void(struct svc_rqst *, __be32 *, void *); -int nfssvc_decode_fhandle(struct svc_rqst *, __be32 *, struct nfsd_fhandle *); -int nfssvc_decode_sattrargs(struct svc_rqst *, __be32 *, - struct nfsd_sattrargs *); -int nfssvc_decode_diropargs(struct svc_rqst *, __be32 *, - struct nfsd_diropargs *); -int nfssvc_decode_readargs(struct svc_rqst *, __be32 *, - struct nfsd_readargs *); -int nfssvc_decode_writeargs(struct svc_rqst *, __be32 *, - struct nfsd_writeargs *); -int nfssvc_decode_createargs(struct svc_rqst *, __be32 *, - struct nfsd_createargs *); -int nfssvc_decode_renameargs(struct svc_rqst *, __be32 *, - struct nfsd_renameargs *); -int nfssvc_decode_readlinkargs(struct svc_rqst *, __be32 *, - struct nfsd_readlinkargs *); -int nfssvc_decode_linkargs(struct svc_rqst *, __be32 *, - struct nfsd_linkargs *); -int nfssvc_decode_symlinkargs(struct svc_rqst *, __be32 *, - struct nfsd_symlinkargs *); -int nfssvc_decode_readdirargs(struct svc_rqst *, __be32 *, - struct nfsd_readdirargs *); -int nfssvc_encode_void(struct svc_rqst *, __be32 *, void *); -int nfssvc_encode_attrstat(struct svc_rqst *, __be32 *, struct nfsd_attrstat *); -int nfssvc_encode_diropres(struct svc_rqst *, __be32 *, struct nfsd_diropres *); -int nfssvc_encode_readlinkres(struct svc_rqst *, __be32 *, struct nfsd_readlinkres *); -int nfssvc_encode_readres(struct svc_rqst *, __be32 *, struct nfsd_readres *); -int nfssvc_encode_statfsres(struct svc_rqst *, __be32 *, struct nfsd_statfsres *); -int nfssvc_encode_readdirres(struct svc_rqst *, __be32 *, struct nfsd_readdirres *); +int nfssvc_decode_void(void *, __be32 *, void *); +int nfssvc_decode_fhandle(void *, __be32 *, void *); +int nfssvc_decode_sattrargs(void *, __be32 *, void *); +int nfssvc_decode_diropargs(void *, __be32 *, void *); +int nfssvc_decode_readargs(void *, __be32 *, void *); +int nfssvc_decode_writeargs(void *, __be32 *, void *); +int nfssvc_decode_createargs(void *, __be32 *, void *); +int nfssvc_decode_renameargs(void *, __be32 *, void *); +int nfssvc_decode_readlinkargs(void *, __be32 *, void *); +int nfssvc_decode_linkargs(void *, __be32 *, void *); +int nfssvc_decode_symlinkargs(void *, __be32 *, void *); +int nfssvc_decode_readdirargs(void *, __be32 *, void *); +int nfssvc_encode_void(void *, __be32 *, void *); +int nfssvc_encode_attrstat(void *, __be32 *, void *); +int nfssvc_encode_diropres(void *, __be32 *, void *); +int nfssvc_encode_readlinkres(void *, __be32 *, void *); +int nfssvc_encode_readres(void *, __be32 *, void *); +int nfssvc_encode_statfsres(void *, __be32 *, void *); +int nfssvc_encode_readdirres(void *, __be32 *, void *); int nfssvc_encode_entry(void *, const char *name, int namlen, loff_t offset, u64 ino, unsigned int); -int nfssvc_release_fhandle(struct svc_rqst *, __be32 *, struct nfsd_fhandle *); +int nfssvc_release_fhandle(void *, __be32 *, void *); /* Helper functions for NFSv2 ACL code */ __be32 *nfs2svc_encode_fattr(struct svc_rqst *rqstp, __be32 *p, struct svc_fh *fhp, struct kstat *stat); diff --git a/fs/nfsd/xdr3.h b/fs/nfsd/xdr3.h index 335e04a..d77a9c9 100644 --- a/fs/nfsd/xdr3.h +++ b/fs/nfsd/xdr3.h @@ -269,71 +269,41 @@ union nfsd3_xdrstore { #define NFS3_SVC_XDRSIZE sizeof(union nfsd3_xdrstore) -int nfs3svc_decode_fhandle(struct svc_rqst *, __be32 *, struct nfsd_fhandle *); -int nfs3svc_decode_sattrargs(struct svc_rqst *, __be32 *, - struct nfsd3_sattrargs *); -int nfs3svc_decode_diropargs(struct svc_rqst *, __be32 *, - struct nfsd3_diropargs *); -int nfs3svc_decode_accessargs(struct svc_rqst *, __be32 *, - struct nfsd3_accessargs *); -int nfs3svc_decode_readargs(struct svc_rqst *, __be32 *, - struct nfsd3_readargs *); -int nfs3svc_decode_writeargs(struct svc_rqst *, __be32 *, - struct nfsd3_writeargs *); -int nfs3svc_decode_createargs(struct svc_rqst *, __be32 *, - struct nfsd3_createargs *); -int nfs3svc_decode_mkdirargs(struct svc_rqst *, __be32 *, - struct nfsd3_createargs *); -int nfs3svc_decode_mknodargs(struct svc_rqst *, __be32 *, - struct nfsd3_mknodargs *); -int nfs3svc_decode_renameargs(struct svc_rqst *, __be32 *, - struct nfsd3_renameargs *); -int nfs3svc_decode_readlinkargs(struct svc_rqst *, __be32 *, - struct nfsd3_readlinkargs *); -int nfs3svc_decode_linkargs(struct svc_rqst *, __be32 *, - struct nfsd3_linkargs *); -int nfs3svc_decode_symlinkargs(struct svc_rqst *, __be32 *, - struct nfsd3_symlinkargs *); -int nfs3svc_decode_readdirargs(struct svc_rqst *, __be32 *, - struct nfsd3_readdirargs *); -int nfs3svc_decode_readdirplusargs(struct svc_rqst *, __be32 *, - struct nfsd3_readdirargs *); -int nfs3svc_decode_commitargs(struct svc_rqst *, __be32 *, - struct nfsd3_commitargs *); -int nfs3svc_encode_voidres(struct svc_rqst *, __be32 *, void *); -int nfs3svc_encode_attrstat(struct svc_rqst *, __be32 *, - struct nfsd3_attrstat *); -int nfs3svc_encode_wccstat(struct svc_rqst *, __be32 *, - struct nfsd3_attrstat *); -int nfs3svc_encode_diropres(struct svc_rqst *, __be32 *, - struct nfsd3_diropres *); -int nfs3svc_encode_accessres(struct svc_rqst *, __be32 *, - struct nfsd3_accessres *); -int nfs3svc_encode_readlinkres(struct svc_rqst *, __be32 *, - struct nfsd3_readlinkres *); -int nfs3svc_encode_readres(struct svc_rqst *, __be32 *, struct nfsd3_readres *); -int nfs3svc_encode_writeres(struct svc_rqst *, __be32 *, struct nfsd3_writeres *); -int nfs3svc_encode_createres(struct svc_rqst *, __be32 *, - struct nfsd3_diropres *); -int nfs3svc_encode_renameres(struct svc_rqst *, __be32 *, - struct nfsd3_renameres *); -int nfs3svc_encode_linkres(struct svc_rqst *, __be32 *, - struct nfsd3_linkres *); -int nfs3svc_encode_readdirres(struct svc_rqst *, __be32 *, - struct nfsd3_readdirres *); -int nfs3svc_encode_fsstatres(struct svc_rqst *, __be32 *, - struct nfsd3_fsstatres *); -int nfs3svc_encode_fsinfores(struct svc_rqst *, __be32 *, - struct nfsd3_fsinfores *); -int nfs3svc_encode_pathconfres(struct svc_rqst *, __be32 *, - struct nfsd3_pathconfres *); -int nfs3svc_encode_commitres(struct svc_rqst *, __be32 *, - struct nfsd3_commitres *); - -int nfs3svc_release_fhandle(struct svc_rqst *, __be32 *, - struct nfsd3_attrstat *); -int nfs3svc_release_fhandle2(struct svc_rqst *, __be32 *, - struct nfsd3_fhandle_pair *); +int nfs3svc_decode_fhandle(void *, __be32 *, void *); +int nfs3svc_decode_sattrargs(void *, __be32 *, void *); +int nfs3svc_decode_diropargs(void *, __be32 *, void *); +int nfs3svc_decode_accessargs(void *, __be32 *, void *); +int nfs3svc_decode_readargs(void *, __be32 *, void *); +int nfs3svc_decode_writeargs(void *, __be32 *, void *); +int nfs3svc_decode_createargs(void *, __be32 *, void *); +int nfs3svc_decode_mkdirargs(void *, __be32 *, void *); +int nfs3svc_decode_mknodargs(void *, __be32 *, void *); +int nfs3svc_decode_renameargs(void *, __be32 *, void *); +int nfs3svc_decode_readlinkargs(void *, __be32 *, void *); +int nfs3svc_decode_linkargs(void *, __be32 *, void *); +int nfs3svc_decode_symlinkargs(void *, __be32 *, void *); +int nfs3svc_decode_readdirargs(void *, __be32 *, void *); +int nfs3svc_decode_readdirplusargs(void *, __be32 *, void *); +int nfs3svc_decode_commitargs(void *, __be32 *, void *); +int nfs3svc_encode_voidres(void *, __be32 *, void *); +int nfs3svc_encode_attrstat(void *, __be32 *, void *); +int nfs3svc_encode_wccstat(void *, __be32 *, void *); +int nfs3svc_encode_diropres(void *, __be32 *, void *); +int nfs3svc_encode_accessres(void *, __be32 *, void *); +int nfs3svc_encode_readlinkres(void *, __be32 *, void *); +int nfs3svc_encode_readres(void *, __be32 *, void *); +int nfs3svc_encode_writeres(void *, __be32 *, void *); +int nfs3svc_encode_createres(void *, __be32 *, void *); +int nfs3svc_encode_renameres(void *, __be32 *, void *); +int nfs3svc_encode_linkres(void *, __be32 *, void *); +int nfs3svc_encode_readdirres(void *, __be32 *, void *); +int nfs3svc_encode_fsstatres(void *, __be32 *, void *); +int nfs3svc_encode_fsinfores(void *, __be32 *, void *); +int nfs3svc_encode_pathconfres(void *, __be32 *, void *); +int nfs3svc_encode_commitres(void *, __be32 *, void *); + +int nfs3svc_release_fhandle(void *, __be32 *, void *); +int nfs3svc_release_fhandle2(void *, __be32 *, void *); int nfs3svc_encode_entry(void *, const char *name, int namlen, loff_t offset, u64 ino, unsigned int); diff --git a/fs/nfsd/xdr4.h b/fs/nfsd/xdr4.h index 8fda4ab..a9433dc 100644 --- a/fs/nfsd/xdr4.h +++ b/fs/nfsd/xdr4.h @@ -682,11 +682,9 @@ set_change_info(struct nfsd4_change_info *cinfo, struct svc_fh *fhp) bool nfsd4_mach_creds_match(struct nfs4_client *cl, struct svc_rqst *rqstp); -int nfs4svc_encode_voidres(struct svc_rqst *, __be32 *, void *); -int nfs4svc_decode_compoundargs(struct svc_rqst *, __be32 *, - struct nfsd4_compoundargs *); -int nfs4svc_encode_compoundres(struct svc_rqst *, __be32 *, - struct nfsd4_compoundres *); +int nfs4svc_encode_voidres(void *, __be32 *, void *); +int nfs4svc_decode_compoundargs(void *, __be32 *, void *); +int nfs4svc_encode_compoundres(void *, __be32 *, void *); __be32 nfsd4_check_resp_size(struct nfsd4_compoundres *, u32); void nfsd4_encode_operation(struct nfsd4_compoundres *, struct nfsd4_op *); void nfsd4_encode_replay(struct xdr_stream *xdr, struct nfsd4_op *op); @@ -696,26 +694,26 @@ __be32 nfsd4_encode_fattr_to_buf(__be32 **p, int words, u32 *bmval, struct svc_rqst *, int ignore_crossmnt); extern __be32 nfsd4_setclientid(struct svc_rqst *rqstp, struct nfsd4_compound_state *, - struct nfsd4_setclientid *setclid); + void *setclid); extern __be32 nfsd4_setclientid_confirm(struct svc_rqst *rqstp, struct nfsd4_compound_state *, - struct nfsd4_setclientid_confirm *setclientid_confirm); + void *setclientid_confirm); extern __be32 nfsd4_exchange_id(struct svc_rqst *rqstp, - struct nfsd4_compound_state *, struct nfsd4_exchange_id *); -extern __be32 nfsd4_backchannel_ctl(struct svc_rqst *, struct nfsd4_compound_state *, struct nfsd4_backchannel_ctl *); -extern __be32 nfsd4_bind_conn_to_session(struct svc_rqst *, struct nfsd4_compound_state *, struct nfsd4_bind_conn_to_session *); + struct nfsd4_compound_state *, void *); +extern __be32 nfsd4_backchannel_ctl(struct svc_rqst *, struct nfsd4_compound_state *, void *); +extern __be32 nfsd4_bind_conn_to_session(struct svc_rqst *, struct nfsd4_compound_state *, void *); extern __be32 nfsd4_create_session(struct svc_rqst *, struct nfsd4_compound_state *, - struct nfsd4_create_session *); + void *); extern __be32 nfsd4_sequence(struct svc_rqst *, struct nfsd4_compound_state *, - struct nfsd4_sequence *); + void *); extern void nfsd4_sequence_done(struct nfsd4_compoundres *resp); extern __be32 nfsd4_destroy_session(struct svc_rqst *, struct nfsd4_compound_state *, - struct nfsd4_destroy_session *); -extern __be32 nfsd4_destroy_clientid(struct svc_rqst *, struct nfsd4_compound_state *, struct nfsd4_destroy_clientid *); -__be32 nfsd4_reclaim_complete(struct svc_rqst *, struct nfsd4_compound_state *, struct nfsd4_reclaim_complete *); + void *); +extern __be32 nfsd4_destroy_clientid(struct svc_rqst *, struct nfsd4_compound_state *, void *); +__be32 nfsd4_reclaim_complete(struct svc_rqst *, struct nfsd4_compound_state *, void *); extern __be32 nfsd4_process_open1(struct nfsd4_compound_state *, struct nfsd4_open *open, struct nfsd_net *nn); extern __be32 nfsd4_process_open2(struct svc_rqst *rqstp, @@ -724,34 +722,34 @@ extern void nfsd4_cstate_clear_replay(struct nfsd4_compound_state *cstate); extern void nfsd4_cleanup_open_state(struct nfsd4_compound_state *cstate, struct nfsd4_open *open); extern __be32 nfsd4_open_confirm(struct svc_rqst *rqstp, - struct nfsd4_compound_state *, struct nfsd4_open_confirm *oc); + struct nfsd4_compound_state *, void *oc); extern __be32 nfsd4_close(struct svc_rqst *rqstp, struct nfsd4_compound_state *, - struct nfsd4_close *close); + void *close); extern __be32 nfsd4_open_downgrade(struct svc_rqst *rqstp, struct nfsd4_compound_state *, - struct nfsd4_open_downgrade *od); + void *od); extern __be32 nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *, - struct nfsd4_lock *lock); + void *lock); extern __be32 nfsd4_lockt(struct svc_rqst *rqstp, struct nfsd4_compound_state *, - struct nfsd4_lockt *lockt); + void *lockt); extern __be32 nfsd4_locku(struct svc_rqst *rqstp, struct nfsd4_compound_state *, - struct nfsd4_locku *locku); + void *locku); extern __be32 nfsd4_release_lockowner(struct svc_rqst *rqstp, struct nfsd4_compound_state *, - struct nfsd4_release_lockowner *rlockowner); + void *rlockowner); extern int nfsd4_release_compoundargs(void *rq, __be32 *p, void *resp); extern __be32 nfsd4_delegreturn(struct svc_rqst *rqstp, - struct nfsd4_compound_state *, struct nfsd4_delegreturn *dr); + struct nfsd4_compound_state *, void *dr); extern __be32 nfsd4_renew(struct svc_rqst *rqstp, - struct nfsd4_compound_state *, clientid_t *clid); + struct nfsd4_compound_state *, void *clid); extern __be32 nfsd4_test_stateid(struct svc_rqst *rqstp, - struct nfsd4_compound_state *, struct nfsd4_test_stateid *test_stateid); + struct nfsd4_compound_state *, void *test_stateid); extern __be32 nfsd4_free_stateid(struct svc_rqst *rqstp, - struct nfsd4_compound_state *, struct nfsd4_free_stateid *free_stateid); + struct nfsd4_compound_state *, void *free_stateid); extern void nfsd4_bump_seqid(struct nfsd4_compound_state *, __be32 nfserr); #endif diff --git a/fs/read_write.c b/fs/read_write.c index 190e0d3..2ac0f9c 100644 --- a/fs/read_write.c +++ b/fs/read_write.c @@ -23,7 +23,8 @@ #include <asm/uaccess.h> #include <asm/unistd.h> -typedef ssize_t (*io_fn_t)(struct file *, char __user *, size_t, loff_t *); +typedef ssize_t (*io_fnr_t)(struct file *, char __user *, size_t, loff_t *); +typedef ssize_t (*io_fnw_t)(struct file *, const char __user *, size_t, loff_t *); typedef ssize_t (*iter_fn_t)(struct kiocb *, struct iov_iter *); const struct file_operations generic_ro_fops = { @@ -526,7 +527,7 @@ ssize_t __kernel_write(struct file *file, const char *buf, size_t count, loff_t old_fs = get_fs(); set_fs(get_ds()); - p = (__force const char __user *)buf; + p = (const char __force_user *)buf; if (count > MAX_RW_COUNT) count = MAX_RW_COUNT; ret = __vfs_write(file, p, count, pos); @@ -700,7 +701,7 @@ static ssize_t do_iter_readv_writev(struct file *filp, struct iov_iter *iter, /* Do it by hand, with file-ops */ static ssize_t do_loop_readv_writev(struct file *filp, struct iov_iter *iter, - loff_t *ppos, io_fn_t fn, int flags) + loff_t *ppos, io_fnr_t fnr, io_fnw_t fnw, int flags) { ssize_t ret = 0; @@ -711,7 +712,10 @@ static ssize_t do_loop_readv_writev(struct file *filp, struct iov_iter *iter, struct iovec iovec = iov_iter_iovec(iter); ssize_t nr; - nr = fn(filp, iovec.iov_base, iovec.iov_len, ppos); + if (fnr) + nr = fnr(filp, iovec.iov_base, iovec.iov_len, ppos); + else + nr = fnw(filp, iovec.iov_base, iovec.iov_len, ppos); if (nr < 0) { if (!ret) @@ -844,7 +848,8 @@ static ssize_t do_readv_writev(int type, struct file *file, struct iovec *iov = iovstack; struct iov_iter iter; ssize_t ret; - io_fn_t fn; + io_fnr_t fnr; + io_fnw_t fnw; iter_fn_t iter_fn; ret = import_iovec(type, uvector, nr_segs, @@ -860,10 +865,12 @@ static ssize_t do_readv_writev(int type, struct file *file, goto out; if (type == READ) { - fn = file->f_op->read; + fnr = file->f_op->read; + fnw = NULL; iter_fn = file->f_op->read_iter; } else { - fn = (io_fn_t)file->f_op->write; + fnr = NULL; + fnw = file->f_op->write; iter_fn = file->f_op->write_iter; file_start_write(file); } @@ -871,7 +878,7 @@ static ssize_t do_readv_writev(int type, struct file *file, if (iter_fn) ret = do_iter_readv_writev(file, &iter, pos, iter_fn, flags); else - ret = do_loop_readv_writev(file, &iter, pos, fn, flags); + ret = do_loop_readv_writev(file, &iter, pos, fnr, fnw, flags); if (type != READ) file_end_write(file); @@ -1069,7 +1076,8 @@ static ssize_t compat_do_readv_writev(int type, struct file *file, struct iovec *iov = iovstack; struct iov_iter iter; ssize_t ret; - io_fn_t fn; + io_fnr_t fnr; + io_fnw_t fnw; iter_fn_t iter_fn; ret = compat_import_iovec(type, uvector, nr_segs, @@ -1085,10 +1093,12 @@ static ssize_t compat_do_readv_writev(int type, struct file *file, goto out; if (type == READ) { - fn = file->f_op->read; + fnr = file->f_op->read; + fnw = NULL; iter_fn = file->f_op->read_iter; } else { - fn = (io_fn_t)file->f_op->write; + fnr = NULL; + fnw = file->f_op->write; iter_fn = file->f_op->write_iter; file_start_write(file); } @@ -1096,7 +1106,7 @@ static ssize_t compat_do_readv_writev(int type, struct file *file, if (iter_fn) ret = do_iter_readv_writev(file, &iter, pos, iter_fn, flags); else - ret = do_loop_readv_writev(file, &iter, pos, fn, flags); + ret = do_loop_readv_writev(file, &iter, pos, fnr, fnw, flags); if (type != READ) file_end_write(file); diff --git a/include/linux/compiler.h b/include/linux/compiler.h index cf0fa5d..73f7b0d 100644 --- a/include/linux/compiler.h +++ b/include/linux/compiler.h @@ -5,6 +5,7 @@ #ifdef __CHECKER__ # define __user __attribute__((noderef, address_space(1))) +# define __force_user __force __user # define __kernel __attribute__((address_space(0))) # define __safe __attribute__((safe)) # define __force __attribute__((force)) @@ -28,7 +29,9 @@ extern void __chk_io_ptr(const volatile void __iomem *); # define ACCESS_PRIVATE(p, member) (*((typeof((p)->member) __force *) &(p)->member)) #else /* __CHECKER__ */ # define __user +# define __force_user # define __kernel +# define __force_kernel # define __safe # define __force # define __nocast @@ -223,27 +226,18 @@ void ftrace_likely_update(struct ftrace_branch_data *f, int val, int expect); #include <uapi/linux/types.h> -#define __READ_ONCE_SIZE \ -({ \ - switch (size) { \ - case 1: *(__u8 *)res = *(volatile __u8 *)p; break; \ - case 2: *(__u16 *)res = *(volatile __u16 *)p; break; \ - case 4: *(__u32 *)res = *(volatile __u32 *)p; break; \ - case 8: *(__u64 *)res = *(volatile __u64 *)p; break; \ - default: \ - barrier(); \ - __builtin_memcpy((void *)res, (const void *)p, size); \ - barrier(); \ - } \ +#ifdef CONFIG_KASAN +/* + * Use READ_ONCE_NOCHECK() instead of READ_ONCE() if you need + * to hide memory access from KASAN. + */ +#define READ_ONCE_NOCHECK(x) \ +({ \ + union { typeof(x) __val; char __c[sizeof(x)]; } __u; \ + __read_once_size_nocheck(&(x), __u.__c, sizeof(x)); \ + __u.__val; \ }) -static __always_inline -void __read_once_size(const volatile void *p, void *res, int size) -{ - __READ_ONCE_SIZE; -} - -#ifdef CONFIG_KASAN /* * This function is not 'inline' because __no_sanitize_address confilcts * with inlining. Attempt to inline it may cause a build failure. @@ -253,29 +247,20 @@ void __read_once_size(const volatile void *p, void *res, int size) static __no_sanitize_address __maybe_unused void __read_once_size_nocheck(const volatile void *p, void *res, int size) { - __READ_ONCE_SIZE; -} -#else -static __always_inline -void __read_once_size_nocheck(const volatile void *p, void *res, int size) -{ - __READ_ONCE_SIZE; -} -#endif - -static __always_inline void __write_once_size(volatile void *p, void *res, int size) -{ switch (size) { - case 1: *(volatile __u8 *)p = *(__u8 *)res; break; - case 2: *(volatile __u16 *)p = *(__u16 *)res; break; - case 4: *(volatile __u32 *)p = *(__u32 *)res; break; - case 8: *(volatile __u64 *)p = *(__u64 *)res; break; + case 1: *(__u8 *)res = *(const volatile __u8 *)p; break; + case 2: *(__u16 *)res = *(const volatile __u16 *)p; break; + case 4: *(__u32 *)res = *(const volatile __u32 *)p; break; + case 8: *(__u64 *)res = *(const volatile __u64 *)p; break; default: barrier(); - __builtin_memcpy((void *)p, (const void *)res, size); + __builtin_memcpy(res, (const void *)p, size); barrier(); } } +#else +#define READ_ONCE_NOCHECK(x) READ_ONCE(x) +#endif /* * Prevent the compiler from merging or refetching reads or writes. The @@ -300,29 +285,15 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s * required ordering. */ -#define __READ_ONCE(x, check) \ -({ \ - union { typeof(x) __val; char __c[1]; } __u; \ - if (check) \ - __read_once_size(&(x), __u.__c, sizeof(x)); \ - else \ - __read_once_size_nocheck(&(x), __u.__c, sizeof(x)); \ - __u.__val; \ +#define READ_ONCE(x) ({ \ + typeof(x) __val = *(volatile typeof(x) *)&(x); \ + __val; \ }) -#define READ_ONCE(x) __READ_ONCE(x, 1) -/* - * Use READ_ONCE_NOCHECK() instead of READ_ONCE() if you need - * to hide memory access from KASAN. - */ -#define READ_ONCE_NOCHECK(x) __READ_ONCE(x, 0) - -#define WRITE_ONCE(x, val) \ -({ \ - union { typeof(x) __val; char __c[1]; } __u = \ - { .__val = (__force typeof(x)) (val) }; \ - __write_once_size(&(x), __u.__c, sizeof(x)); \ - __u.__val; \ +#define WRITE_ONCE(x, val) ({ \ + typeof(x) __val = (val); \ + (x) = *(volatile typeof(x) *)&__val; \ + __val; \ }) #endif /* __KERNEL__ */ @@ -464,6 +435,8 @@ static __always_inline void __write_once_size(volatile void *p, void *res, int s # define __same_type(a, b) __builtin_types_compatible_p(typeof(a), typeof(b)) #endif +#define __type_is_unsigned(t) (__same_type((t)0, 0UL) || __same_type((t)0, 0U) || __same_type((t)0, (unsigned short)0) || __same_type((t)0, (unsigned char)0)) + /* Is this type a native word size -- useful for atomic operations */ #ifndef __native_word # define __native_word(t) (sizeof(t) == sizeof(char) || sizeof(t) == sizeof(short) || sizeof(t) == sizeof(int) || sizeof(t) == sizeof(long)) diff --git a/include/linux/gfp.h b/include/linux/gfp.h index f8041f9..e47dbc1 100644 --- a/include/linux/gfp.h +++ b/include/linux/gfp.h @@ -516,7 +516,7 @@ extern void __free_page_frag(void *addr); void page_alloc_init(void); void drain_zone_pages(struct zone *zone, struct per_cpu_pages *pcp); void drain_all_pages(struct zone *zone); -void drain_local_pages(struct zone *zone); +void drain_local_pages(void *zone); void page_alloc_init_late(void); diff --git a/include/linux/linkage.h b/include/linux/linkage.h index a6a42dd..7d60e80 100644 --- a/include/linux/linkage.h +++ b/include/linux/linkage.h @@ -5,6 +5,7 @@ #include <linux/stringify.h> #include <linux/export.h> #include <asm/linkage.h> +#include <asm/bitsperlong.h> /* Some toolchains use other characters (e.g. '`') to mark new line in macro */ #ifndef ASM_NL @@ -79,17 +80,38 @@ #define ALIGN_STR __ALIGN_STR #ifndef ENTRY -#define ENTRY(name) \ +#define __ENTRY(name, rap_hash) \ .globl name ASM_NL \ ALIGN ASM_NL \ + rap_hash \ name: + +#define ENTRY(name) __ENTRY(name,) #endif #endif /* LINKER_SCRIPT */ #ifndef WEAK -#define WEAK(name) \ - .weak name ASM_NL \ +#define __WEAK(name, rap_hash) \ + .weak name ASM_NL \ + rap_hash \ name: + +#define WEAK(name) __WEAK(name, ) +#endif + +#ifdef CONFIG_PAX_RAP +#if BITS_PER_LONG == 64 +#define __ASM_RAP_HASH(hash) .quad 0, hash ASM_NL +#elif BITS_PER_LONG == 32 +#define __ASM_RAP_HASH(hash) .long 0, 0, 0, hash ASM_NL +#else +#error incompatible BITS_PER_LONG +#endif +#define RAP_ENTRY(name) __ENTRY(name, __ASM_RAP_HASH(__rap_hash_##name)) +#define RAP_WEAK(name) __WEAK(name, __ASM_RAP_HASH(__rap_hash_##name)) +#else +#define RAP_ENTRY(name) ENTRY(name) +#define RAP_WEAK(name) WEAK(name) #endif #ifndef END diff --git a/include/linux/lockd/xdr.h b/include/linux/lockd/xdr.h index d39ed1c..8b5d98f 100644 --- a/include/linux/lockd/xdr.h +++ b/include/linux/lockd/xdr.h @@ -95,24 +95,24 @@ struct nlm_reboot { */ #define NLMSVC_XDRSIZE sizeof(struct nlm_args) -int nlmsvc_decode_testargs(struct svc_rqst *, __be32 *, struct nlm_args *); -int nlmsvc_encode_testres(struct svc_rqst *, __be32 *, struct nlm_res *); -int nlmsvc_decode_lockargs(struct svc_rqst *, __be32 *, struct nlm_args *); -int nlmsvc_decode_cancargs(struct svc_rqst *, __be32 *, struct nlm_args *); -int nlmsvc_decode_unlockargs(struct svc_rqst *, __be32 *, struct nlm_args *); -int nlmsvc_encode_res(struct svc_rqst *, __be32 *, struct nlm_res *); -int nlmsvc_decode_res(struct svc_rqst *, __be32 *, struct nlm_res *); -int nlmsvc_encode_void(struct svc_rqst *, __be32 *, void *); -int nlmsvc_decode_void(struct svc_rqst *, __be32 *, void *); -int nlmsvc_decode_shareargs(struct svc_rqst *, __be32 *, struct nlm_args *); -int nlmsvc_encode_shareres(struct svc_rqst *, __be32 *, struct nlm_res *); -int nlmsvc_decode_notify(struct svc_rqst *, __be32 *, struct nlm_args *); -int nlmsvc_decode_reboot(struct svc_rqst *, __be32 *, struct nlm_reboot *); +int nlmsvc_decode_testargs(void *, __be32 *, void *); +int nlmsvc_encode_testres(void *, __be32 *, void *); +int nlmsvc_decode_lockargs(void *, __be32 *, void *); +int nlmsvc_decode_cancargs(void *, __be32 *, void *); +int nlmsvc_decode_unlockargs(void *, __be32 *, void *); +int nlmsvc_encode_res(void *, __be32 *, void *); +int nlmsvc_decode_res(void *, __be32 *, void *); +int nlmsvc_encode_void(void *, __be32 *p, void *); +int nlmsvc_decode_void(void *, __be32 *, void *); +int nlmsvc_decode_shareargs(void *, __be32 *, void *); +int nlmsvc_encode_shareres(void *, __be32 *, void *); +int nlmsvc_decode_notify(void *, __be32 *, void *); +int nlmsvc_decode_reboot(void *, __be32 *, void *); /* -int nlmclt_encode_testargs(struct rpc_rqst *, u32 *, struct nlm_args *); -int nlmclt_encode_lockargs(struct rpc_rqst *, u32 *, struct nlm_args *); -int nlmclt_encode_cancargs(struct rpc_rqst *, u32 *, struct nlm_args *); -int nlmclt_encode_unlockargs(struct rpc_rqst *, u32 *, struct nlm_args *); +int nlmclt_encode_testargs(void *, u32 *, void *); +int nlmclt_encode_lockargs(void *, u32 *, void *); +int nlmclt_encode_cancargs(void *, u32 *, void *); +int nlmclt_encode_unlockargs(void *, u32 *, void *); */ #endif /* LOCKD_XDR_H */ diff --git a/include/linux/lockd/xdr4.h b/include/linux/lockd/xdr4.h index e58c88b..759ca71 100644 --- a/include/linux/lockd/xdr4.h +++ b/include/linux/lockd/xdr4.h @@ -23,24 +23,24 @@ -int nlm4svc_decode_testargs(struct svc_rqst *, __be32 *, struct nlm_args *); -int nlm4svc_encode_testres(struct svc_rqst *, __be32 *, struct nlm_res *); -int nlm4svc_decode_lockargs(struct svc_rqst *, __be32 *, struct nlm_args *); -int nlm4svc_decode_cancargs(struct svc_rqst *, __be32 *, struct nlm_args *); -int nlm4svc_decode_unlockargs(struct svc_rqst *, __be32 *, struct nlm_args *); -int nlm4svc_encode_res(struct svc_rqst *, __be32 *, struct nlm_res *); -int nlm4svc_decode_res(struct svc_rqst *, __be32 *, struct nlm_res *); -int nlm4svc_encode_void(struct svc_rqst *, __be32 *, void *); -int nlm4svc_decode_void(struct svc_rqst *, __be32 *, void *); -int nlm4svc_decode_shareargs(struct svc_rqst *, __be32 *, struct nlm_args *); -int nlm4svc_encode_shareres(struct svc_rqst *, __be32 *, struct nlm_res *); -int nlm4svc_decode_notify(struct svc_rqst *, __be32 *, struct nlm_args *); -int nlm4svc_decode_reboot(struct svc_rqst *, __be32 *, struct nlm_reboot *); +int nlm4svc_decode_testargs(void *, __be32 *, void *); +int nlm4svc_encode_testres(void *, __be32 *, void *); +int nlm4svc_decode_lockargs(void *, __be32 *, void *); +int nlm4svc_decode_cancargs(void *, __be32 *, void *); +int nlm4svc_decode_unlockargs(void *, __be32 *, void *); +int nlm4svc_encode_res(void *, __be32 *, void *); +int nlm4svc_decode_res(void *, __be32 *, void *); +int nlm4svc_encode_void(void *, __be32 *, void *); +int nlm4svc_decode_void(void *, __be32 *, void *); +int nlm4svc_decode_shareargs(void *, __be32 *, void *); +int nlm4svc_encode_shareres(void *, __be32 *, void *); +int nlm4svc_decode_notify(void *, __be32 *, void *); +int nlm4svc_decode_reboot(void *, __be32 *, void *); /* -int nlmclt_encode_testargs(struct rpc_rqst *, u32 *, struct nlm_args *); -int nlmclt_encode_lockargs(struct rpc_rqst *, u32 *, struct nlm_args *); -int nlmclt_encode_cancargs(struct rpc_rqst *, u32 *, struct nlm_args *); -int nlmclt_encode_unlockargs(struct rpc_rqst *, u32 *, struct nlm_args *); +int nlmclt_encode_testargs(void *, u32 *, void *); +int nlmclt_encode_lockargs(void *, u32 *, void *); +int nlmclt_encode_cancargs(void *, u32 *, void *); +int nlmclt_encode_unlockargs(void *, u32 *, void *); */ extern const struct rpc_version nlm_version4; diff --git a/include/linux/moduleparam.h b/include/linux/moduleparam.h index 52666d9..3e44350 100644 --- a/include/linux/moduleparam.h +++ b/include/linux/moduleparam.h @@ -227,14 +227,14 @@ struct kparam_array /* Obsolete - use module_param_cb() */ #define module_param_call(name, set, get, arg, perm) \ static const struct kernel_param_ops __param_ops_##name = \ - { .flags = 0, (void *)set, (void *)get }; \ + { .flags = 0, set, get }; \ __module_param_call(MODULE_PARAM_PREFIX, \ name, &__param_ops_##name, arg, \ (perm) + sizeof(__check_old_set_param(set))*0, -1, 0) /* We don't get oldget: it's often a new-style param_get_uint, etc. */ static inline int -__check_old_set_param(int (*oldset)(const char *, struct kernel_param *)) +__check_old_set_param(int (*oldset)(const char *, const struct kernel_param *)) { return 0; } @@ -289,7 +289,7 @@ static inline void kernel_param_unlock(struct module *mod) * @len is usually just sizeof(string). */ #define module_param_string(name, string, len, perm) \ - static const struct kparam_string __param_string_##name \ + static const struct kparam_string __param_string_##name __used \ = { len, string }; \ __module_param_call(MODULE_PARAM_PREFIX, name, \ ¶m_ops_string, \ @@ -441,7 +441,7 @@ extern int param_set_bint(const char *val, const struct kernel_param *kp); */ #define module_param_array_named(name, array, type, nump, perm) \ param_check_##type(name, &(array)[0]); \ - static const struct kparam_array __param_arr_##name \ + static const struct kparam_array __param_arr_##name __used \ = { .max = ARRAY_SIZE(array), .num = nump, \ .ops = ¶m_ops_##type, \ .elemsize = sizeof(array[0]), .elem = array }; \ diff --git a/include/linux/netfilter/ipset/ip_set_comment.h b/include/linux/netfilter/ipset/ip_set_comment.h index 8d02485..a1e1aa5 100644 --- a/include/linux/netfilter/ipset/ip_set_comment.h +++ b/include/linux/netfilter/ipset/ip_set_comment.h @@ -58,8 +58,9 @@ ip_set_put_comment(struct sk_buff *skb, struct ip_set_comment *comment) * of the set data anymore. */ static inline void -ip_set_comment_free(struct ip_set_comment *comment) +ip_set_comment_free(void *_comment) { + struct ip_set_comment *comment = _comment; struct ip_set_comment_rcu *c; c = rcu_dereference_protected(comment->c, 1); diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h index 7dbe914..0741609 100644 --- a/include/linux/pagemap.h +++ b/include/linux/pagemap.h @@ -225,7 +225,7 @@ static inline gfp_t readahead_gfp_mask(struct address_space *x) __GFP_COLD | __GFP_NORETRY | __GFP_NOWARN; } -typedef int filler_t(void *, struct page *); +typedef int filler_t(struct file *, struct page *); pgoff_t page_cache_next_hole(struct address_space *mapping, pgoff_t index, unsigned long max_scan); @@ -369,7 +369,7 @@ extern int read_cache_pages(struct address_space *mapping, static inline struct page *read_mapping_page(struct address_space *mapping, pgoff_t index, void *data) { - filler_t *filler = (filler_t *)mapping->a_ops->readpage; + filler_t *filler = mapping->a_ops->readpage; return read_cache_page(mapping, index, filler, data); } diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index 91a740f..2ac3f62 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h @@ -102,7 +102,14 @@ union bpf_attr; #define __TYPE_IS_L(t) (__same_type((t)0, 0L)) #define __TYPE_IS_UL(t) (__same_type((t)0, 0UL)) #define __TYPE_IS_LL(t) (__same_type((t)0, 0LL) || __same_type((t)0, 0ULL)) -#define __SC_LONG(t, a) __typeof(__builtin_choose_expr(__TYPE_IS_LL(t), 0LL, 0L)) a +#define __SC_TYPE(t) __typeof__( \ + __builtin_choose_expr( \ + sizeof(t) > sizeof(int), \ + (t) 0, \ + __builtin_choose_expr(__type_is_unsigned(t), 0UL, 0L) \ + )) +#define __SC_LONG(t, a) __SC_TYPE(t) a +#define __SC_WRAP(t, a) (__SC_TYPE(t)) a #define __SC_CAST(t, a) (t) a #define __SC_ARGS(t, a) a #define __SC_TEST(t, a) (void)BUILD_BUG_ON_ZERO(!__TYPE_IS_LL(t) && sizeof(t) > sizeof(long)) @@ -192,17 +199,18 @@ extern struct trace_event_functions exit_syscall_print_funcs; #define __PROTECT(...) asmlinkage_protect(__VA_ARGS__) #define __SYSCALL_DEFINEx(x, name, ...) \ - asmlinkage long sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)) \ - __attribute__((alias(__stringify(SyS##name)))); \ static inline long SYSC##name(__MAP(x,__SC_DECL,__VA_ARGS__)); \ - asmlinkage long SyS##name(__MAP(x,__SC_LONG,__VA_ARGS__)); \ - asmlinkage long SyS##name(__MAP(x,__SC_LONG,__VA_ARGS__)) \ + static inline asmlinkage long SyS##name(__MAP(x,__SC_LONG,__VA_ARGS__)) \ { \ long ret = SYSC##name(__MAP(x,__SC_CAST,__VA_ARGS__)); \ __MAP(x,__SC_TEST,__VA_ARGS__); \ __PROTECT(x, ret,__MAP(x,__SC_ARGS,__VA_ARGS__)); \ return ret; \ } \ + asmlinkage long sys##name(__MAP(x,__SC_DECL,__VA_ARGS__)) \ + { \ + return SyS##name(__MAP(x,__SC_WRAP,__VA_ARGS__)); \ + } \ static inline long SYSC##name(__MAP(x,__SC_DECL,__VA_ARGS__)) asmlinkage long sys32_quotactl(unsigned int cmd, const char __user *special, diff --git a/include/net/netfilter/nf_conntrack.h b/include/net/netfilter/nf_conntrack.h index d9d52c0..e38856d 100644 --- a/include/net/netfilter/nf_conntrack.h +++ b/include/net/netfilter/nf_conntrack.h @@ -307,7 +307,7 @@ static inline bool nf_ct_should_gc(const struct nf_conn *ct) struct kernel_param; -int nf_conntrack_set_hashsize(const char *val, struct kernel_param *kp); +int nf_conntrack_set_hashsize(const char *val, const struct kernel_param *kp); int nf_conntrack_hash_resize(unsigned int hashsize); extern struct hlist_nulls_head *nf_conntrack_hash; diff --git a/kernel/bpf/core.c b/kernel/bpf/core.c index 879ca84..d893396 100644 --- a/kernel/bpf/core.c +++ b/kernel/bpf/core.c @@ -208,6 +208,8 @@ struct bpf_prog *bpf_patch_insn_single(struct bpf_prog *prog, u32 off, } #ifdef CONFIG_BPF_JIT +extern long __rap_hash___bpf_prog_run; + struct bpf_binary_header * bpf_jit_binary_alloc(unsigned int proglen, u8 **image_ptr, unsigned int alignment, @@ -231,11 +233,24 @@ bpf_jit_binary_alloc(unsigned int proglen, u8 **image_ptr, hdr->pages = size / PAGE_SIZE; hole = min_t(unsigned int, size - (proglen + sizeof(*hdr)), PAGE_SIZE - sizeof(*hdr)); +#ifdef CONFIG_PAX_RAP + hole -= 8; +#endif start = (get_random_int() % hole) & ~(alignment - 1); +#ifdef CONFIG_PAX_RAP + start += 8; +#endif /* Leave a random number of instructions before BPF code. */ *image_ptr = &hdr->image[start]; +#ifdef CONFIG_PAX_RAP +#ifdef CONFIG_RELOCATABLE + *(long *)(*image_ptr - 8) = 0x17eeb8a2LL; +#else + *(long *)(*image_ptr - 8) = (long)&__rap_hash___bpf_prog_run; +#endif +#endif return hdr; } @@ -466,7 +481,7 @@ EXPORT_SYMBOL_GPL(__bpf_call_base); * * Decode and execute eBPF instructions. */ -static unsigned int __bpf_prog_run(void *ctx, const struct bpf_insn *insn) +unsigned int __bpf_prog_run(const struct sk_buff *ctx, const struct bpf_insn *insn) { u64 stack[MAX_BPF_STACK / sizeof(u64)]; u64 regs[MAX_BPF_REG], tmp; @@ -925,7 +940,7 @@ static unsigned int __bpf_prog_run(void *ctx, const struct bpf_insn *insn) STACK_FRAME_NON_STANDARD(__bpf_prog_run); /* jump table */ #else -static unsigned int __bpf_prog_ret0(void *ctx, const struct bpf_insn *insn) +static unsigned int __bpf_prog_ret0(const struct sk_buff *ctx, const struct bpf_insn *insn) { return 0; } @@ -979,9 +994,9 @@ static int bpf_check_tail_call(const struct bpf_prog *fp) struct bpf_prog *bpf_prog_select_runtime(struct bpf_prog *fp, int *err) { #ifndef CONFIG_BPF_JIT_ALWAYS_ON - fp->bpf_func = (void *) __bpf_prog_run; + fp->bpf_func = __bpf_prog_run; #else - fp->bpf_func = (void *) __bpf_prog_ret0; + fp->bpf_func = __bpf_prog_ret0; #endif /* eBPF JITs can rewrite the program in case constant diff --git a/kernel/events/core.c b/kernel/events/core.c index b1cfd74..b7608ec 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -1052,8 +1052,9 @@ static void __perf_mux_hrtimer_init(struct perf_cpu_context *cpuctx, int cpu) timer->function = perf_mux_hrtimer_handler; } -static int perf_mux_hrtimer_restart(struct perf_cpu_context *cpuctx) +static int perf_mux_hrtimer_restart(void *_cpuctx) { + struct perf_cpu_context *cpuctx = _cpuctx; struct hrtimer *timer = &cpuctx->hrtimer; struct pmu *pmu = cpuctx->ctx.pmu; unsigned long flags; @@ -8705,8 +8706,7 @@ perf_event_mux_interval_ms_store(struct device *dev, cpuctx = per_cpu_ptr(pmu->pmu_cpu_context, cpu); cpuctx->hrtimer_interval = ns_to_ktime(NSEC_PER_MSEC * timer); - cpu_function_call(cpu, - (remote_function_f)perf_mux_hrtimer_restart, cpuctx); + cpu_function_call(cpu, perf_mux_hrtimer_restart, cpuctx); } put_online_cpus(); mutex_unlock(&mux_interval_mutex); diff --git a/kernel/module.c b/kernel/module.c index 0e54d5b..17b20b6 100644 --- a/kernel/module.c +++ b/kernel/module.c @@ -2946,8 +2946,15 @@ static struct module *setup_load_info(struct load_info *info, int flags) static int check_modinfo(struct module *mod, struct load_info *info, int flags) { const char *modmagic = get_modinfo(info, "vermagic"); + const char *license = get_modinfo(info, "license"); int err; +#if defined(CONFIG_PAX_KERNEXEC_PLUGIN_METHOD_OR) || defined(CONFIG_PAX_RAP) + if (!license || !license_is_gpl_compatible(license)) { + pr_err("%s: module is not compatible with the KERNEXEC 'or' method and RAP\n", mod->name); + return -ENOEXEC; + } +#endif if (flags & MODULE_INIT_IGNORE_VERMAGIC) modmagic = NULL; @@ -2980,7 +2987,7 @@ static int check_modinfo(struct module *mod, struct load_info *info, int flags) return err; /* Set up license info based on the info section */ - set_license(mod, get_modinfo(info, "license")); + set_license(mod, license); return 0; } diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 154fd68..4a8565b 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -2797,7 +2797,7 @@ static struct rq *finish_task_switch(struct task_struct *prev) /* rq->lock is NOT held, but preemption is disabled */ static void __balance_callback(struct rq *rq) { - struct callback_head *head, *next; + struct balance_callback *head, *next; void (*func)(struct rq *rq); unsigned long flags; @@ -2805,7 +2805,7 @@ static void __balance_callback(struct rq *rq) head = rq->balance_callback; rq->balance_callback = NULL; while (head) { - func = (void (*)(struct rq *))head->func; + func = head->func; next = head->next; head->next = NULL; head = next; diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c index 37e2449..61f57aa 100644 --- a/kernel/sched/deadline.c +++ b/kernel/sched/deadline.c @@ -219,8 +219,8 @@ static inline bool need_pull_dl_task(struct rq *rq, struct task_struct *prev) return dl_task(prev); } -static DEFINE_PER_CPU(struct callback_head, dl_push_head); -static DEFINE_PER_CPU(struct callback_head, dl_pull_head); +static DEFINE_PER_CPU(struct balance_callback, dl_push_head); +static DEFINE_PER_CPU(struct balance_callback, dl_pull_head); static void push_dl_tasks(struct rq *); static void pull_dl_task(struct rq *); diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c index 2516b8d..251b6ab 100644 --- a/kernel/sched/rt.c +++ b/kernel/sched/rt.c @@ -362,8 +362,8 @@ static inline int has_pushable_tasks(struct rq *rq) return !plist_head_empty(&rq->rt.pushable_tasks); } -static DEFINE_PER_CPU(struct callback_head, rt_push_head); -static DEFINE_PER_CPU(struct callback_head, rt_pull_head); +static DEFINE_PER_CPU(struct balance_callback, rt_push_head); +static DEFINE_PER_CPU(struct balance_callback, rt_pull_head); static void push_rt_tasks(struct rq *); static void pull_rt_task(struct rq *); diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h index 055f935..4574fee 100644 --- a/kernel/sched/sched.h +++ b/kernel/sched/sched.h @@ -650,7 +650,10 @@ struct rq { unsigned long cpu_capacity; unsigned long cpu_capacity_orig; - struct callback_head *balance_callback; + struct balance_callback { + struct balance_callback *next; + void (*func)(struct rq *rq); + } *balance_callback; unsigned char idle_balance; /* For active balancing */ @@ -813,7 +816,7 @@ extern int migrate_swap(struct task_struct *, struct task_struct *); static inline void queue_balance_callback(struct rq *rq, - struct callback_head *head, + struct balance_callback *head, void (*func)(struct rq *rq)) { lockdep_assert_held(&rq->lock); @@ -821,7 +824,7 @@ queue_balance_callback(struct rq *rq, if (unlikely(head->next)) return; - head->func = (void (*)(struct callback_head *))func; + head->func = func; head->next = rq->balance_callback; rq->balance_callback = head; } diff --git a/mm/filemap.c b/mm/filemap.c index d8d7df8..455146a 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -2385,7 +2385,7 @@ static struct page *wait_on_page_read(struct page *page) static struct page *do_read_cache_page(struct address_space *mapping, pgoff_t index, - int (*filler)(void *, struct page *), + filler_t *filler, void *data, gfp_t gfp) { @@ -2492,7 +2492,7 @@ static struct page *do_read_cache_page(struct address_space *mapping, */ struct page *read_cache_page(struct address_space *mapping, pgoff_t index, - int (*filler)(void *, struct page *), + filler_t *filler, void *data) { return do_read_cache_page(mapping, index, filler, data, mapping_gfp_mask(mapping)); @@ -2514,7 +2514,7 @@ struct page *read_cache_page_gfp(struct address_space *mapping, pgoff_t index, gfp_t gfp) { - filler_t *filler = (filler_t *)mapping->a_ops->readpage; + filler_t *filler = mapping->a_ops->readpage; return do_read_cache_page(mapping, index, filler, NULL, gfp); } diff --git a/mm/page_alloc.c b/mm/page_alloc.c index f4a02e2..a988d13 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -2305,8 +2305,9 @@ static void drain_pages(unsigned int cpu) * The CPU has to be pinned. When zone parameter is non-NULL, spill just * the single zone's pages. */ -void drain_local_pages(struct zone *zone) +void drain_local_pages(void *_zone) { + struct zone *zone = _zone; int cpu = smp_processor_id(); if (zone) @@ -2366,8 +2367,7 @@ void drain_all_pages(struct zone *zone) else cpumask_clear_cpu(cpu, &cpus_with_pcps); } - on_each_cpu_mask(&cpus_with_pcps, (smp_call_func_t) drain_local_pages, - zone, 1); + on_each_cpu_mask(&cpus_with_pcps, drain_local_pages, zone, 1); } #ifdef CONFIG_HIBERNATION diff --git a/mm/readahead.c b/mm/readahead.c index c8a955b..fad2128 100644 --- a/mm/readahead.c +++ b/mm/readahead.c @@ -81,7 +81,7 @@ static void read_cache_pages_invalidate_pages(struct address_space *mapping, * Hides the details of the LRU cache etc from the filesystems. */ int read_cache_pages(struct address_space *mapping, struct list_head *pages, - int (*filler)(void *, struct page *), void *data) + filler_t *filler, void *data) { struct page *page; int ret = 0; diff --git a/net/bridge/br_private.h b/net/bridge/br_private.h index 1b63177..907962a 100644 --- a/net/bridge/br_private.h +++ b/net/bridge/br_private.h @@ -547,7 +547,8 @@ rx_handler_result_t br_handle_frame(struct sk_buff **pskb); static inline bool br_rx_handler_check_rcu(const struct net_device *dev) { - return rcu_dereference(dev->rx_handler) == br_handle_frame; + //return rcu_dereference(dev->rx_handler) == br_handle_frame; + return br_handle_frame == rcu_dereference(dev->rx_handler); } static inline struct net_bridge_port *br_port_get_check_rcu(const struct net_device *dev) diff --git a/net/netfilter/ipset/ip_set_core.c b/net/netfilter/ipset/ip_set_core.c index a748b0c..05b9807 100644 --- a/net/netfilter/ipset/ip_set_core.c +++ b/net/netfilter/ipset/ip_set_core.c @@ -324,7 +324,6 @@ ip_set_get_ipaddr6(struct nlattr *nla, union nf_inet_addr *ipaddr) } EXPORT_SYMBOL_GPL(ip_set_get_ipaddr6); -typedef void (*destroyer)(void *); /* ipset data extension types, in size order */ const struct ip_set_ext_type ip_set_extensions[] = { @@ -350,7 +349,7 @@ const struct ip_set_ext_type ip_set_extensions[] = { .flag = IPSET_FLAG_WITH_COMMENT, .len = sizeof(struct ip_set_comment), .align = __alignof__(struct ip_set_comment), - .destroy = (destroyer) ip_set_comment_free, + .destroy = ip_set_comment_free, }, }; EXPORT_SYMBOL_GPL(ip_set_extensions); diff --git a/net/netfilter/nf_conntrack_core.c b/net/netfilter/nf_conntrack_core.c index 0f87e5d..76343a8 100644 --- a/net/netfilter/nf_conntrack_core.c +++ b/net/netfilter/nf_conntrack_core.c @@ -1790,7 +1790,7 @@ int nf_conntrack_hash_resize(unsigned int hashsize) return 0; } -int nf_conntrack_set_hashsize(const char *val, struct kernel_param *kp) +int nf_conntrack_set_hashsize(const char *val, const struct kernel_param *kp) { unsigned int hashsize; int rc; diff --git a/net/netfilter/nf_nat_ftp.c b/net/netfilter/nf_nat_ftp.c index e84a578..d76afaf 100644 --- a/net/netfilter/nf_nat_ftp.c +++ b/net/netfilter/nf_nat_ftp.c @@ -134,7 +134,7 @@ static int __init nf_nat_ftp_init(void) } /* Prior to 2.6.11, we had a ports param. No longer, but don't break users. */ -static int warn_set(const char *val, struct kernel_param *kp) +static int warn_set(const char *val, const struct kernel_param *kp) { printk(KERN_INFO KBUILD_MODNAME ": kernel >= 2.6.10 only uses 'ports' for conntrack modules\n"); diff --git a/net/netfilter/nf_nat_irc.c b/net/netfilter/nf_nat_irc.c index 1fb2258..8039bcd 100644 --- a/net/netfilter/nf_nat_irc.c +++ b/net/netfilter/nf_nat_irc.c @@ -107,7 +107,7 @@ static int __init nf_nat_irc_init(void) } /* Prior to 2.6.11, we had a ports param. No longer, but don't break users. */ -static int warn_set(const char *val, struct kernel_param *kp) +static int warn_set(const char *val, const struct kernel_param *kp) { printk(KERN_INFO KBUILD_MODNAME ": kernel >= 2.6.10 only uses 'ports' for conntrack modules\n"); diff --git a/net/sunrpc/auth_gss/gss_rpc_upcall.c b/net/sunrpc/auth_gss/gss_rpc_upcall.c index f0c6a8c..3acb459 100644 --- a/net/sunrpc/auth_gss/gss_rpc_upcall.c +++ b/net/sunrpc/auth_gss/gss_rpc_upcall.c @@ -55,8 +55,8 @@ enum { #define PROC(proc, name) \ [GSSX_##proc] = { \ .p_proc = GSSX_##proc, \ - .p_encode = (kxdreproc_t)gssx_enc_##name, \ - .p_decode = (kxdrdproc_t)gssx_dec_##name, \ + .p_encode = gssx_enc_##name, \ + .p_decode = gssx_dec_##name, \ .p_arglen = GSSX_ARG_##name##_sz, \ .p_replen = GSSX_RES_##name##_sz, \ .p_statidx = GSSX_##proc, \ diff --git a/net/sunrpc/auth_gss/gss_rpc_xdr.c b/net/sunrpc/auth_gss/gss_rpc_xdr.c index 25d9a9c..89a9726 100644 --- a/net/sunrpc/auth_gss/gss_rpc_xdr.c +++ b/net/sunrpc/auth_gss/gss_rpc_xdr.c @@ -731,10 +731,12 @@ static int gssx_enc_cb(struct xdr_stream *xdr, struct gssx_cb *cb) return err; } -void gssx_enc_accept_sec_context(struct rpc_rqst *req, +void gssx_enc_accept_sec_context(void *_req, struct xdr_stream *xdr, - struct gssx_arg_accept_sec_context *arg) + void *_arg) { + struct rpc_rqst *req = _req; + struct gssx_arg_accept_sec_context *arg = _arg; int err; err = gssx_enc_call_ctx(xdr, &arg->call_ctx); @@ -787,10 +789,11 @@ void gssx_enc_accept_sec_context(struct rpc_rqst *req, dprintk("RPC: gssx_enc_accept_sec_context: %d\n", err); } -int gssx_dec_accept_sec_context(struct rpc_rqst *rqstp, +int gssx_dec_accept_sec_context(void *rqstp, struct xdr_stream *xdr, - struct gssx_res_accept_sec_context *res) + void *_res) { + struct gssx_res_accept_sec_context *res = _res; u32 value_follows; int err; struct page *scratch; diff --git a/net/sunrpc/auth_gss/gss_rpc_xdr.h b/net/sunrpc/auth_gss/gss_rpc_xdr.h index 9d88c62..547262e 100644 --- a/net/sunrpc/auth_gss/gss_rpc_xdr.h +++ b/net/sunrpc/auth_gss/gss_rpc_xdr.h @@ -177,12 +177,12 @@ struct gssx_res_accept_sec_context { #define gssx_dec_store_cred NULL #define gssx_enc_init_sec_context NULL #define gssx_dec_init_sec_context NULL -void gssx_enc_accept_sec_context(struct rpc_rqst *req, +void gssx_enc_accept_sec_context(void *req, struct xdr_stream *xdr, - struct gssx_arg_accept_sec_context *args); -int gssx_dec_accept_sec_context(struct rpc_rqst *rqstp, + void *arg); +int gssx_dec_accept_sec_context(void *rqstp, struct xdr_stream *xdr, - struct gssx_res_accept_sec_context *res); + void *res); #define gssx_enc_release_handle NULL #define gssx_dec_release_handle NULL #define gssx_enc_get_mic NULL diff --git a/net/sunrpc/rpcb_clnt.c b/net/sunrpc/rpcb_clnt.c index 5b30603..4024763 100644 --- a/net/sunrpc/rpcb_clnt.c +++ b/net/sunrpc/rpcb_clnt.c @@ -842,9 +842,10 @@ static void rpcb_getport_done(struct rpc_task *child, void *data) * XDR functions for rpcbind */ -static void rpcb_enc_mapping(struct rpc_rqst *req, struct xdr_stream *xdr, - const struct rpcbind_args *rpcb) +static void rpcb_enc_mapping(void *_req, struct xdr_stream *xdr, void *_rpcb) { + struct rpc_rqst *req = _req; + const struct rpcbind_args *rpcb = _rpcb; __be32 *p; dprintk("RPC: %5u encoding PMAP_%s call (%u, %u, %d, %u)\n", @@ -859,9 +860,10 @@ static void rpcb_enc_mapping(struct rpc_rqst *req, struct xdr_stream *xdr, *p = cpu_to_be32(rpcb->r_port); } -static int rpcb_dec_getport(struct rpc_rqst *req, struct xdr_stream *xdr, - struct rpcbind_args *rpcb) +static int rpcb_dec_getport(void *_req, struct xdr_stream *xdr, void *_rpcb) { + struct rpc_rqst *req = _req; + struct rpcbind_args *rpcb = _rpcb; unsigned long port; __be32 *p; @@ -881,9 +883,10 @@ static int rpcb_dec_getport(struct rpc_rqst *req, struct xdr_stream *xdr, return 0; } -static int rpcb_dec_set(struct rpc_rqst *req, struct xdr_stream *xdr, - unsigned int *boolp) +static int rpcb_dec_set(void *_req, struct xdr_stream *xdr, void *_boolp) { + struct rpc_rqst *req = _req; + unsigned int *boolp = _boolp; __be32 *p; p = xdr_inline_decode(xdr, 4); @@ -916,9 +919,10 @@ static void encode_rpcb_string(struct xdr_stream *xdr, const char *string, xdr_encode_opaque(p, string, len); } -static void rpcb_enc_getaddr(struct rpc_rqst *req, struct xdr_stream *xdr, - const struct rpcbind_args *rpcb) +static void rpcb_enc_getaddr(void *_req, struct xdr_stream *xdr, void *_rpcb) { + struct rpc_rqst *req = _req; + const struct rpcbind_args *rpcb = _rpcb; __be32 *p; dprintk("RPC: %5u encoding RPCB_%s call (%u, %u, '%s', '%s')\n", @@ -936,9 +940,10 @@ static void rpcb_enc_getaddr(struct rpc_rqst *req, struct xdr_stream *xdr, encode_rpcb_string(xdr, rpcb->r_owner, RPCB_MAXOWNERLEN); } -static int rpcb_dec_getaddr(struct rpc_rqst *req, struct xdr_stream *xdr, - struct rpcbind_args *rpcb) +static int rpcb_dec_getaddr(void *_req, struct xdr_stream *xdr, void *_rpcb) { + struct rpc_rqst *req = _req; + struct rpcbind_args *rpcb = _rpcb; struct sockaddr_storage address; struct sockaddr *sap = (struct sockaddr *)&address; __be32 *p; @@ -992,8 +997,8 @@ static int rpcb_dec_getaddr(struct rpc_rqst *req, struct xdr_stream *xdr, static struct rpc_procinfo rpcb_procedures2[] = { [RPCBPROC_SET] = { .p_proc = RPCBPROC_SET, - .p_encode = (kxdreproc_t)rpcb_enc_mapping, - .p_decode = (kxdrdproc_t)rpcb_dec_set, + .p_encode = rpcb_enc_mapping, + .p_decode = rpcb_dec_set, .p_arglen = RPCB_mappingargs_sz, .p_replen = RPCB_setres_sz, .p_statidx = RPCBPROC_SET, @@ -1002,8 +1007,8 @@ static struct rpc_procinfo rpcb_procedures2[] = { }, [RPCBPROC_UNSET] = { .p_proc = RPCBPROC_UNSET, - .p_encode = (kxdreproc_t)rpcb_enc_mapping, - .p_decode = (kxdrdproc_t)rpcb_dec_set, + .p_encode = rpcb_enc_mapping, + .p_decode = rpcb_dec_set, .p_arglen = RPCB_mappingargs_sz, .p_replen = RPCB_setres_sz, .p_statidx = RPCBPROC_UNSET, @@ -1012,8 +1017,8 @@ static struct rpc_procinfo rpcb_procedures2[] = { }, [RPCBPROC_GETPORT] = { .p_proc = RPCBPROC_GETPORT, - .p_encode = (kxdreproc_t)rpcb_enc_mapping, - .p_decode = (kxdrdproc_t)rpcb_dec_getport, + .p_encode = rpcb_enc_mapping, + .p_decode = rpcb_dec_getport, .p_arglen = RPCB_mappingargs_sz, .p_replen = RPCB_getportres_sz, .p_statidx = RPCBPROC_GETPORT, @@ -1025,8 +1030,8 @@ static struct rpc_procinfo rpcb_procedures2[] = { static struct rpc_procinfo rpcb_procedures3[] = { [RPCBPROC_SET] = { .p_proc = RPCBPROC_SET, - .p_encode = (kxdreproc_t)rpcb_enc_getaddr, - .p_decode = (kxdrdproc_t)rpcb_dec_set, + .p_encode = rpcb_enc_getaddr, + .p_decode = rpcb_dec_set, .p_arglen = RPCB_getaddrargs_sz, .p_replen = RPCB_setres_sz, .p_statidx = RPCBPROC_SET, @@ -1035,8 +1040,8 @@ static struct rpc_procinfo rpcb_procedures3[] = { }, [RPCBPROC_UNSET] = { .p_proc = RPCBPROC_UNSET, - .p_encode = (kxdreproc_t)rpcb_enc_getaddr, - .p_decode = (kxdrdproc_t)rpcb_dec_set, + .p_encode = rpcb_enc_getaddr, + .p_decode = rpcb_dec_set, .p_arglen = RPCB_getaddrargs_sz, .p_replen = RPCB_setres_sz, .p_statidx = RPCBPROC_UNSET, @@ -1045,8 +1050,8 @@ static struct rpc_procinfo rpcb_procedures3[] = { }, [RPCBPROC_GETADDR] = { .p_proc = RPCBPROC_GETADDR, - .p_encode = (kxdreproc_t)rpcb_enc_getaddr, - .p_decode = (kxdrdproc_t)rpcb_dec_getaddr, + .p_encode = rpcb_enc_getaddr, + .p_decode = rpcb_dec_getaddr, .p_arglen = RPCB_getaddrargs_sz, .p_replen = RPCB_getaddrres_sz, .p_statidx = RPCBPROC_GETADDR, @@ -1058,8 +1063,8 @@ static struct rpc_procinfo rpcb_procedures3[] = { static struct rpc_procinfo rpcb_procedures4[] = { [RPCBPROC_SET] = { .p_proc = RPCBPROC_SET, - .p_encode = (kxdreproc_t)rpcb_enc_getaddr, - .p_decode = (kxdrdproc_t)rpcb_dec_set, + .p_encode = rpcb_enc_getaddr, + .p_decode = rpcb_dec_set, .p_arglen = RPCB_getaddrargs_sz, .p_replen = RPCB_setres_sz, .p_statidx = RPCBPROC_SET, @@ -1068,8 +1073,8 @@ static struct rpc_procinfo rpcb_procedures4[] = { }, [RPCBPROC_UNSET] = { .p_proc = RPCBPROC_UNSET, - .p_encode = (kxdreproc_t)rpcb_enc_getaddr, - .p_decode = (kxdrdproc_t)rpcb_dec_set, + .p_encode = rpcb_enc_getaddr, + .p_decode = rpcb_dec_set, .p_arglen = RPCB_getaddrargs_sz, .p_replen = RPCB_setres_sz, .p_statidx = RPCBPROC_UNSET, @@ -1078,8 +1083,8 @@ static struct rpc_procinfo rpcb_procedures4[] = { }, [RPCBPROC_GETADDR] = { .p_proc = RPCBPROC_GETADDR, - .p_encode = (kxdreproc_t)rpcb_enc_getaddr, - .p_decode = (kxdrdproc_t)rpcb_dec_getaddr, + .p_encode = rpcb_enc_getaddr, + .p_decode = rpcb_dec_getaddr, .p_arglen = RPCB_getaddrargs_sz, .p_replen = RPCB_getaddrres_sz, .p_statidx = RPCBPROC_GETADDR, diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c index 7c8070e..cc8dcfc 100644 --- a/net/sunrpc/svc.c +++ b/net/sunrpc/svc.c @@ -50,7 +50,7 @@ EXPORT_SYMBOL_GPL(svc_pool_map); static DEFINE_MUTEX(svc_pool_map_mutex);/* protects svc_pool_map.count only */ static int -param_set_pool_mode(const char *val, struct kernel_param *kp) +param_set_pool_mode(const char *val, const struct kernel_param *kp) { int *ip = (int *)kp->arg; struct svc_pool_map *m = &svc_pool_map; @@ -80,7 +80,7 @@ param_set_pool_mode(const char *val, struct kernel_param *kp) } static int -param_get_pool_mode(char *buf, struct kernel_param *kp) +param_get_pool_mode(char *buf, const struct kernel_param *kp) { int *ip = (int *)kp->arg; diff --git a/scripts/Makefile.gcc-plugins b/scripts/Makefile.gcc-plugins index 060d2cb..07a1554 100644 --- a/scripts/Makefile.gcc-plugins +++ b/scripts/Makefile.gcc-plugins @@ -25,10 +25,22 @@ ifdef CONFIG_GCC_PLUGINS endif endif + gcc-plugin-subdir-$(CONFIG_PAX_RAP) += rap_plugin + gcc-plugin-$(CONFIG_PAX_RAP) += rap_plugin/rap_plugin.so + gcc-plugin-cflags-$(CONFIG_PAX_RAP) += -DRAP_PLUGIN -fplugin-arg-rap_plugin-check=call +# gcc-plugin-cflags-$(CONFIG_PAX_RAP) += -fplugin-arg-rap_plugin-report=func,fptr,abs + gcc-plugin-aflags-$(CONFIG_PAX_RAP) += -DRAP_PLUGIN + ifdef CONFIG_PAX_RAP + RAP_PLUGIN_ABS_CFLAGS := -fplugin-arg-rap_plugin-hash=abs-finish + endif + gcc-plugin-cflags-$(CONFIG_PAX_RAP) += $(RAP_PLUGIN_ABS_CFLAGS) + GCC_PLUGINS_CFLAGS := $(strip $(addprefix -fplugin=$(objtree)/scripts/gcc-plugins/, $(gcc-plugin-y)) $(gcc-plugin-cflags-y)) + GCC_PLUGINS_AFLAGS := $(gcc-plugin-aflags-y) export PLUGINCC GCC_PLUGINS_CFLAGS GCC_PLUGIN GCC_PLUGIN_SUBDIR export SANCOV_PLUGIN DISABLE_LATENT_ENTROPY_PLUGIN + export RAP_PLUGIN_ABS_CFLAGS GCC_PLUGINS_AFLAGS ifneq ($(PLUGINCC),) # SANCOV_PLUGIN can be only in CFLAGS_KCOV because avoid duplication. @@ -36,6 +48,7 @@ ifdef CONFIG_GCC_PLUGINS endif KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS) + KBUILD_AFLAGS += $(GCC_PLUGINS_AFLAGS) GCC_PLUGIN := $(gcc-plugin-y) GCC_PLUGIN_SUBDIR := $(gcc-plugin-subdir-y) endif diff --git a/scripts/gcc-plugins/rap_plugin/Makefile b/scripts/gcc-plugins/rap_plugin/Makefile new file mode 100644 index 0000000..f2a0a03 --- /dev/null +++ b/scripts/gcc-plugins/rap_plugin/Makefile @@ -0,0 +1,6 @@ +$(HOSTLIBS)-$(CONFIG_PAX_RAP) += rap_plugin.so +always := $($(HOSTLIBS)-y) + +rap_plugin-objs := $(patsubst $(srctree)/$(src)/%.c,%.o,$(wildcard $(srctree)/$(src)/*.c)) + +clean-files += *.so diff --git a/scripts/gcc-plugins/rap_plugin/rap.h b/scripts/gcc-plugins/rap_plugin/rap.h new file mode 100644 index 0000000..f6a284d --- /dev/null +++ b/scripts/gcc-plugins/rap_plugin/rap.h @@ -0,0 +1,36 @@ +#ifndef RAP_H_INCLUDED +#define RAP_H_INCLUDED + +#include "gcc-common.h" + +typedef struct { + int hash; // will be sign extended to long in reality +} rap_hash_t; + +typedef struct { + unsigned int qual_const:1; + unsigned int qual_volatile:1; +} rap_hash_flags_t; +extern rap_hash_flags_t imprecise_rap_hash_flags; + +extern bool report_fptr_hash; + +extern GTY(()) tree rap_hash_type_node; + +void siphash24fold(unsigned char *out, const unsigned char *in, unsigned long long inlen, const unsigned char *k); +void rap_calculate_func_hashes(void *event_data, void *data); +rap_hash_t rap_hash_function_type(const_tree fntype, rap_hash_flags_t flags); +rap_hash_t rap_hash_function_decl(const_tree fndecl, rap_hash_flags_t flags); +rap_hash_t rap_hash_function_node_imprecise(cgraph_node_ptr node); +const_tree type_name(const_tree type); +tree create_new_var(tree type, const char *name); + +gimple barrier(tree var, bool full); + +#if BUILDING_GCC_VERSION >= 4009 +opt_pass *make_rap_fptr_pass(void); +#else +struct opt_pass *make_rap_fptr_pass(void); +#endif + +#endif diff --git a/scripts/gcc-plugins/rap_plugin/rap_fptr_pass.c b/scripts/gcc-plugins/rap_plugin/rap_fptr_pass.c new file mode 100644 index 0000000..2f53f14 --- /dev/null +++ b/scripts/gcc-plugins/rap_plugin/rap_fptr_pass.c @@ -0,0 +1,220 @@ +/* + * Copyright 2012-2016 by PaX Team <pageexec@freemail.hu> + * Licensed under the GPL v2 + * + * Homepage: http://pax.grsecurity.net/ + */ + +#include "rap.h" + +bool report_fptr_hash; + +static bool rap_fptr_gate(void) +{ +#ifdef TARGET_386 + tree section; + + if (!TARGET_64BIT || ix86_cmodel != CM_KERNEL) + return true; + + section = lookup_attribute("section", DECL_ATTRIBUTES(current_function_decl)); + if (!section || !TREE_VALUE(section)) + return true; + + section = TREE_VALUE(TREE_VALUE(section)); + return strncmp(TREE_STRING_POINTER(section), ".vsyscall_", 10); +#else +#error unsupported target +#endif +} + +static tree build_rap_hash(gimple call_stmt, tree fntype) +{ + rap_hash_t hash; + + hash = rap_hash_function_type(fntype, imprecise_rap_hash_flags); + if (report_fptr_hash) + inform(gimple_location(call_stmt), "fptr rap_hash: %x", hash.hash); + return build_int_cst_type(rap_hash_type_node, hash.hash); +} + +// check the function hash of the target of the fptr +static basic_block rap_instrument_fptr(gimple_stmt_iterator *gsi) +{ + gimple assign_hash, check_hash, call_stmt, stmt; + location_t loc; + tree computed_hash, target_hash, fptr, fntype; +#if BUILDING_GCC_VERSION == 4005 + tree fptr2; +#endif + basic_block cond_bb, join_bb, true_bb; + edge e; + const HOST_WIDE_INT rap_hash_offset = TARGET_64BIT ? 2 * sizeof(rap_hash_t) : sizeof(rap_hash_t); + + call_stmt = gsi_stmt(*gsi); + loc = gimple_location(call_stmt); + fptr = gimple_call_fn(call_stmt); + fntype = TREE_TYPE(TREE_TYPE(fptr)); + + if (TREE_CODE(fntype) == FUNCTION_TYPE) { + computed_hash = build_rap_hash(call_stmt, fntype); + } else { + debug_tree(fntype); + gcc_unreachable(); + } + + // target_hash = ((s64*)fptr)[-rap_hash_offset] + target_hash = create_tmp_var(rap_hash_type_node, "rap_hash"); + add_referenced_var(target_hash); + target_hash = make_ssa_name(target_hash, NULL); +#if BUILDING_GCC_VERSION == 4005 + fptr2 = create_tmp_var(ptr_type_node, "rap_fptr2"); + fptr2 = make_ssa_name(fptr2, NULL); + assign_hash = gimple_build_assign(fptr2, build2(POINTER_PLUS_EXPR, ptr_type_node, fptr, build_int_cst_type(sizetype, -rap_hash_offset))); + gimple_set_location(assign_hash, loc); + SSA_NAME_DEF_STMT(fptr2) = assign_hash; + gsi_insert_before(gsi, assign_hash, GSI_SAME_STMT); + update_stmt(assign_hash); + fptr = gimple_get_lhs(assign_hash); + + fptr2 = create_tmp_var(build_pointer_type(rap_hash_type_node), "rap_fptr2"); + fptr2 = make_ssa_name(fptr2, NULL); + assign_hash = gimple_build_assign(fptr2, fold_convert(build_pointer_type(TREE_TYPE(target_hash)), fptr)); + gimple_set_location(assign_hash, loc); + SSA_NAME_DEF_STMT(fptr2) = assign_hash; + gsi_insert_before(gsi, assign_hash, GSI_SAME_STMT); + update_stmt(assign_hash); + fptr = gimple_get_lhs(assign_hash); + + assign_hash = gimple_build_assign(target_hash, build1(INDIRECT_REF, rap_hash_type_node, fptr)); +#else + assign_hash = gimple_build_assign(target_hash, build2(MEM_REF, rap_hash_type_node, fptr, build_int_cst_type(build_pointer_type(rap_hash_type_node), -rap_hash_offset))); +#endif + gimple_set_location(assign_hash, loc); + SSA_NAME_DEF_STMT(target_hash) = assign_hash; + gsi_insert_before(gsi, assign_hash, GSI_NEW_STMT); + update_stmt(assign_hash); + + // compare target_hash against computed function hash + // bail out on mismatch + check_hash = gimple_build_cond(NE_EXPR, target_hash, computed_hash, NULL_TREE, NULL_TREE); + gimple_set_location(check_hash, loc); + gsi_insert_after(gsi, check_hash, GSI_NEW_STMT); + + cond_bb = gimple_bb(gsi_stmt(*gsi)); + gcc_assert(!gsi_end_p(*gsi)); + gcc_assert(check_hash == gsi_stmt(*gsi)); + + e = split_block(cond_bb, gsi_stmt(*gsi)); + cond_bb = e->src; + join_bb = e->dest; + e->flags = EDGE_FALSE_VALUE; + e->probability = REG_BR_PROB_BASE; + + true_bb = create_empty_bb(EXIT_BLOCK_PTR_FOR_FN(cfun)->prev_bb); + make_edge(cond_bb, true_bb, EDGE_TRUE_VALUE | EDGE_PRESERVE); + + gcc_assert(dom_info_available_p(CDI_DOMINATORS)); + set_immediate_dominator(CDI_DOMINATORS, true_bb, cond_bb); + set_immediate_dominator(CDI_DOMINATORS, join_bb, cond_bb); + + gcc_assert(cond_bb->loop_father == join_bb->loop_father); + add_bb_to_loop(true_bb, cond_bb->loop_father); + + *gsi = gsi_start_bb(true_bb); + + // this fake dependency is to prevent PRE from merging this BB with others of the same kind + stmt = barrier(fptr, false); + gimple_set_location(stmt, loc); + gsi_insert_after(gsi, stmt, GSI_CONTINUE_LINKING); + + stmt = gimple_build_call(builtin_decl_implicit(BUILT_IN_TRAP), 0); + gimple_set_location(stmt, loc); + gsi_insert_after(gsi, stmt, GSI_CONTINUE_LINKING); + + return join_bb; +} + +// find all language level function pointer dereferences and verify the target function +static unsigned int rap_fptr_execute(void) +{ + basic_block bb; + + loop_optimizer_init(LOOPS_NORMAL | LOOPS_HAVE_RECORDED_EXITS); + gcc_assert(current_loops); + + calculate_dominance_info(CDI_DOMINATORS); + calculate_dominance_info(CDI_POST_DOMINATORS); + + // 1. loop through BBs and GIMPLE statements + FOR_EACH_BB_FN(bb, cfun) { + gimple_stmt_iterator gsi; + + for (gsi = gsi_start_bb(bb); !gsi_end_p(gsi); gsi_next(&gsi)) { + // gimple match: h_1 = get_fptr (); D.2709_3 = h_1 (x_2(D)); + tree fptr, fntype; + gimple call_stmt; + + // is it a call ... + call_stmt = gsi_stmt(gsi); + if (!is_gimple_call(call_stmt)) + continue; + + fptr = gimple_call_fn(call_stmt); + if (!fptr) + continue; + + switch (TREE_CODE(fptr)) { + default: + debug_gimple_stmt(call_stmt); + debug_tree(fptr); + debug_tree(TREE_TYPE(fptr)); + gcc_unreachable(); + + case ADDR_EXPR: + continue; + + case SSA_NAME: + if (SSA_NAME_VAR(fptr) == NULL_TREE) + break; + + switch (TREE_CODE(SSA_NAME_VAR(fptr))) { + default: + debug_gimple_stmt(call_stmt); + debug_tree(fptr); + gcc_unreachable(); + + case VAR_DECL: + case PARM_DECL: + break; + } + break; + + case INTEGER_CST: + case OBJ_TYPE_REF: + break; + } + + // ... through a function pointer + fntype = TREE_TYPE(fptr); + if (TREE_CODE(fntype) != POINTER_TYPE) + continue; + + fntype = TREE_TYPE(fntype); + gcc_assert(TREE_CODE(fntype) == FUNCTION_TYPE || TREE_CODE(fntype) == METHOD_TYPE); + + bb = rap_instrument_fptr(&gsi); + gsi = gsi_start_bb(bb); + } + } + + free_dominance_info(CDI_DOMINATORS); + free_dominance_info(CDI_POST_DOMINATORS); + loop_optimizer_finalize(); + + return 0; +} + +#define PASS_NAME rap_fptr +#define TODO_FLAGS_FINISH TODO_verify_ssa | TODO_verify_stmts | TODO_dump_func | TODO_remove_unused_locals | TODO_update_ssa | TODO_cleanup_cfg | TODO_rebuild_cgraph_edges | TODO_verify_flow +#include "gcc-generate-gimple-pass.h" diff --git a/scripts/gcc-plugins/rap_plugin/rap_hash.c b/scripts/gcc-plugins/rap_plugin/rap_hash.c new file mode 100644 index 0000000..7c59f38 --- /dev/null +++ b/scripts/gcc-plugins/rap_plugin/rap_hash.c @@ -0,0 +1,382 @@ +/* + * Copyright 2012-2016 by PaX Team <pageexec@freemail.hu> + * Licensed under the GPL v2 + * + * Homepage: http://pax.grsecurity.net/ + */ + +#include "rap.h" + +static rap_hash_t *rap_imprecise_hashes; +static int rap_cgraph_max_uid; + +static void rap_hash_function(const_tree fntype, rap_hash_flags_t flags, unsigned char sip_hash[8]); + +static const unsigned char rap_hash_tree_code[MAX_TREE_CODES] = { + [0] = 0, + [1] = 0, + [2] = 0, + [3] = 0, + [4] = 0, + [OFFSET_TYPE] = 10, + [ENUMERAL_TYPE] = 20, + [BOOLEAN_TYPE] = 30, + [INTEGER_TYPE] = 40, + [REAL_TYPE] = 50, + [POINTER_TYPE] = 60, + [REFERENCE_TYPE] = 70, +#if BUILDING_GCC_VERSION >= 4006 + [NULLPTR_TYPE] = 80, +#endif + [FIXED_POINT_TYPE] = 0, + [COMPLEX_TYPE] = 100, + [VECTOR_TYPE] = 110, + [ARRAY_TYPE] = 120, + [RECORD_TYPE] = 130, + [UNION_TYPE] = 140, + [QUAL_UNION_TYPE] = 0, + [VOID_TYPE] = 160, +#if BUILDING_GCC_VERSION >= 5000 + [POINTER_BOUNDS_TYPE] = 170, +#endif + [FUNCTION_TYPE] = 180, + [METHOD_TYPE] = 0, + [LANG_TYPE] = 0, +}; + +static void rap_fold_hash(unsigned char *out, const unsigned char *in, unsigned long long inlen) +{ + static const unsigned char rap_sip_key[16] = { + 'P', 'a', 'X', ' ', 'T', 'e', 'a', 'm', + 'R', 'A', 'P', ' ', 'H', 'A', 'S', 'H', + }; + + siphash24fold(out, in, inlen, rap_sip_key); +} + +// compute the final hash value in the range [1,INT_MAX] +// the % and +1 trick leaves the value 0 available for marking non-indirectly callable functions +// and INT_MIN (0x80000000) for longjmp targets (sign extended) +// return places will use the (sign extended) range [INT_MIN+1,-1] ([0x8000001,0xffffffff]) +static rap_hash_t rap_extract_hash(const unsigned char sip_hash[8]) +{ + rap_hash_t hash; + unsigned long long dividend, divisor; + + memcpy(÷nd, sip_hash, sizeof dividend); +// divisor = 1ULL << (sizeof hash * 8 - 1); +// divisor |= divisor - 1; + divisor = 0x7fffffffUL; + hash.hash = dividend % divisor + 1; + return hash; +} + +static void rap_hash_type_name(const_tree type, unsigned char sip_hash[8]) +{ + const_tree name = type_name(TYPE_MAIN_VARIANT(type)); + + // handle typedefs of anonymous structs/unions + if (name == NULL_TREE) + name = type_name(type); + + if (name == NULL_TREE) + return; + + gcc_assert(TREE_CODE(name) == IDENTIFIER_NODE); + rap_fold_hash(sip_hash, (const unsigned char *)IDENTIFIER_POINTER(name), IDENTIFIER_LENGTH(name)); +} + +static void rap_hash_type_precision(const_tree type, unsigned char sip_hash[8]) +{ + unsigned HOST_WIDE_INT size; + + gcc_assert(TYPE_PRECISION(type)); + + size = TYPE_PRECISION(type); + rap_fold_hash(sip_hash, (const unsigned char *)&size, sizeof size); +} + +const_tree type_name(const_tree type) +{ + const_tree name; + + name = TYPE_NAME(type); + if (!name) + return NULL_TREE; + + switch (TREE_CODE(name)) { + case IDENTIFIER_NODE: + return name; + + case TYPE_DECL: + gcc_assert(DECL_NAME(name)); + return DECL_NAME(name); + + default: + gcc_unreachable(); + } +} + +__attribute__((weak)) tree c_global_trees[CTI_MAX]; + +// the core computation of the rap hash +// the first piece is a (hopefully) compiler independent encondig of the type, derived from the gcc tree code +// the second piece is type specific information, such as the size, qualifiers, (recursively) referenced types, etc +static void rap_hash_tree(const_tree type, rap_hash_flags_t flags, unsigned char sip_hash[8]) +{ + enum tree_code code; + unsigned int attrs; + + code = TREE_CODE(type); + attrs = rap_hash_tree_code[code]; + if (!attrs) { + fprintf(stderr, "unhandled tree_code %s %d\n", get_tree_code_name(code), code); + debug_tree(type); + gcc_unreachable(); + } + rap_fold_hash(sip_hash, (const unsigned char *)&attrs, sizeof attrs); + + enum { + // attrs layout for + // - all types: + RAP_HASH_VOLATILE = 1U << 31, + RAP_HASH_NOT_VOLATILE = 1U << 30, + RAP_HASH_CONST = 1U << 29, + RAP_HASH_NOT_CONST = 1U << 28, + + // - pointer types: + RAP_HASH_RESTRICT = 1U << 27, + RAP_HASH_NOT_RESTRICT = 1U << 26, + + // - C integer types: + RAP_HASH_UNSIGNED = 1U << 25, + RAP_HASH_SIGNED = 1U << 24, + + RAP_HASH_UNQUALIFIED_CHAR = 1U << 23, + RAP_HASH_CHAR = 1U << 22, + RAP_HASH_SHORT = 1U << 21, + RAP_HASH_INT = 1U << 20, + RAP_HASH_LONG = 1U << 19, + RAP_HASH_LONG_LONG = 1U << 18, + RAP_HASH_WCHAR = 1U << 17, + RAP_HASH_CHAR16 = 1U << 16, + RAP_HASH_CHAR32 = 1U << 15, + + // - C float types + RAP_HASH_FLOAT = 1U << 14, + RAP_HASH_DOUBLE = 1U << 13, + RAP_HASH_LONG_DOUBLE = 1U << 12, + RAP_HASH_DFLOAT32 = 1U << 11, + RAP_HASH_DFLOAT64 = 1U << 10, + RAP_HASH_DFLOAT128 = 1U << 9, + }; + + attrs = 0; + if (flags.qual_volatile) + attrs |= TYPE_VOLATILE(type) ? RAP_HASH_VOLATILE : RAP_HASH_NOT_VOLATILE; + if (flags.qual_const) + attrs |= TYPE_READONLY(type) ? RAP_HASH_CONST : RAP_HASH_NOT_CONST; + + switch (code) { + default: + debug_tree(type); + gcc_unreachable(); + break; + + case VOID_TYPE: + break; + + case OFFSET_TYPE: + rap_hash_tree(TREE_TYPE(type), flags, sip_hash); + rap_hash_tree(TYPE_OFFSET_BASETYPE(type), flags, sip_hash); + break; + + case FUNCTION_TYPE: + rap_hash_function(type, flags, sip_hash); + break; + + case RECORD_TYPE: + rap_hash_type_name(type, sip_hash); + break; + + case UNION_TYPE: + rap_hash_type_name(type, sip_hash); + break; + + case POINTER_TYPE: + case REFERENCE_TYPE: + rap_hash_tree(TREE_TYPE(type), flags, sip_hash); + break; + + case VECTOR_TYPE: + rap_hash_tree(TREE_TYPE(type), flags, sip_hash); + rap_hash_type_precision(TREE_TYPE(type), sip_hash); + break; + + case ARRAY_TYPE: + rap_hash_tree(TREE_TYPE(type), flags, sip_hash); + break; + + case REAL_TYPE: { + const_tree main_variant = TYPE_MAIN_VARIANT(type); + + switch (TYPE_PRECISION(main_variant)) { + default: + debug_tree(type); + debug_tree(TYPE_MAIN_VARIANT(type)); + gcc_unreachable(); + + case 32: +// attrs |= RAP_HASH_FLOAT; + break; + + case 64: +// attrs |= RAP_HASH_DOUBLE; + break; + + case 80: + case 128: + attrs |= RAP_HASH_LONG_DOUBLE; + break; + } + rap_hash_type_precision(main_variant, sip_hash); + break; + } + + case ENUMERAL_TYPE: + rap_hash_type_name(type, sip_hash); + case BOOLEAN_TYPE: + rap_hash_type_precision(type, sip_hash); + break; + + case INTEGER_TYPE: { + attrs |= TYPE_UNSIGNED(type) ? RAP_HASH_UNSIGNED : RAP_HASH_SIGNED; + rap_hash_type_precision(type, sip_hash); + break; + } + } + + rap_fold_hash(sip_hash, (const unsigned char *)&attrs, sizeof attrs); +} + +static const_tree rap_dequal_argtype(const_tree argtype) +{ + // since gcc/tree.c:free_lang_data_in_type removes const/volatile from the top level param decl + // we have to simulate it here as this can be called earlier from the frontend as well + if (TYPE_READONLY(argtype) || TYPE_VOLATILE(argtype)) { + int quals; + + quals = TYPE_QUALS(argtype) & ~TYPE_QUAL_CONST & ~TYPE_QUAL_VOLATILE; + argtype = build_qualified_type(CONST_CAST_TREE(argtype), quals); + } + + return argtype; +} + +// main function to compute the rap hash for function types +// while virtual class methods are always replaced with their ancestor, +// callers can decide whether to fully utilize that information via flags.method_ancestor +static void rap_hash_function(const_tree fntype, rap_hash_flags_t flags, unsigned char sip_hash[8]) +{ + function_args_iterator args_iter; + const_tree arg; + + switch (TREE_CODE(fntype)) { + default: + debug_tree(fntype); + gcc_unreachable(); + + case FUNCTION_TYPE: + // 1. hash the result + rap_hash_tree(TREE_TYPE(fntype), flags, sip_hash); + + // 2. hash the function parameters + FOREACH_FUNCTION_ARGS(fntype, arg, args_iter) { + const_tree argtype = arg; + + argtype = rap_dequal_argtype(argtype); + rap_hash_tree(argtype, flags, sip_hash); + } + break; + } +} + +rap_hash_t rap_hash_function_type(const_tree fntype, rap_hash_flags_t flags) +{ + unsigned char sip_hash[8] = { }; + rap_hash_t hash; + + rap_hash_function(fntype, flags, sip_hash); + hash = rap_extract_hash(sip_hash); + + gcc_assert(hash.hash); + return hash; +} + +rap_hash_t rap_hash_function_decl(const_tree fndecl, rap_hash_flags_t flags) +{ + tree fntype; + + gcc_assert(TREE_CODE(fndecl) == FUNCTION_DECL); + fntype = TREE_TYPE(fndecl); + + switch (TREE_CODE(fntype)) { + default: + debug_tree(fndecl); + gcc_unreachable(); + + case FUNCTION_TYPE: + return rap_hash_function_type(fntype, flags); + } +} + +rap_hash_t rap_hash_function_node_imprecise(cgraph_node_ptr node) +{ + rap_hash_t hash; + tree fndecl; + + gcc_assert(rap_imprecise_hashes); + + hash.hash = 0; + if (node->uid < rap_cgraph_max_uid) + hash = rap_imprecise_hashes[node->uid]; + + if (hash.hash) + return hash; + + fndecl = NODE_DECL(node); + if (TREE_CODE(TREE_TYPE(fndecl)) == FUNCTION_TYPE) + return rap_hash_function_decl(fndecl, imprecise_rap_hash_flags); + + debug_cgraph_node(node); + debug_tree(fndecl); + error("indirect call to function %qD with a reserved hash value", fndecl); + return hash; +} + +void rap_calculate_func_hashes(void *event_data __unused, void *data __unused) +{ + cgraph_node_ptr node; + int uid; + + gcc_assert(!rap_imprecise_hashes); + + rap_imprecise_hashes = (rap_hash_t *)xcalloc(cgraph_max_uid, sizeof(*rap_imprecise_hashes)); + rap_cgraph_max_uid = cgraph_max_uid; + + FOR_EACH_FUNCTION(node) { + const_tree fndecl; + + uid = node->uid; + gcc_assert(uid < rap_cgraph_max_uid); + + if (node->global.inlined_to) + continue; + + fndecl = NODE_DECL(node); + gcc_assert(fndecl); + + rap_imprecise_hashes[uid] = rap_hash_function_decl(fndecl, imprecise_rap_hash_flags); + gcc_assert(rap_imprecise_hashes[uid].hash); + } +} diff --git a/scripts/gcc-plugins/rap_plugin/rap_plugin.c b/scripts/gcc-plugins/rap_plugin/rap_plugin.c new file mode 100644 index 0000000..658c305 --- /dev/null +++ b/scripts/gcc-plugins/rap_plugin/rap_plugin.c @@ -0,0 +1,534 @@ +/* + * Copyright 2012-2016 by PaX Team <pageexec@freemail.hu> + * Licensed under the GPL v2 + * + * Homepage: http://pax.grsecurity.net/ + * + * Usage: + * $ # for 4.5/4.6/C based 4.7 + * $ gcc -I`gcc -print-file-name=plugin`/include -I`gcc -print-file-name=plugin`/include/c-family -fPIC -shared -O2 -o rap_plugin.so rap_plugin.c + * $ # for C++ based 4.7/4.8+ + * $ g++ -I`g++ -print-file-name=plugin`/include -I`g++ -print-file-name=plugin`/include/c-family -fPIC -shared -O2 -o rap_plugin.so rap_plugin.c + * $ gcc -fplugin=./rap_plugin.so -fplugin-arg-rap_plugin-check=call test.c -O2 + */ + +#include "rap.h" + +__visible int plugin_is_GPL_compatible; + +static struct plugin_info rap_plugin_info = { + .version = "201604272100", + .help = "check=call\tenable the corresponding features\n" + "hash=abs,abs-finish,const,volatile\n" + "report=func,fptr,abs\n" +}; + +rap_hash_flags_t imprecise_rap_hash_flags = { + .qual_const = 1, + .qual_volatile = 1, +}; + +tree rap_hash_type_node; + +static bool report_func_hash, report_abs_hash; + +// create the equivalent of +// asm volatile("" : : : "memory"); +// or +// asm("" : "+rm"(var)); +// or +// asm("" : : "rm"(var)); +gimple barrier(tree var, bool full) +{ + gimple stmt; + gasm *asm_stmt; +#if BUILDING_GCC_VERSION <= 4007 + VEC(tree, gc) *inputs = NULL; + VEC(tree, gc) *outputs = NULL; + VEC(tree, gc) *clobbers = NULL; +#else + vec<tree, va_gc> *inputs = NULL; + vec<tree, va_gc> *outputs = NULL; + vec<tree, va_gc> *clobbers = NULL; +#endif + + if (!var && full) { + tree clobber; + + clobber = build_tree_list(NULL_TREE, build_string(7, "memory")); +#if BUILDING_GCC_VERSION <= 4007 + VEC_safe_push(tree, gc, clobbers, clobber); +#else + vec_safe_push(clobbers, clobber); +#endif + } else if (full) { + tree input, output; + + input = build_tree_list(NULL_TREE, build_string(2, "0")); + input = chainon(NULL_TREE, build_tree_list(input, var)); +#if BUILDING_GCC_VERSION <= 4007 + VEC_safe_push(tree, gc, inputs, input); +#else + vec_safe_push(inputs, input); +#endif + + output = build_tree_list(NULL_TREE, build_string(4, "=rm")); + gcc_assert(SSA_NAME_VAR(var)); + var = make_ssa_name(SSA_NAME_VAR(var), NULL); + output = chainon(NULL_TREE, build_tree_list(output, var)); +#if BUILDING_GCC_VERSION <= 4007 + VEC_safe_push(tree, gc, outputs, output); +#else + vec_safe_push(outputs, output); +#endif + } else { + tree input; + + input = build_tree_list(NULL_TREE, build_string(3, "rm")); + input = chainon(NULL_TREE, build_tree_list(input, var)); +#if BUILDING_GCC_VERSION <= 4007 + VEC_safe_push(tree, gc, inputs, input); +#else + vec_safe_push(inputs, input); +#endif + } + + stmt = gimple_build_asm_vec("", inputs, outputs, clobbers, NULL); + asm_stmt = as_a_gasm(stmt); + if (!var && full) + gimple_asm_set_volatile(asm_stmt, true); + else if (full) + SSA_NAME_DEF_STMT(var) = stmt; + return stmt; +} + +static const struct gcc_debug_hooks *old_debug_hooks; +static struct gcc_debug_hooks rap_debug_hooks; + +static bool __rap_cgraph_indirectly_callable(cgraph_node_ptr node, void *data) +{ +#if BUILDING_GCC_VERSION >= 4008 + if (NODE_SYMBOL(node)->externally_visible) +#else + if (node->local.externally_visible) +#endif + return true; + + if (NODE_SYMBOL(node)->address_taken) + return true; + + return false; +} + +static bool rap_cgraph_indirectly_callable(cgraph_node_ptr node) +{ + return cgraph_for_node_and_aliases(node, __rap_cgraph_indirectly_callable, NULL, true); +} + +static void rap_hash_align(tree decl) +{ + const unsigned HOST_WIDE_INT rap_hash_offset = TARGET_64BIT ? 2 * sizeof(rap_hash_t) : sizeof(rap_hash_t); + unsigned HOST_WIDE_INT skip; + + skip = 1ULL << align_functions_log; + if (DECL_USER_ALIGN(decl)) + return; + + if (!optimize_function_for_speed_p(cfun)) + return; + + if (skip <= rap_hash_offset) + return; + +#ifdef TARGET_386 + { + char padding[skip - rap_hash_offset]; + + // this byte sequence helps disassemblers not trip up on the following rap hash + memset(padding, 0xcc, sizeof padding - 1); + padding[sizeof padding - 1] = 0xb8; + ASM_OUTPUT_ASCII(asm_out_file, padding, sizeof padding); + } +#else + ASM_OUTPUT_SKIP(asm_out_file, skip - rap_hash_offset); +#endif +} + +static void rap_begin_function(tree decl) +{ + cgraph_node_ptr node; + rap_hash_t imprecise_rap_hash; + + gcc_assert(debug_hooks == &rap_debug_hooks); + + // chain to previous callback + if (old_debug_hooks && old_debug_hooks->begin_function) + old_debug_hooks->begin_function(decl); + + // align the rap hash if necessary + rap_hash_align(decl); + + // don't compute hash for functions called only directly + node = cgraph_get_node(decl); + gcc_assert(node); + if (!rap_cgraph_indirectly_callable(node)) { + imprecise_rap_hash.hash = 0; + } else { + imprecise_rap_hash = rap_hash_function_node_imprecise(node); + } + + if (report_func_hash) + inform(DECL_SOURCE_LOCATION(decl), "func rap_hash: %x %s", imprecise_rap_hash.hash, IDENTIFIER_POINTER(DECL_ASSEMBLER_NAME(decl))); + + if (TARGET_64BIT) + fprintf(asm_out_file, "\t.quad %#lx\t%s __rap_hash_%s\n", (long)imprecise_rap_hash.hash, ASM_COMMENT_START, IDENTIFIER_POINTER(DECL_ASSEMBLER_NAME(decl))); + else + fprintf(asm_out_file, "\t.long %#x\t%s __rap_hash_%s\n", imprecise_rap_hash.hash, ASM_COMMENT_START, IDENTIFIER_POINTER(DECL_ASSEMBLER_NAME(decl))); +} + +static void rap_start_unit_common(void *gcc_data __unused, void *user_data __unused) +{ + rap_hash_type_node = long_integer_type_node; + + if (debug_hooks) + rap_debug_hooks = *debug_hooks; + rap_debug_hooks.begin_function = rap_begin_function; + old_debug_hooks = debug_hooks; + debug_hooks = &rap_debug_hooks; +} + +/* + emit an absolute symbol for each function that may be referenced through the plt + - all externs + - non-static functions + - use visibility instead? + + .globl __rap_hash_func + .offset 0xhash_for_func + .type __rap_hash_func, @object + __rap_hash_func: + .previous +*/ +static void rap_finish_unit(void *gcc_data __unused, void *user_data __unused) +{ + cgraph_node_ptr node; + rap_hash_t hash; + + gcc_assert(debug_hooks == &rap_debug_hooks); + + hash.hash = 0; + FOR_EACH_FUNCTION(node) { + tree fndecl; + const char *asmname; + char *name = NULL; + + if (cgraph_function_body_availability(node) >= AVAIL_INTERPOSABLE) { + if (node->thunk.thunk_p || node->alias) + continue; + if (!rap_cgraph_indirectly_callable(node)) + continue; + } + +#if BUILDING_GCC_VERSION >= 4007 + gcc_assert(cgraph_function_or_thunk_node(node, NULL) == node); +#endif + + fndecl = NODE_DECL(node); + gcc_assert(fndecl); + if (DECL_IS_BUILTIN(fndecl) && DECL_BUILT_IN_CLASS(fndecl) == BUILT_IN_NORMAL) + continue; + + if (!TREE_PUBLIC(fndecl)) + continue; + + if (DECL_ARTIFICIAL(fndecl)) + continue; + + if (DECL_ABSTRACT_ORIGIN(fndecl) && DECL_ABSTRACT_ORIGIN(fndecl) != fndecl) + continue; + + gcc_assert(DECL_ASSEMBLER_NAME(fndecl)); + asmname = IDENTIFIER_POINTER(DECL_ASSEMBLER_NAME(fndecl)); + if (strchr(asmname, '.')) + continue; + + if (asmname[0] == '*') + asmname++; + + gcc_assert(asmname[0]); + gcc_assert(asprintf(&name, "__rap_hash_%s", asmname) != -1); + + hash = rap_hash_function_node_imprecise(node); + if (report_abs_hash) + inform(DECL_SOURCE_LOCATION(fndecl), "abs rap_hash: %x %s", hash.hash, IDENTIFIER_POINTER(DECL_ASSEMBLER_NAME(fndecl))); + + fprintf(asm_out_file, GLOBAL_ASM_OP " %s\n", name); + if (TARGET_64BIT) + fprintf(asm_out_file, "\t.offset %#lx\n", (long)hash.hash); + else + fprintf(asm_out_file, "\t.offset %#x\n", hash.hash); + ASM_OUTPUT_TYPE_DIRECTIVE(asm_out_file, name, "object"); + ASM_OUTPUT_LABEL(asm_out_file, name); + free(name); + } + + if (hash.hash) + fprintf(asm_out_file, "\t.previous\n"); +} + +#if BUILDING_GCC_VERSION >= 4007 +// emit the rap hash as an absolute symbol for all functions seen in the frontend +// this is necessary as later unreferenced nodes will be removed yet we'd like to emit as many hashes as possible +static void rap_finish_decl(void *event_data, void *data __unused) +{ + tree fndecl = (tree)event_data; + rap_hash_t hash; + const char *asmname; + char *name = NULL; + + if (fndecl == error_mark_node) + return; + + if (TREE_CODE(fndecl) != FUNCTION_DECL) + return; + + if (!TREE_PUBLIC(fndecl)) + return; + + if (DECL_ARTIFICIAL(fndecl)) + return; + + if (DECL_ABSTRACT_ORIGIN(fndecl) && DECL_ABSTRACT_ORIGIN(fndecl) != fndecl) + return; + + asmname = DECL_NAME_POINTER(fndecl); + gcc_assert(asmname[0]); + + if (strchr(asmname, '.')) + return; + + gcc_assert(asprintf(&name, "__rap_hash_%s", asmname) != -1); + + hash = rap_hash_function_decl(fndecl, imprecise_rap_hash_flags); + + if (report_abs_hash) + inform(DECL_SOURCE_LOCATION(fndecl), "abs rap_hash: %x %s", hash.hash, asmname); + + fprintf(asm_out_file, GLOBAL_ASM_OP " %s\n", name); + if (TARGET_64BIT) + fprintf(asm_out_file, "\t.offset %#lx\n", (long)hash.hash); + else + fprintf(asm_out_file, "\t.offset %#x\n", hash.hash); + ASM_OUTPUT_TYPE_DIRECTIVE(asm_out_file, name, "object"); + ASM_OUTPUT_LABEL(asm_out_file, name); + free(name); + + fprintf(asm_out_file, "\t.previous\n"); +} +#endif + +static bool rap_unignore_gate(void) +{ + if (!DECL_IGNORED_P(current_function_decl)) + return false; + + inform(DECL_SOURCE_LOCATION(current_function_decl), "DECL_IGNORED fixed"); + + DECL_IGNORED_P(current_function_decl) = 0; + return false; +} + +#define PASS_NAME rap_unignore +#define NO_EXECUTE +#define TODO_FLAGS_FINISH TODO_dump_func +#include "gcc-generate-rtl-pass.h" + +static bool rap_version_check(struct plugin_gcc_version *gcc_version, struct plugin_gcc_version *plugin_version) +{ + if (!gcc_version || !plugin_version) + return false; + +#if BUILDING_GCC_VERSION >= 5000 + if (strncmp(gcc_version->basever, plugin_version->basever, 4)) +#else + if (strcmp(gcc_version->basever, plugin_version->basever)) +#endif + return false; + if (strcmp(gcc_version->datestamp, plugin_version->datestamp)) + return false; + if (strcmp(gcc_version->devphase, plugin_version->devphase)) + return false; + if (strcmp(gcc_version->revision, plugin_version->revision)) + return false; +// if (strcmp(gcc_version->configuration_arguments, plugin_version->configuration_arguments)) +// return false; + return true; +} + +EXPORTED_CONST struct ggc_root_tab gt_ggc_r_gt_rap[] = { + { + .base = &rap_hash_type_node, + .nelt = 1, + .stride = sizeof(rap_hash_type_node), + .cb = >_ggc_mx_tree_node, + .pchw = >_pch_nx_tree_node + }, + LAST_GGC_ROOT_TAB +}; + +static void +handle_type_cast (void *gcc_data, void *user_data) +{ + (void) user_data; + tree *t = (tree *) gcc_data; + tree type = t[0]; + tree otype = t[1]; + + if (TREE_CODE (type) == POINTER_TYPE + && TREE_CODE (otype) == POINTER_TYPE + && TREE_CODE (TREE_TYPE (type)) == FUNCTION_TYPE + && TREE_CODE (TREE_TYPE (otype)) == FUNCTION_TYPE +// && type != TYPE_MAIN_VARIANT (otype) + && TYPE_CANONICAL (TREE_TYPE (type)) != TYPE_CANONICAL (TREE_TYPE (otype))) + error (G_("cast from function type %qT " + "to non-matching type %qT"), otype, type); + +} + +__visible int plugin_init(struct plugin_name_args *plugin_info, struct plugin_gcc_version *version) +{ + int i; + const char * const plugin_name = plugin_info->base_name; + const int argc = plugin_info->argc; + const struct plugin_argument * const argv = plugin_info->argv; + bool enable_call = false; + bool enable_abs = false, enable_abs_finish = false; + + struct register_pass_info rap_fptr_pass_info; + struct register_pass_info rap_unignore_pass_info; + + rap_fptr_pass_info.pass = make_rap_fptr_pass(); + rap_fptr_pass_info.reference_pass_name = "nrv"; + rap_fptr_pass_info.ref_pass_instance_number = 1; + rap_fptr_pass_info.pos_op = PASS_POS_INSERT_AFTER; + + rap_unignore_pass_info.pass = make_rap_unignore_pass(); + rap_unignore_pass_info.reference_pass_name = "final"; + rap_unignore_pass_info.ref_pass_instance_number = 1; + rap_unignore_pass_info.pos_op = PASS_POS_INSERT_BEFORE; + + if (!rap_version_check(version, &gcc_version)) { + error(G_("incompatible gcc/plugin versions")); + return 1; + } + +#if BUILDING_GCC_VERSION >= 5000 + if (flag_ipa_icf_functions) { +// warning_at(UNKNOWN_LOCATION, 0, G_("-fipa-icf is incompatible with %s, disabling..."), plugin_name); +// inform(UNKNOWN_LOCATION, G_("-fipa-icf is incompatible with %s, disabling..."), plugin_name); + flag_ipa_icf_functions = 0; + } +#endif + + for (i = 0; i < argc; ++i) { + if (!strcmp(argv[i].key, "disable")) + continue; + + if (!strcmp(argv[i].key, "check")) { + char *values, *value, *saveptr; + + if (!argv[i].value) { + error(G_("no value supplied for option '-fplugin-arg-%s-%s'"), plugin_name, argv[i].key); + continue; + } + + values = xstrdup(argv[i].value); + value = strtok_r(values, ",", &saveptr); + while (value) { + if (!strcmp(value, "call")) + enable_call = true; + else + error(G_("unknown value supplied for option '-fplugin-arg-%s-%s=%s'"), plugin_name, argv[i].key, value); + value = strtok_r(NULL, ",", &saveptr); + } + free(values); + continue; + } + + if (!strcmp(argv[i].key, "hash")) { + char *values, *value, *saveptr; + + if (!argv[i].value) { + error(G_("no value supplied for option '-fplugin-arg-%s-%s'"), plugin_name, argv[i].key); + continue; + } + + values = xstrdup(argv[i].value); + value = strtok_r(values, ",", &saveptr); + while (value) { + if (!strcmp(value, "abs")) + enable_abs = enable_abs_finish = true; + else if (!strcmp(value, "abs-finish")) + enable_abs_finish = true; +// else if (!strcmp(value, "const")) +// imprecise_rap_hash_flags.qual_const = 1; +// else if (!strcmp(value, "volatile")) +// imprecise_rap_hash_flags.qual_volatile = 1; + else + error(G_("unknown value supplied for option '-fplugin-arg-%s-%s=%s'"), plugin_name, argv[i].key, value); + value = strtok_r(NULL, ",", &saveptr); + } + free(values); + continue; + } + + if (!strcmp(argv[i].key, "report")) { + char *values, *value, *saveptr; + + if (!argv[i].value) { + error(G_("no value supplied for option '-fplugin-arg-%s-%s'"), plugin_name, argv[i].key); + continue; + } + + values = xstrdup(argv[i].value); + value = strtok_r(values, ",", &saveptr); + while (value) { + if (!strcmp(value, "func")) + report_func_hash = true; + else if (!strcmp(value, "fptr")) + report_fptr_hash = true; + else if (!strcmp(value, "abs")) + report_abs_hash = true; + else + error(G_("unknown value supplied for option '-fplugin-arg-%s-%s=%s'"), plugin_name, argv[i].key, value); + value = strtok_r(NULL, ",", &saveptr); + } + free(values); + continue; + } + + error(G_("unkown option '-fplugin-arg-%s-%s'"), plugin_name, argv[i].key); + } + + register_callback(plugin_name, PLUGIN_INFO, NULL, &rap_plugin_info); + + if (enable_call) { +#if BUILDING_GCC_VERSION >= 4007 + if (enable_abs) + register_callback(plugin_name, PLUGIN_FINISH_DECL, rap_finish_decl, NULL); +#else +#warning TODO +#endif + register_callback(plugin_name, PLUGIN_PASS_MANAGER_SETUP, NULL, &rap_unignore_pass_info); + register_callback(plugin_name, PLUGIN_START_UNIT, rap_start_unit_common, NULL); + register_callback(plugin_name, PLUGIN_REGISTER_GGC_ROOTS, NULL, (void *)>_ggc_r_gt_rap); + if (enable_abs_finish) + register_callback(plugin_name, PLUGIN_FINISH_UNIT, rap_finish_unit, NULL); + register_callback(plugin_name, PLUGIN_PASS_MANAGER_SETUP, NULL, &rap_fptr_pass_info); + register_callback(plugin_name, PLUGIN_ALL_IPA_PASSES_START, rap_calculate_func_hashes, NULL); + register_callback (plugin_name, PLUGIN_TYPE_CAST, handle_type_cast, NULL); + + } + + return 0; +} diff --git a/scripts/gcc-plugins/rap_plugin/sip.c b/scripts/gcc-plugins/rap_plugin/sip.c new file mode 100644 index 0000000..65bc1cd --- /dev/null +++ b/scripts/gcc-plugins/rap_plugin/sip.c @@ -0,0 +1,96 @@ +// SipHash-2-4 adapted by the PaX Team from the public domain version written by +// Jean-Philippe Aumasson <jeanphilippe.aumasson@gmail.com> +// Daniel J. Bernstein <djb@cr.yp.to> + +#include <stdint.h> + +#define ROTL(x, b) (u64)(((x) << (b)) | ((x) >> (64 - (b)))) + +#define U32TO8_LE(p, v) \ + (p)[0] = (u8)((v) ); (p)[1] = (u8)((v) >> 8); \ + (p)[2] = (u8)((v) >> 16); (p)[3] = (u8)((v) >> 24); + +#define U64TO8_LE(p, v) \ + U32TO8_LE((p), (u32)((v) )); \ + U32TO8_LE((p) + 4, (u32)((v) >> 32)); + +#define U8TO64_LE(p) ( \ + ((u64)((p)[0]) ) | \ + ((u64)((p)[1]) << 8) | \ + ((u64)((p)[2]) << 16) | \ + ((u64)((p)[3]) << 24) | \ + ((u64)((p)[4]) << 32) | \ + ((u64)((p)[5]) << 40) | \ + ((u64)((p)[6]) << 48) | \ + ((u64)((p)[7]) << 56)) + +#define SIPROUND \ +do { \ + v0 += v1; v1 = ROTL(v1, 13); v1 ^= v0; v0 = ROTL(v0, 32); \ + v2 += v3; v3 = ROTL(v3, 16); v3 ^= v2; \ + v0 += v3; v3 = ROTL(v3, 21); v3 ^= v0; \ + v2 += v1; v1 = ROTL(v1, 17); v1 ^= v2; v2 = ROTL(v2, 32); \ +} while(0) + +typedef uint64_t u64; +typedef uint32_t u32; +typedef uint8_t u8; + +/* SipHash-2-4 with previous output folding, a poor man's streaming interface */ +void siphash24fold(unsigned char *out, const unsigned char *in, unsigned long long inlen, const unsigned char *k); + +void siphash24fold(unsigned char *out, const unsigned char *in, unsigned long long inlen, const unsigned char *k) +{ + u64 k0 = U8TO64_LE(k); + u64 k1 = U8TO64_LE(k + 8); + /* "somepseudorandomlygeneratedbytes" */ + u64 v0 = 0x736f6d6570736575ULL ^ k0; + u64 v1 = 0x646f72616e646f6dULL ^ k1; + u64 v2 = 0x6c7967656e657261ULL ^ k0; + u64 v3 = 0x7465646279746573ULL ^ k1; + u64 b, m; + const u8 * const end = in + inlen - (inlen % sizeof(u64)); + const int left = inlen & 7; + b = ((u64)inlen) << 56; + + // fold in the previous output + m = U8TO64_LE(out); + v3 ^= m; + SIPROUND; + SIPROUND; + v0 ^= m; + + // consume full input blocks + for (; in != end; in += 8) { + m = U8TO64_LE(in); + v3 ^= m; + SIPROUND; + SIPROUND; + v0 ^= m; + } + + // consume the last potentially partial block + switch (left) { + case 7: b |= ((u64)in[6]) << 48; + case 6: b |= ((u64)in[5]) << 40; + case 5: b |= ((u64)in[4]) << 32; + case 4: b |= ((u64)in[3]) << 24; + case 3: b |= ((u64)in[2]) << 16; + case 2: b |= ((u64)in[1]) << 8; + case 1: b |= ((u64)in[0]); break; + case 0: break; + } + + // finalize + v3 ^= b; + SIPROUND; + SIPROUND; + v0 ^= b; + v2 ^= 0xff; + SIPROUND; + SIPROUND; + SIPROUND; + SIPROUND; + b = v0 ^ v1 ^ v2 ^ v3; + U64TO8_LE(out, b); +} diff --git a/security/Kconfig b/security/Kconfig index 965f1a3..c18980a 100644 --- a/security/Kconfig +++ b/security/Kconfig @@ -80,6 +80,25 @@ config PAX_MPROTECT the enforcement of non-executable pages. endif + +config PAX_RAP + bool "Prevent code reuse attacks" + depends on X86_64 && GCC_PLUGINS + help + By saying Y here the kernel will check indirect control transfers + in order to detect and prevent attacks that try to hijack control + flow by overwriting code pointers. + + If you have an amd64 processor that does not support SMEP then you + must also enable a KERNEXEC code pointer instrumentation method + (see PAX_KERNEXEC_PLUGIN). + + Note that binary modules cannot be instrumented by this approach. + + Note that the implementation requires a gcc with plugin support, + i.e., gcc 4.5 or newer. You may need to install the supporting + headers explicitly in addition to the normal gcc package. + endif source security/keys/Kconfig diff --git a/security/apparmor/lsm.c b/security/apparmor/lsm.c index 41b8cb1..06670d3 100644 --- a/security/apparmor/lsm.c +++ b/security/apparmor/lsm.c @@ -656,11 +656,11 @@ static const struct kernel_param_ops param_ops_aalockpolicy = { .get = param_get_aalockpolicy }; -static int param_set_audit(const char *val, struct kernel_param *kp); -static int param_get_audit(char *buffer, struct kernel_param *kp); +static int param_set_audit(const char *val, const struct kernel_param *kp); +static int param_get_audit(char *buffer, const struct kernel_param *kp); -static int param_set_mode(const char *val, struct kernel_param *kp); -static int param_get_mode(char *buffer, struct kernel_param *kp); +static int param_set_mode(const char *val, const struct kernel_param *kp); +static int param_get_mode(char *buffer, const struct kernel_param *kp); /* Flag values, also controllable via /sys/module/apparmor/parameters * We define special types as we want to do additional mediation. @@ -774,7 +774,7 @@ static int param_get_aauint(char *buffer, const struct kernel_param *kp) return param_get_uint(buffer, kp); } -static int param_get_audit(char *buffer, struct kernel_param *kp) +static int param_get_audit(char *buffer, const struct kernel_param *kp) { if (!policy_view_capable()) return -EPERM; @@ -785,7 +785,7 @@ static int param_get_audit(char *buffer, struct kernel_param *kp) return sprintf(buffer, "%s", audit_mode_names[aa_g_audit]); } -static int param_set_audit(const char *val, struct kernel_param *kp) +static int param_set_audit(const char *val, const struct kernel_param *kp) { int i; if (!policy_admin_capable()) @@ -807,7 +807,7 @@ static int param_set_audit(const char *val, struct kernel_param *kp) return -EINVAL; } -static int param_get_mode(char *buffer, struct kernel_param *kp) +static int param_get_mode(char *buffer, const struct kernel_param *kp) { if (!policy_admin_capable()) return -EPERM; @@ -818,7 +818,7 @@ static int param_get_mode(char *buffer, struct kernel_param *kp) return sprintf(buffer, "%s", aa_profile_mode_names[aa_g_profile_mode]); } -static int param_set_mode(const char *val, struct kernel_param *kp) +static int param_set_mode(const char *val, const struct kernel_param *kp) { int i; if (!policy_admin_capable()) -- 2.8.1