提交 c856694e 编写于 作者: J J. Bruce Fields

nfsd4: make op_cacheresult another flag

I'm not sure why I used a new field for this originally.

Also, the differences between some of these flags are a little subtle;
add some comments to explain.
Signed-off-by: NJ. Bruce Fields <bfields@redhat.com>
上级 3d02fa29
...@@ -1013,14 +1013,15 @@ enum nfsd4_op_flags { ...@@ -1013,14 +1013,15 @@ enum nfsd4_op_flags {
/* For rfc 5661 section 2.6.3.1.1: */ /* For rfc 5661 section 2.6.3.1.1: */
OP_HANDLES_WRONGSEC = 1 << 3, OP_HANDLES_WRONGSEC = 1 << 3,
OP_IS_PUTFH_LIKE = 1 << 4, OP_IS_PUTFH_LIKE = 1 << 4,
OP_MODIFIES_SOMETHING = 1 << 5, /* op is non-idempotent */
};
struct nfsd4_operation {
nfsd4op_func op_func;
u32 op_flags;
char *op_name;
/* /*
* These are the ops whose result size we estimate before
* encoding, to avoid performing an op then not being able to
* respond or cache a response. This includes writes and setattrs
* as well as the operations usually called "nonidempotent":
*/
OP_MODIFIES_SOMETHING = 1 << 5,
/*
* Cache compounds containing these ops in the xid-based drc:
* We use the DRC for compounds containing non-idempotent * We use the DRC for compounds containing non-idempotent
* operations, *except* those that are 4.1-specific (since * operations, *except* those that are 4.1-specific (since
* sessions provide their own EOS), and except for stateful * sessions provide their own EOS), and except for stateful
...@@ -1028,7 +1029,13 @@ struct nfsd4_operation { ...@@ -1028,7 +1029,13 @@ struct nfsd4_operation {
* (since sequence numbers provide EOS for open, lock, etc in * (since sequence numbers provide EOS for open, lock, etc in
* the v4.0 case). * the v4.0 case).
*/ */
bool op_cacheresult; OP_CACHEME = 1 << 6,
};
struct nfsd4_operation {
nfsd4op_func op_func;
u32 op_flags;
char *op_name;
/* Try to get response size before operation */ /* Try to get response size before operation */
nfsd4op_rsize op_rsize_bop; nfsd4op_rsize op_rsize_bop;
}; };
...@@ -1077,7 +1084,7 @@ static inline struct nfsd4_operation *OPDESC(struct nfsd4_op *op) ...@@ -1077,7 +1084,7 @@ static inline struct nfsd4_operation *OPDESC(struct nfsd4_op *op)
bool nfsd4_cache_this_op(struct nfsd4_op *op) bool nfsd4_cache_this_op(struct nfsd4_op *op)
{ {
return OPDESC(op)->op_cacheresult; return OPDESC(op)->op_flags & OP_CACHEME;
} }
static bool need_wrongsec_check(struct svc_rqst *rqstp) static bool need_wrongsec_check(struct svc_rqst *rqstp)
...@@ -1420,9 +1427,8 @@ static struct nfsd4_operation nfsd4_ops[] = { ...@@ -1420,9 +1427,8 @@ static struct nfsd4_operation nfsd4_ops[] = {
}, },
[OP_CREATE] = { [OP_CREATE] = {
.op_func = (nfsd4op_func)nfsd4_create, .op_func = (nfsd4op_func)nfsd4_create,
.op_flags = OP_MODIFIES_SOMETHING, .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME,
.op_name = "OP_CREATE", .op_name = "OP_CREATE",
.op_cacheresult = true,
.op_rsize_bop = (nfsd4op_rsize)nfsd4_create_rsize, .op_rsize_bop = (nfsd4op_rsize)nfsd4_create_rsize,
}, },
[OP_DELEGRETURN] = { [OP_DELEGRETURN] = {
...@@ -1442,9 +1448,9 @@ static struct nfsd4_operation nfsd4_ops[] = { ...@@ -1442,9 +1448,9 @@ static struct nfsd4_operation nfsd4_ops[] = {
}, },
[OP_LINK] = { [OP_LINK] = {
.op_func = (nfsd4op_func)nfsd4_link, .op_func = (nfsd4op_func)nfsd4_link,
.op_flags = ALLOWED_ON_ABSENT_FS | OP_MODIFIES_SOMETHING, .op_flags = ALLOWED_ON_ABSENT_FS | OP_MODIFIES_SOMETHING
| OP_CACHEME,
.op_name = "OP_LINK", .op_name = "OP_LINK",
.op_cacheresult = true,
.op_rsize_bop = (nfsd4op_rsize)nfsd4_link_rsize, .op_rsize_bop = (nfsd4op_rsize)nfsd4_link_rsize,
}, },
[OP_LOCK] = { [OP_LOCK] = {
...@@ -1534,16 +1540,14 @@ static struct nfsd4_operation nfsd4_ops[] = { ...@@ -1534,16 +1540,14 @@ static struct nfsd4_operation nfsd4_ops[] = {
}, },
[OP_REMOVE] = { [OP_REMOVE] = {
.op_func = (nfsd4op_func)nfsd4_remove, .op_func = (nfsd4op_func)nfsd4_remove,
.op_flags = OP_MODIFIES_SOMETHING, .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME,
.op_name = "OP_REMOVE", .op_name = "OP_REMOVE",
.op_cacheresult = true,
.op_rsize_bop = (nfsd4op_rsize)nfsd4_remove_rsize, .op_rsize_bop = (nfsd4op_rsize)nfsd4_remove_rsize,
}, },
[OP_RENAME] = { [OP_RENAME] = {
.op_func = (nfsd4op_func)nfsd4_rename, .op_func = (nfsd4op_func)nfsd4_rename,
.op_flags = OP_MODIFIES_SOMETHING, .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME,
.op_name = "OP_RENAME", .op_name = "OP_RENAME",
.op_cacheresult = true,
.op_rsize_bop = (nfsd4op_rsize)nfsd4_rename_rsize, .op_rsize_bop = (nfsd4op_rsize)nfsd4_rename_rsize,
}, },
[OP_RENEW] = { [OP_RENEW] = {
...@@ -1575,24 +1579,21 @@ static struct nfsd4_operation nfsd4_ops[] = { ...@@ -1575,24 +1579,21 @@ static struct nfsd4_operation nfsd4_ops[] = {
[OP_SETATTR] = { [OP_SETATTR] = {
.op_func = (nfsd4op_func)nfsd4_setattr, .op_func = (nfsd4op_func)nfsd4_setattr,
.op_name = "OP_SETATTR", .op_name = "OP_SETATTR",
.op_flags = OP_MODIFIES_SOMETHING, .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME,
.op_cacheresult = true,
.op_rsize_bop = (nfsd4op_rsize)nfsd4_setattr_rsize, .op_rsize_bop = (nfsd4op_rsize)nfsd4_setattr_rsize,
}, },
[OP_SETCLIENTID] = { [OP_SETCLIENTID] = {
.op_func = (nfsd4op_func)nfsd4_setclientid, .op_func = (nfsd4op_func)nfsd4_setclientid,
.op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS
| OP_MODIFIES_SOMETHING, | OP_MODIFIES_SOMETHING | OP_CACHEME,
.op_name = "OP_SETCLIENTID", .op_name = "OP_SETCLIENTID",
.op_cacheresult = true,
.op_rsize_bop = (nfsd4op_rsize)nfsd4_setclientid_rsize, .op_rsize_bop = (nfsd4op_rsize)nfsd4_setclientid_rsize,
}, },
[OP_SETCLIENTID_CONFIRM] = { [OP_SETCLIENTID_CONFIRM] = {
.op_func = (nfsd4op_func)nfsd4_setclientid_confirm, .op_func = (nfsd4op_func)nfsd4_setclientid_confirm,
.op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS
| OP_MODIFIES_SOMETHING, | OP_MODIFIES_SOMETHING | OP_CACHEME,
.op_name = "OP_SETCLIENTID_CONFIRM", .op_name = "OP_SETCLIENTID_CONFIRM",
.op_cacheresult = true,
.op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize,
}, },
[OP_VERIFY] = { [OP_VERIFY] = {
...@@ -1601,9 +1602,8 @@ static struct nfsd4_operation nfsd4_ops[] = { ...@@ -1601,9 +1602,8 @@ static struct nfsd4_operation nfsd4_ops[] = {
}, },
[OP_WRITE] = { [OP_WRITE] = {
.op_func = (nfsd4op_func)nfsd4_write, .op_func = (nfsd4op_func)nfsd4_write,
.op_flags = OP_MODIFIES_SOMETHING, .op_flags = OP_MODIFIES_SOMETHING | OP_CACHEME,
.op_name = "OP_WRITE", .op_name = "OP_WRITE",
.op_cacheresult = true,
.op_rsize_bop = (nfsd4op_rsize)nfsd4_write_rsize, .op_rsize_bop = (nfsd4op_rsize)nfsd4_write_rsize,
}, },
[OP_RELEASE_LOCKOWNER] = { [OP_RELEASE_LOCKOWNER] = {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册