diff options
author | J. Bruce Fields <bfields@redhat.com> | 2014-03-07 11:43:58 -0500 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2014-05-23 09:03:41 -0400 |
commit | 5b648699afa00de0cfe679a4733bef593faaa3a4 (patch) | |
tree | c60dbf743e7ced76cb7b33d16526786d44d4697f /fs | |
parent | 8658452e4a588da603f6cb5ee2615deafcd82b71 (diff) |
nfsd4: READ, READDIR, etc., are idempotent
OP_MODIFIES_SOMETHING flags operations that we should be careful not to
initiate without being sure we have the buffer space to encode a reply.
None of these ops fall into that category.
We could probably remove a few more, but this isn't a very important
problem at least for ops whose reply size is easy to estimate.
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/nfsd/nfs4proc.c | 11 |
1 files changed, 3 insertions, 8 deletions
diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c index ac837783b37d..2c1ee70b730f 100644 --- a/fs/nfsd/nfs4proc.c +++ b/fs/nfsd/nfs4proc.c | |||
@@ -1665,37 +1665,32 @@ static struct nfsd4_operation nfsd4_ops[] = { | |||
1665 | [OP_PUTFH] = { | 1665 | [OP_PUTFH] = { |
1666 | .op_func = (nfsd4op_func)nfsd4_putfh, | 1666 | .op_func = (nfsd4op_func)nfsd4_putfh, |
1667 | .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS | 1667 | .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS |
1668 | | OP_IS_PUTFH_LIKE | OP_MODIFIES_SOMETHING | 1668 | | OP_IS_PUTFH_LIKE | OP_CLEAR_STATEID, |
1669 | | OP_CLEAR_STATEID, | ||
1670 | .op_name = "OP_PUTFH", | 1669 | .op_name = "OP_PUTFH", |
1671 | .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, | 1670 | .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, |
1672 | }, | 1671 | }, |
1673 | [OP_PUTPUBFH] = { | 1672 | [OP_PUTPUBFH] = { |
1674 | .op_func = (nfsd4op_func)nfsd4_putrootfh, | 1673 | .op_func = (nfsd4op_func)nfsd4_putrootfh, |
1675 | .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS | 1674 | .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS |
1676 | | OP_IS_PUTFH_LIKE | OP_MODIFIES_SOMETHING | 1675 | | OP_IS_PUTFH_LIKE | OP_CLEAR_STATEID, |
1677 | | OP_CLEAR_STATEID, | ||
1678 | .op_name = "OP_PUTPUBFH", | 1676 | .op_name = "OP_PUTPUBFH", |
1679 | .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, | 1677 | .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, |
1680 | }, | 1678 | }, |
1681 | [OP_PUTROOTFH] = { | 1679 | [OP_PUTROOTFH] = { |
1682 | .op_func = (nfsd4op_func)nfsd4_putrootfh, | 1680 | .op_func = (nfsd4op_func)nfsd4_putrootfh, |
1683 | .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS | 1681 | .op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS |
1684 | | OP_IS_PUTFH_LIKE | OP_MODIFIES_SOMETHING | 1682 | | OP_IS_PUTFH_LIKE | OP_CLEAR_STATEID, |
1685 | | OP_CLEAR_STATEID, | ||
1686 | .op_name = "OP_PUTROOTFH", | 1683 | .op_name = "OP_PUTROOTFH", |
1687 | .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, | 1684 | .op_rsize_bop = (nfsd4op_rsize)nfsd4_only_status_rsize, |
1688 | }, | 1685 | }, |
1689 | [OP_READ] = { | 1686 | [OP_READ] = { |
1690 | .op_func = (nfsd4op_func)nfsd4_read, | 1687 | .op_func = (nfsd4op_func)nfsd4_read, |
1691 | .op_flags = OP_MODIFIES_SOMETHING, | ||
1692 | .op_name = "OP_READ", | 1688 | .op_name = "OP_READ", |
1693 | .op_rsize_bop = (nfsd4op_rsize)nfsd4_read_rsize, | 1689 | .op_rsize_bop = (nfsd4op_rsize)nfsd4_read_rsize, |
1694 | .op_get_currentstateid = (stateid_getter)nfsd4_get_readstateid, | 1690 | .op_get_currentstateid = (stateid_getter)nfsd4_get_readstateid, |
1695 | }, | 1691 | }, |
1696 | [OP_READDIR] = { | 1692 | [OP_READDIR] = { |
1697 | .op_func = (nfsd4op_func)nfsd4_readdir, | 1693 | .op_func = (nfsd4op_func)nfsd4_readdir, |
1698 | .op_flags = OP_MODIFIES_SOMETHING, | ||
1699 | .op_name = "OP_READDIR", | 1694 | .op_name = "OP_READDIR", |
1700 | .op_rsize_bop = (nfsd4op_rsize)nfsd4_readdir_rsize, | 1695 | .op_rsize_bop = (nfsd4op_rsize)nfsd4_readdir_rsize, |
1701 | }, | 1696 | }, |