|
55 | 55 | #include "netns.h"
|
56 | 56 | #include "pnfs.h"
|
57 | 57 | #include "filecache.h"
|
| 58 | +#include "nfs4xdr_gen.h" |
58 | 59 |
|
59 | 60 | #include "trace.h"
|
60 | 61 |
|
@@ -3388,6 +3389,54 @@ static __be32 nfsd4_encode_fattr4_xattr_support(struct xdr_stream *xdr,
|
3388 | 3389 | return nfsd4_encode_bool(xdr, err == 0);
|
3389 | 3390 | }
|
3390 | 3391 |
|
| 3392 | +#define NFSD_OA_SHARE_ACCESS (BIT(OPEN_ARGS_SHARE_ACCESS_READ) | \ |
| 3393 | + BIT(OPEN_ARGS_SHARE_ACCESS_WRITE) | \ |
| 3394 | + BIT(OPEN_ARGS_SHARE_ACCESS_BOTH)) |
| 3395 | + |
| 3396 | +#define NFSD_OA_SHARE_DENY (BIT(OPEN_ARGS_SHARE_DENY_NONE) | \ |
| 3397 | + BIT(OPEN_ARGS_SHARE_DENY_READ) | \ |
| 3398 | + BIT(OPEN_ARGS_SHARE_DENY_WRITE) | \ |
| 3399 | + BIT(OPEN_ARGS_SHARE_DENY_BOTH)) |
| 3400 | + |
| 3401 | +#define NFSD_OA_SHARE_ACCESS_WANT (BIT(OPEN_ARGS_SHARE_ACCESS_WANT_ANY_DELEG) | \ |
| 3402 | + BIT(OPEN_ARGS_SHARE_ACCESS_WANT_NO_DELEG) | \ |
| 3403 | + BIT(OPEN_ARGS_SHARE_ACCESS_WANT_CANCEL)) |
| 3404 | + |
| 3405 | +#define NFSD_OA_OPEN_CLAIM (BIT(OPEN_ARGS_OPEN_CLAIM_NULL) | \ |
| 3406 | + BIT(OPEN_ARGS_OPEN_CLAIM_PREVIOUS) | \ |
| 3407 | + BIT(OPEN_ARGS_OPEN_CLAIM_DELEGATE_CUR) | \ |
| 3408 | + BIT(OPEN_ARGS_OPEN_CLAIM_DELEGATE_PREV)| \ |
| 3409 | + BIT(OPEN_ARGS_OPEN_CLAIM_FH) | \ |
| 3410 | + BIT(OPEN_ARGS_OPEN_CLAIM_DELEG_CUR_FH) | \ |
| 3411 | + BIT(OPEN_ARGS_OPEN_CLAIM_DELEG_PREV_FH)) |
| 3412 | + |
| 3413 | +#define NFSD_OA_CREATE_MODE (BIT(OPEN_ARGS_CREATEMODE_UNCHECKED4) | \ |
| 3414 | + BIT(OPEN_ARGS_CREATE_MODE_GUARDED) | \ |
| 3415 | + BIT(OPEN_ARGS_CREATEMODE_EXCLUSIVE4) | \ |
| 3416 | + BIT(OPEN_ARGS_CREATE_MODE_EXCLUSIVE4_1)) |
| 3417 | + |
| 3418 | +static uint32_t oa_share_access = NFSD_OA_SHARE_ACCESS; |
| 3419 | +static uint32_t oa_share_deny = NFSD_OA_SHARE_DENY; |
| 3420 | +static uint32_t oa_share_access_want = NFSD_OA_SHARE_ACCESS_WANT; |
| 3421 | +static uint32_t oa_open_claim = NFSD_OA_OPEN_CLAIM; |
| 3422 | +static uint32_t oa_create_mode = NFSD_OA_CREATE_MODE; |
| 3423 | + |
| 3424 | +static const struct open_arguments4 nfsd_open_arguments = { |
| 3425 | + .oa_share_access = { .count = 1, .element = &oa_share_access }, |
| 3426 | + .oa_share_deny = { .count = 1, .element = &oa_share_deny }, |
| 3427 | + .oa_share_access_want = { .count = 1, .element = &oa_share_access_want }, |
| 3428 | + .oa_open_claim = { .count = 1, .element = &oa_open_claim }, |
| 3429 | + .oa_create_mode = { .count = 1, .element = &oa_create_mode }, |
| 3430 | +}; |
| 3431 | + |
| 3432 | +static __be32 nfsd4_encode_fattr4_open_arguments(struct xdr_stream *xdr, |
| 3433 | + const struct nfsd4_fattr_args *args) |
| 3434 | +{ |
| 3435 | + if (!xdrgen_encode_fattr4_open_arguments(xdr, &nfsd_open_arguments)) |
| 3436 | + return nfserr_resource; |
| 3437 | + return nfs_ok; |
| 3438 | +} |
| 3439 | + |
3391 | 3440 | static const nfsd4_enc_attr nfsd4_enc_fattr4_encode_ops[] = {
|
3392 | 3441 | [FATTR4_SUPPORTED_ATTRS] = nfsd4_encode_fattr4_supported_attrs,
|
3393 | 3442 | [FATTR4_TYPE] = nfsd4_encode_fattr4_type,
|
@@ -3488,6 +3537,7 @@ static const nfsd4_enc_attr nfsd4_enc_fattr4_encode_ops[] = {
|
3488 | 3537 |
|
3489 | 3538 | [FATTR4_MODE_UMASK] = nfsd4_encode_fattr4__noop,
|
3490 | 3539 | [FATTR4_XATTR_SUPPORT] = nfsd4_encode_fattr4_xattr_support,
|
| 3540 | + [FATTR4_OPEN_ARGUMENTS] = nfsd4_encode_fattr4_open_arguments, |
3491 | 3541 | };
|
3492 | 3542 |
|
3493 | 3543 | /*
|
|
0 commit comments