nfs: get clone_blksize when probing fsinfo
NFSv42 CLONE operation is supposed to respect it. Signed-off-by: Peng Tao <tao.peng@primarydata.com> Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
This commit is contained in:
parent
bea51b30b2
commit
2a92ee92d4
|
@ -764,6 +764,7 @@ static void nfs_server_set_fsinfo(struct nfs_server *server,
|
||||||
|
|
||||||
server->time_delta = fsinfo->time_delta;
|
server->time_delta = fsinfo->time_delta;
|
||||||
|
|
||||||
|
server->clone_blksize = fsinfo->clone_blksize;
|
||||||
/* We're airborne Set socket buffersize */
|
/* We're airborne Set socket buffersize */
|
||||||
rpc_setbufsize(server->client, server->wsize + 100, server->rsize + 100);
|
rpc_setbufsize(server->client, server->wsize + 100, server->rsize + 100);
|
||||||
}
|
}
|
||||||
|
|
|
@ -239,6 +239,7 @@ const u32 nfs4_fsinfo_bitmap[3] = { FATTR4_WORD0_MAXFILESIZE
|
||||||
FATTR4_WORD1_TIME_DELTA
|
FATTR4_WORD1_TIME_DELTA
|
||||||
| FATTR4_WORD1_FS_LAYOUT_TYPES,
|
| FATTR4_WORD1_FS_LAYOUT_TYPES,
|
||||||
FATTR4_WORD2_LAYOUT_BLKSIZE
|
FATTR4_WORD2_LAYOUT_BLKSIZE
|
||||||
|
| FATTR4_WORD2_CLONE_BLKSIZE
|
||||||
};
|
};
|
||||||
|
|
||||||
const u32 nfs4_fs_locations_bitmap[3] = {
|
const u32 nfs4_fs_locations_bitmap[3] = {
|
||||||
|
|
|
@ -4764,6 +4764,28 @@ static int decode_attr_layout_blksize(struct xdr_stream *xdr, uint32_t *bitmap,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The granularity of a CLONE operation.
|
||||||
|
*/
|
||||||
|
static int decode_attr_clone_blksize(struct xdr_stream *xdr, uint32_t *bitmap,
|
||||||
|
uint32_t *res)
|
||||||
|
{
|
||||||
|
__be32 *p;
|
||||||
|
|
||||||
|
dprintk("%s: bitmap is %x\n", __func__, bitmap[2]);
|
||||||
|
*res = 0;
|
||||||
|
if (bitmap[2] & FATTR4_WORD2_CLONE_BLKSIZE) {
|
||||||
|
p = xdr_inline_decode(xdr, 4);
|
||||||
|
if (unlikely(!p)) {
|
||||||
|
print_overflow_msg(__func__, xdr);
|
||||||
|
return -EIO;
|
||||||
|
}
|
||||||
|
*res = be32_to_cpup(p);
|
||||||
|
bitmap[2] &= ~FATTR4_WORD2_CLONE_BLKSIZE;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int decode_fsinfo(struct xdr_stream *xdr, struct nfs_fsinfo *fsinfo)
|
static int decode_fsinfo(struct xdr_stream *xdr, struct nfs_fsinfo *fsinfo)
|
||||||
{
|
{
|
||||||
unsigned int savep;
|
unsigned int savep;
|
||||||
|
@ -4796,6 +4818,9 @@ static int decode_fsinfo(struct xdr_stream *xdr, struct nfs_fsinfo *fsinfo)
|
||||||
if (status != 0)
|
if (status != 0)
|
||||||
goto xdr_error;
|
goto xdr_error;
|
||||||
status = decode_attr_layout_blksize(xdr, bitmap, &fsinfo->blksize);
|
status = decode_attr_layout_blksize(xdr, bitmap, &fsinfo->blksize);
|
||||||
|
if (status)
|
||||||
|
goto xdr_error;
|
||||||
|
status = decode_attr_clone_blksize(xdr, bitmap, &fsinfo->clone_blksize);
|
||||||
if (status)
|
if (status)
|
||||||
goto xdr_error;
|
goto xdr_error;
|
||||||
|
|
||||||
|
|
|
@ -422,6 +422,7 @@ enum lock_type4 {
|
||||||
#define FATTR4_WORD2_LAYOUT_TYPES (1UL << 0)
|
#define FATTR4_WORD2_LAYOUT_TYPES (1UL << 0)
|
||||||
#define FATTR4_WORD2_LAYOUT_BLKSIZE (1UL << 1)
|
#define FATTR4_WORD2_LAYOUT_BLKSIZE (1UL << 1)
|
||||||
#define FATTR4_WORD2_MDSTHRESHOLD (1UL << 4)
|
#define FATTR4_WORD2_MDSTHRESHOLD (1UL << 4)
|
||||||
|
#define FATTR4_WORD2_CLONE_BLKSIZE (1UL << 13)
|
||||||
#define FATTR4_WORD2_SECURITY_LABEL (1UL << 16)
|
#define FATTR4_WORD2_SECURITY_LABEL (1UL << 16)
|
||||||
|
|
||||||
/* MDS threshold bitmap bits */
|
/* MDS threshold bitmap bits */
|
||||||
|
|
|
@ -147,6 +147,7 @@ struct nfs_server {
|
||||||
unsigned int acdirmax;
|
unsigned int acdirmax;
|
||||||
unsigned int namelen;
|
unsigned int namelen;
|
||||||
unsigned int options; /* extra options enabled by mount */
|
unsigned int options; /* extra options enabled by mount */
|
||||||
|
unsigned int clone_blksize; /* granularity of a CLONE operation */
|
||||||
#define NFS_OPTION_FSCACHE 0x00000001 /* - local caching enabled */
|
#define NFS_OPTION_FSCACHE 0x00000001 /* - local caching enabled */
|
||||||
#define NFS_OPTION_MIGRATION 0x00000002 /* - NFSv4 migration enabled */
|
#define NFS_OPTION_MIGRATION 0x00000002 /* - NFSv4 migration enabled */
|
||||||
|
|
||||||
|
|
|
@ -141,6 +141,7 @@ struct nfs_fsinfo {
|
||||||
__u32 lease_time; /* in seconds */
|
__u32 lease_time; /* in seconds */
|
||||||
__u32 layouttype; /* supported pnfs layout driver */
|
__u32 layouttype; /* supported pnfs layout driver */
|
||||||
__u32 blksize; /* preferred pnfs io block size */
|
__u32 blksize; /* preferred pnfs io block size */
|
||||||
|
__u32 clone_blksize; /* granularity of a CLONE operation */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct nfs_fsstat {
|
struct nfs_fsstat {
|
||||||
|
|
Loading…
Reference in New Issue