|
@@ -116,7 +116,7 @@ static int nfs4_map_errors(int err)
|
|
|
/*
|
|
/*
|
|
|
* This is our standard bitmap for GETATTR requests.
|
|
* This is our standard bitmap for GETATTR requests.
|
|
|
*/
|
|
*/
|
|
|
-const u32 nfs4_fattr_bitmap[2] = {
|
|
|
|
|
|
|
+const u32 nfs4_fattr_bitmap[3] = {
|
|
|
FATTR4_WORD0_TYPE
|
|
FATTR4_WORD0_TYPE
|
|
|
| FATTR4_WORD0_CHANGE
|
|
| FATTR4_WORD0_CHANGE
|
|
|
| FATTR4_WORD0_SIZE
|
|
| FATTR4_WORD0_SIZE
|
|
@@ -133,6 +133,24 @@ const u32 nfs4_fattr_bitmap[2] = {
|
|
|
| FATTR4_WORD1_TIME_MODIFY
|
|
| FATTR4_WORD1_TIME_MODIFY
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
+static const u32 nfs4_pnfs_open_bitmap[3] = {
|
|
|
|
|
+ FATTR4_WORD0_TYPE
|
|
|
|
|
+ | FATTR4_WORD0_CHANGE
|
|
|
|
|
+ | FATTR4_WORD0_SIZE
|
|
|
|
|
+ | FATTR4_WORD0_FSID
|
|
|
|
|
+ | FATTR4_WORD0_FILEID,
|
|
|
|
|
+ FATTR4_WORD1_MODE
|
|
|
|
|
+ | FATTR4_WORD1_NUMLINKS
|
|
|
|
|
+ | FATTR4_WORD1_OWNER
|
|
|
|
|
+ | FATTR4_WORD1_OWNER_GROUP
|
|
|
|
|
+ | FATTR4_WORD1_RAWDEV
|
|
|
|
|
+ | FATTR4_WORD1_SPACE_USED
|
|
|
|
|
+ | FATTR4_WORD1_TIME_ACCESS
|
|
|
|
|
+ | FATTR4_WORD1_TIME_METADATA
|
|
|
|
|
+ | FATTR4_WORD1_TIME_MODIFY,
|
|
|
|
|
+ FATTR4_WORD2_MDSTHRESHOLD
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
const u32 nfs4_statfs_bitmap[2] = {
|
|
const u32 nfs4_statfs_bitmap[2] = {
|
|
|
FATTR4_WORD0_FILES_AVAIL
|
|
FATTR4_WORD0_FILES_AVAIL
|
|
|
| FATTR4_WORD0_FILES_FREE
|
|
| FATTR4_WORD0_FILES_FREE
|
|
@@ -844,6 +862,7 @@ static struct nfs4_opendata *nfs4_opendata_alloc(struct dentry *dentry,
|
|
|
p->o_arg.name = &dentry->d_name;
|
|
p->o_arg.name = &dentry->d_name;
|
|
|
p->o_arg.server = server;
|
|
p->o_arg.server = server;
|
|
|
p->o_arg.bitmask = server->attr_bitmask;
|
|
p->o_arg.bitmask = server->attr_bitmask;
|
|
|
|
|
+ p->o_arg.open_bitmap = &nfs4_fattr_bitmap[0];
|
|
|
p->o_arg.claim = NFS4_OPEN_CLAIM_NULL;
|
|
p->o_arg.claim = NFS4_OPEN_CLAIM_NULL;
|
|
|
if (attrs != NULL && attrs->ia_valid != 0) {
|
|
if (attrs != NULL && attrs->ia_valid != 0) {
|
|
|
__be32 verf[2];
|
|
__be32 verf[2];
|
|
@@ -1820,6 +1839,7 @@ static int _nfs4_do_open(struct inode *dir,
|
|
|
opendata->f_attr.mdsthreshold = pnfs_mdsthreshold_alloc();
|
|
opendata->f_attr.mdsthreshold = pnfs_mdsthreshold_alloc();
|
|
|
if (!opendata->f_attr.mdsthreshold)
|
|
if (!opendata->f_attr.mdsthreshold)
|
|
|
goto err_opendata_put;
|
|
goto err_opendata_put;
|
|
|
|
|
+ opendata->o_arg.open_bitmap = &nfs4_pnfs_open_bitmap[0];
|
|
|
}
|
|
}
|
|
|
if (dentry->d_inode != NULL)
|
|
if (dentry->d_inode != NULL)
|
|
|
opendata->state = nfs4_get_open_state(dentry->d_inode, sp);
|
|
opendata->state = nfs4_get_open_state(dentry->d_inode, sp);
|