Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b60e9859 authored by Christoph Hellwig's avatar Christoph Hellwig
Browse files

nfsd4: properly type op_set_currentstateid callbacks



Given the args union in struct nfsd4_op a name, and pass it to the
op_set_currentstateid callbacks instead of using unsafe function
pointer casts.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
parent 35f297e5
Loading
Loading
Loading
Loading
+8 −4
Original line number Original line Diff line number Diff line
@@ -8,10 +8,14 @@ extern void clear_current_stateid(struct nfsd4_compound_state *cstate);
/*
/*
 * functions to set current state id
 * functions to set current state id
 */
 */
extern void nfsd4_set_opendowngradestateid(struct nfsd4_compound_state *cstate, struct nfsd4_open_downgrade *);
extern void nfsd4_set_opendowngradestateid(struct nfsd4_compound_state *,
extern void nfsd4_set_openstateid(struct nfsd4_compound_state *, struct nfsd4_open *);
		union nfsd4_op_u *);
extern void nfsd4_set_lockstateid(struct nfsd4_compound_state *, struct nfsd4_lock *);
extern void nfsd4_set_openstateid(struct nfsd4_compound_state *,
extern void nfsd4_set_closestateid(struct nfsd4_compound_state *, struct nfsd4_close *);
		union nfsd4_op_u *);
extern void nfsd4_set_lockstateid(struct nfsd4_compound_state *,
		union nfsd4_op_u *);
extern void nfsd4_set_closestateid(struct nfsd4_compound_state *,
		union nfsd4_op_u *);


/*
/*
 * functions to consume current state id
 * functions to consume current state id
+6 −6
Original line number Original line Diff line number Diff line
@@ -1525,7 +1525,6 @@ typedef __be32(*nfsd4op_func)(struct svc_rqst *, struct nfsd4_compound_state *,
			      void *);
			      void *);
typedef u32(*nfsd4op_rsize)(struct svc_rqst *, struct nfsd4_op *op);
typedef u32(*nfsd4op_rsize)(struct svc_rqst *, struct nfsd4_op *op);


typedef void(*stateid_setter)(struct nfsd4_compound_state *, void *);
typedef void(*stateid_getter)(struct nfsd4_compound_state *, void *);
typedef void(*stateid_getter)(struct nfsd4_compound_state *, void *);


enum nfsd4_op_flags {
enum nfsd4_op_flags {
@@ -1565,7 +1564,8 @@ struct nfsd4_operation {
	/* Try to get response size before operation */
	/* Try to get response size before operation */
	nfsd4op_rsize op_rsize_bop;
	nfsd4op_rsize op_rsize_bop;
	stateid_getter op_get_currentstateid;
	stateid_getter op_get_currentstateid;
	stateid_setter op_set_currentstateid;
	void (*op_set_currentstateid)(struct nfsd4_compound_state *,
			union nfsd4_op_u *);
};
};


static struct nfsd4_operation nfsd4_ops[];
static struct nfsd4_operation nfsd4_ops[];
@@ -2105,7 +2105,7 @@ static struct nfsd4_operation nfsd4_ops[] = {
		.op_name = "OP_CLOSE",
		.op_name = "OP_CLOSE",
		.op_rsize_bop = (nfsd4op_rsize)nfsd4_status_stateid_rsize,
		.op_rsize_bop = (nfsd4op_rsize)nfsd4_status_stateid_rsize,
		.op_get_currentstateid = (stateid_getter)nfsd4_get_closestateid,
		.op_get_currentstateid = (stateid_getter)nfsd4_get_closestateid,
		.op_set_currentstateid = (stateid_setter)nfsd4_set_closestateid,
		.op_set_currentstateid = nfsd4_set_closestateid,
	},
	},
	[OP_COMMIT] = {
	[OP_COMMIT] = {
		.op_func = (nfsd4op_func)nfsd4_commit,
		.op_func = (nfsd4op_func)nfsd4_commit,
@@ -2149,7 +2149,7 @@ static struct nfsd4_operation nfsd4_ops[] = {
		.op_flags = OP_MODIFIES_SOMETHING,
		.op_flags = OP_MODIFIES_SOMETHING,
		.op_name = "OP_LOCK",
		.op_name = "OP_LOCK",
		.op_rsize_bop = (nfsd4op_rsize)nfsd4_lock_rsize,
		.op_rsize_bop = (nfsd4op_rsize)nfsd4_lock_rsize,
		.op_set_currentstateid = (stateid_setter)nfsd4_set_lockstateid,
		.op_set_currentstateid = nfsd4_set_lockstateid,
	},
	},
	[OP_LOCKT] = {
	[OP_LOCKT] = {
		.op_func = (nfsd4op_func)nfsd4_lockt,
		.op_func = (nfsd4op_func)nfsd4_lockt,
@@ -2185,7 +2185,7 @@ static struct nfsd4_operation nfsd4_ops[] = {
		.op_flags = OP_HANDLES_WRONGSEC | OP_MODIFIES_SOMETHING,
		.op_flags = OP_HANDLES_WRONGSEC | OP_MODIFIES_SOMETHING,
		.op_name = "OP_OPEN",
		.op_name = "OP_OPEN",
		.op_rsize_bop = (nfsd4op_rsize)nfsd4_open_rsize,
		.op_rsize_bop = (nfsd4op_rsize)nfsd4_open_rsize,
		.op_set_currentstateid = (stateid_setter)nfsd4_set_openstateid,
		.op_set_currentstateid = nfsd4_set_openstateid,
	},
	},
	[OP_OPEN_CONFIRM] = {
	[OP_OPEN_CONFIRM] = {
		.op_func = (nfsd4op_func)nfsd4_open_confirm,
		.op_func = (nfsd4op_func)nfsd4_open_confirm,
@@ -2199,7 +2199,7 @@ static struct nfsd4_operation nfsd4_ops[] = {
		.op_name = "OP_OPEN_DOWNGRADE",
		.op_name = "OP_OPEN_DOWNGRADE",
		.op_rsize_bop = (nfsd4op_rsize)nfsd4_status_stateid_rsize,
		.op_rsize_bop = (nfsd4op_rsize)nfsd4_status_stateid_rsize,
		.op_get_currentstateid = (stateid_getter)nfsd4_get_opendowngradestateid,
		.op_get_currentstateid = (stateid_getter)nfsd4_get_opendowngradestateid,
		.op_set_currentstateid = (stateid_setter)nfsd4_set_opendowngradestateid,
		.op_set_currentstateid = nfsd4_set_opendowngradestateid,
	},
	},
	[OP_PUTFH] = {
	[OP_PUTFH] = {
		.op_func = (nfsd4op_func)nfsd4_putfh,
		.op_func = (nfsd4op_func)nfsd4_putfh,
+12 −8
Original line number Original line Diff line number Diff line
@@ -7103,27 +7103,31 @@ clear_current_stateid(struct nfsd4_compound_state *cstate)
 * functions to set current state id
 * functions to set current state id
 */
 */
void
void
nfsd4_set_opendowngradestateid(struct nfsd4_compound_state *cstate, struct nfsd4_open_downgrade *odp)
nfsd4_set_opendowngradestateid(struct nfsd4_compound_state *cstate,
		union nfsd4_op_u *u)
{
{
	put_stateid(cstate, &odp->od_stateid);
	put_stateid(cstate, &u->open_downgrade.od_stateid);
}
}


void
void
nfsd4_set_openstateid(struct nfsd4_compound_state *cstate, struct nfsd4_open *open)
nfsd4_set_openstateid(struct nfsd4_compound_state *cstate,
		union nfsd4_op_u *u)
{
{
	put_stateid(cstate, &open->op_stateid);
	put_stateid(cstate, &u->open.op_stateid);
}
}


void
void
nfsd4_set_closestateid(struct nfsd4_compound_state *cstate, struct nfsd4_close *close)
nfsd4_set_closestateid(struct nfsd4_compound_state *cstate,
		union nfsd4_op_u *u)
{
{
	put_stateid(cstate, &close->cl_stateid);
	put_stateid(cstate, &u->close.cl_stateid);
}
}


void
void
nfsd4_set_lockstateid(struct nfsd4_compound_state *cstate, struct nfsd4_lock *lock)
nfsd4_set_lockstateid(struct nfsd4_compound_state *cstate,
		union nfsd4_op_u *u)
{
{
	put_stateid(cstate, &lock->lk_resp_stateid);
	put_stateid(cstate, &u->lock.lk_resp_stateid);
}
}


/*
/*
+1 −1
Original line number Original line Diff line number Diff line
@@ -539,7 +539,7 @@ struct nfsd4_seek {
struct nfsd4_op {
struct nfsd4_op {
	int					opnum;
	int					opnum;
	__be32					status;
	__be32					status;
	union {
	union nfsd4_op_u {
		struct nfsd4_access		access;
		struct nfsd4_access		access;
		struct nfsd4_close		close;
		struct nfsd4_close		close;
		struct nfsd4_commit		commit;
		struct nfsd4_commit		commit;