From c11e5ebce2701fc25b436c5038719d4d2c1e7a02 Mon Sep 17 00:00:00 2001 From: Olga Kornievskaia Date: Thu, 10 Mar 2011 11:31:57 -0500 Subject: [PATCH] query for aclsupport per superblock --- daemon/nfs41.h | 1 + daemon/nfs41_superblock.c | 8 +++++--- daemon/nfs41_types.h | 1 + daemon/nfs41_xdr.c | 4 ++++ 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/daemon/nfs41.h b/daemon/nfs41.h index cd2bf77..aa81ff9 100644 --- a/daemon/nfs41.h +++ b/daemon/nfs41.h @@ -41,6 +41,7 @@ typedef struct __nfs41_superblock { uint64_t maxwrite; uint32_t layout_types; bool_t cansettime; + uint32_t aclsupport; struct list_entry entry; /* position in nfs41_server.superblocks */ SRWLOCK lock; diff --git a/daemon/nfs41_superblock.c b/daemon/nfs41_superblock.c index 6389294..80fdcfe 100644 --- a/daemon/nfs41_superblock.c +++ b/daemon/nfs41_superblock.c @@ -83,7 +83,7 @@ static int get_superblock_attrs( attr_request.arr[0] = FATTR4_WORD0_SUPPORTED_ATTRS | FATTR4_WORD0_CANSETTIME | FATTR4_WORD0_MAXREAD | - (uint32_t)(FATTR4_WORD0_MAXWRITE); + (uint32_t)(FATTR4_WORD0_MAXWRITE) | FATTR4_WORD0_ACLSUPPORT; attr_request.arr[1] = FATTR4_WORD1_FS_LAYOUT_TYPE | FATTR4_WORD1_TIME_DELTA; attr_request.count = 2; @@ -122,13 +122,15 @@ static int get_superblock_attrs( if (!bitmap_isset(&info.attrmask, 1, FATTR4_WORD1_TIME_DELTA)) superblock->time_delta.seconds = 1; + superblock->aclsupport = info.aclsupport; dprintf(SBLVL, "attributes for fsid(%llu,%llu): " "maxread=%llu, maxwrite=%llu, layout_types: 0x%X, " - "cansettime=%u, time_delta={%ll,%u}\n", + "cansettime=%u, time_delta={%llu,%u}, aclsupport=%d\n", superblock->fsid.major, superblock->fsid.minor, superblock->maxread, superblock->maxwrite, superblock->layout_types, superblock->cansettime, - superblock->time_delta.seconds, superblock->time_delta.nseconds); + superblock->time_delta.seconds, superblock->time_delta.nseconds, + superblock->aclsupport); out: return status; } diff --git a/daemon/nfs41_types.h b/daemon/nfs41_types.h index 1cfd9a8..e4bd7e5 100644 --- a/daemon/nfs41_types.h +++ b/daemon/nfs41_types.h @@ -216,6 +216,7 @@ typedef struct __nfs41_file_info { uint32_t owner_len; unsigned char owner_group[NFS4_OPAQUE_LIMIT]; uint32_t owner_group_len; + uint32_t aclsupport; } nfs41_file_info; #endif /* !__NFS41_DAEMON_TYPES_H__ */ diff --git a/daemon/nfs41_xdr.c b/daemon/nfs41_xdr.c index 378fadd..e0b4320 100644 --- a/daemon/nfs41_xdr.c +++ b/daemon/nfs41_xdr.c @@ -1627,6 +1627,10 @@ static bool_t decode_file_attrs( if (!xdr_u_int32_t(xdr, &info->rdattr_error)) return FALSE; } + if (attrs->attrmask.arr[0] & FATTR4_WORD0_ACLSUPPORT) { + if (!xdr_u_int32_t(xdr, &info->aclsupport)) + return FALSE; + } if (attrs->attrmask.arr[0] & FATTR4_WORD0_CANSETTIME) { if (!xdr_bool(xdr, &info->cansettime)) return FALSE;