NFS update
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@4814 42af7a65-404d-4744-a932-0658087f49c3
This commit is contained in:
parent
4f8e4d2308
commit
fdf06261b2
@ -120,7 +120,7 @@ struct nfsnode
|
||||
union
|
||||
{
|
||||
struct timespec nf_atim; /* Special file times */
|
||||
nfsuint64 nd_cookieverf; /* Cookie verifier (dir only) */
|
||||
uint8_t nd_cookieverf[NFSX_V3WRITEVERF]; /* Cookie verifier (dir only) */
|
||||
} n_un1;
|
||||
union
|
||||
{
|
||||
|
@ -584,19 +584,13 @@ struct READ3resok
|
||||
const char *data;
|
||||
};
|
||||
|
||||
enum stable_how
|
||||
{
|
||||
UNSTABLE = 0,
|
||||
DATA_SYNC = 1,
|
||||
FILE_SYNC = 2
|
||||
};
|
||||
|
||||
struct WRITE3args
|
||||
{
|
||||
nfstype file;
|
||||
uint64_t offset;
|
||||
uint32_t count;
|
||||
enum stable_how stable;
|
||||
uint32_t stable;
|
||||
const char *data;
|
||||
};
|
||||
|
||||
@ -604,8 +598,8 @@ struct WRITE3resok
|
||||
{
|
||||
struct wcc_data file_wcc;
|
||||
uint32_t count;
|
||||
enum stable_how committed;
|
||||
unsigned char *verf;
|
||||
uint32_t committed;
|
||||
unsigned char verf[NFSX_V3WRITEVERF];
|
||||
};
|
||||
|
||||
struct REMOVE3args
|
||||
@ -658,7 +652,7 @@ struct READDIR3args
|
||||
{
|
||||
struct file_handle dir;
|
||||
nfsuint64 cookie;
|
||||
nfsuint64 cookieverf;
|
||||
unsigned char cookieverf[NFSX_V3COOKIEVERF];
|
||||
uint32_t count;
|
||||
};
|
||||
|
||||
@ -667,19 +661,20 @@ struct entry3
|
||||
uint64_t fileid;
|
||||
unsigned char name;
|
||||
nfsuint64 cookie;
|
||||
struct entry3 *nextentry;
|
||||
#warning "This causes compilation errors"
|
||||
//struct entry3 nextentry;
|
||||
};
|
||||
|
||||
struct dirlist3
|
||||
{
|
||||
struct entry3 *entries;
|
||||
struct entry3 entries;
|
||||
bool eof;
|
||||
};
|
||||
|
||||
struct READDIR3resok
|
||||
{
|
||||
struct nfs_fattr dir_attributes;
|
||||
nfsuint64 cookieverf;
|
||||
unsigned char cookieverf[NFSX_V3COOKIEVERF];
|
||||
struct dirlist3 reply;
|
||||
};
|
||||
|
||||
@ -688,4 +683,4 @@ struct FS3args
|
||||
struct file_handle fsroot;
|
||||
};
|
||||
|
||||
#endif
|
||||
#endif /* __FS_NFS_NFS_PROTO_H */
|
||||
|
@ -240,9 +240,9 @@ again:
|
||||
|
||||
memset(&create, 0, sizeof(struct CREATE3args));
|
||||
memset(&resok, 0, sizeof(struct rpc_reply_create));
|
||||
create.how = sp;
|
||||
bcopy(&sp, &create.how, sizeof(struct nfsv3_sattr));
|
||||
create.where.dir.length = txdr_unsigned(np->n_fhsize);
|
||||
create.where.dir.handle = np->n_fhp;
|
||||
bcopy(&np->n_fhp, &create.where.dir.handle, sizeof(nfsfh_t));
|
||||
create.where.length = txdr_unsigned(64);
|
||||
strncpy(create.where.name, relpath, 64);
|
||||
|
||||
@ -401,7 +401,6 @@ static ssize_t nfs_read(FAR struct file *filep, char *buffer, size_t buflen)
|
||||
uint8_t *userbuffer = (uint8_t*)buffer;
|
||||
int error = 0;
|
||||
int len;
|
||||
bool eof;
|
||||
|
||||
fvdbg("Read %d bytes from offset %d\n", buflen, filep->f_pos);
|
||||
|
||||
@ -413,7 +412,6 @@ static ssize_t nfs_read(FAR struct file *filep, char *buffer, size_t buflen)
|
||||
|
||||
np = (struct nfsnode*) filep->f_priv;
|
||||
nmp = (struct nfsmount*) filep->f_inode->i_private;
|
||||
eof = false;
|
||||
offset = 0;
|
||||
|
||||
DEBUGASSERT(nmp != NULL);
|
||||
@ -465,6 +463,7 @@ static ssize_t nfs_read(FAR struct file *filep, char *buffer, size_t buflen)
|
||||
|
||||
again:
|
||||
memset(&read, 0, sizeof(struct READ3args));
|
||||
memset(&resok, 0, sizeof(struct rpc_reply_read));
|
||||
read.file = txdr_unsigned(np->nfsv3_type);
|
||||
read.count = txdr_unsigned(buflen);
|
||||
read.offset = txdr_unsigned(offset);
|
||||
@ -476,8 +475,7 @@ again:
|
||||
goto errout_with_semaphore;
|
||||
}
|
||||
|
||||
//eof = resok.eof;
|
||||
if (eof == true)
|
||||
if (resok.read.eof == true)
|
||||
{
|
||||
readsize = fxdr_unsigned(uint32_t, resok.read.count);
|
||||
np->n_fattr = resok.read.file_attributes;//
|
||||
@ -518,7 +516,7 @@ nfs_write(FAR struct file *filep, const char *buffer, size_t buflen)
|
||||
int error = 0;
|
||||
uint64_t offset;
|
||||
int len;
|
||||
enum stable_how commit;
|
||||
int commit = 0;
|
||||
int committed = NFSV3WRITE_FILESYNC;
|
||||
|
||||
/* Sanity checks */
|
||||
@ -562,9 +560,10 @@ nfs_write(FAR struct file *filep, const char *buffer, size_t buflen)
|
||||
|
||||
nfsstats.rpccnt[NFSPROC_WRITE]++;
|
||||
memset(&write, 0, sizeof(struct WRITE3args));
|
||||
write.file = txdr_unsigned(np->nfsv3_type);
|
||||
memset(&resok, 0, sizeof(struct rpc_reply_write));
|
||||
write.file = txdr_unsigned(np->nfsv3_type);
|
||||
write.offset = txdr_unsigned(offset);
|
||||
write.count = txdr_unsigned(buflen);
|
||||
write.count = txdr_unsigned(buflen);
|
||||
write.stable = txdr_unsigned(committed);
|
||||
memcpy((void *)write.data, userbuffer, buflen);
|
||||
|
||||
@ -575,15 +574,15 @@ nfs_write(FAR struct file *filep, const char *buffer, size_t buflen)
|
||||
goto errout_with_semaphore;
|
||||
}
|
||||
|
||||
//writesize = resok.count;
|
||||
writesize = resok.write.count;
|
||||
if (writesize == 0)
|
||||
{
|
||||
error = NFSERR_IO;
|
||||
goto errout_with_semaphore;
|
||||
}
|
||||
|
||||
//commit = resok.committed;
|
||||
np->n_fattr = resok.write.file_wcc.after;
|
||||
commit = resok.write.committed;
|
||||
bcopy(&resok.write.file_wcc.after, &np->n_fattr, sizeof(struct nfs_fattr));
|
||||
|
||||
/* Return the lowest committment level obtained by any of the RPCs. */
|
||||
|
||||
@ -720,22 +719,20 @@ int nfs_readdirrpc(struct nfsmount *nmp, struct nfsnode *np,
|
||||
nfsstats.rpccnt[NFSPROC_READDIR]++;
|
||||
memset(&readdir, 0, sizeof(struct READDIR3args));
|
||||
readdir.dir.length = txdr_unsigned(np->n_fhsize);
|
||||
readdir.dir.handle = np->n_fhp;
|
||||
bcopy(&np->n_fhp, &readdir.dir.handle, sizeof(nfsfh_t));
|
||||
readdir.count = nmp->nm_readdirsize;
|
||||
|
||||
if (nfsstats.rpccnt[NFSPROC_READDIR] == 1)
|
||||
{
|
||||
readdir.cookie.nfsuquad[0] = 0;
|
||||
readdir.cookie.nfsuquad[1] = 0;
|
||||
readdir.cookieverf.nfsuquad[0] = 0;
|
||||
readdir.cookieverf.nfsuquad[1] = 0;
|
||||
memset(&readdir.cookieverf, 0, NFSX_V3COOKIEVERF);
|
||||
}
|
||||
else
|
||||
{
|
||||
readdir.cookie.nfsuquad[0] = dir->u.nfs.cookie[0];
|
||||
readdir.cookie.nfsuquad[1] = dir->u.nfs.cookie[1];
|
||||
readdir.cookieverf.nfsuquad[0] = np->n_cookieverf.nfsuquad[0];
|
||||
readdir.cookieverf.nfsuquad[1] = np->n_cookieverf.nfsuquad[1];
|
||||
bcopy(&np->n_cookieverf, readdir.cookieverf, NFSX_V3COOKIEVERF);
|
||||
}
|
||||
|
||||
error = nfs_request(nmp, NFSPROC_READDIR, (FAR const void *)&readdir,
|
||||
@ -745,19 +742,17 @@ int nfs_readdirrpc(struct nfsmount *nmp, struct nfsnode *np,
|
||||
goto nfsmout;
|
||||
}
|
||||
|
||||
#if 0
|
||||
/* Save the node attributes and cooking information */
|
||||
|
||||
np->n_fattr = resok.readdir.dir_attributes;
|
||||
np->n_cookieverf.nfsuquad[0] = resok.readdir.cookieverf.nfsuquad[0];
|
||||
np->n_cookieverf.nfsuquad[1] = resok.readdir.cookieverf.nfsuquad[1];
|
||||
bcopy(&resok.readdir.dir_attributes, &np->n_fattr, sizeof(struct nfs_fattr));
|
||||
bcopy(&resok.readdir.cookieverf, np->n_cookieverf, NFSX_V3WRITEVERF);
|
||||
|
||||
dir->u.nfs.cookie[0] = resok.readdir.reply.entries->cookie.nfsuquad[0];
|
||||
dir->u.nfs.cookie[1] = resok.readdir.reply.entries->cookie.nfsuquad[1];
|
||||
dir->u.nfs.cookie[0] = resok.readdir.reply.entries.cookie.nfsuquad[0];
|
||||
dir->u.nfs.cookie[1] = resok.readdir.reply.entries.cookie.nfsuquad[1];
|
||||
|
||||
/* Return the Type of the node to the caller */
|
||||
|
||||
dir->fd_dir.d_type = resok.readdir.reply.entries->fileid;
|
||||
#if 0
|
||||
dir->fd_dir.d_type = resok.readdir.reply.entries.fileid;
|
||||
#warning "This must match the type values in dirent.h"
|
||||
|
||||
/* Return the name of the node to the caller */
|
||||
@ -1226,9 +1221,9 @@ int mountnfs(struct nfs_args *argp, void **handle)
|
||||
np->n_flag |= NMODIFIED;
|
||||
nmp->nm_head = np;
|
||||
nmp->nm_mounted = true;
|
||||
nmp->nm_fh = nmp->nm_rpcclnt->rc_fh;
|
||||
bcopy(&nmp->nm_rpcclnt->rc_fh, &nmp->nm_fh, sizeof(nfsfh_t));
|
||||
nmp->nm_fhsize = NFSX_V2FH;
|
||||
nmp->nm_head->n_fhp = nmp->nm_fh;
|
||||
bcopy(&nmp->nm_fh, &nmp->nm_head->n_fhp, sizeof(nfsfh_t));
|
||||
nmp->nm_head->n_fhsize = nmp->nm_fhsize;
|
||||
nmp->nm_so = nmp->nm_rpcclnt->rc_so;
|
||||
|
||||
@ -1237,7 +1232,7 @@ int mountnfs(struct nfs_args *argp, void **handle)
|
||||
memset(&getattr, 0, sizeof(struct FS3args));
|
||||
memset(&resok, 0, sizeof(struct rpc_reply_getattr));
|
||||
getattr.fsroot.length = txdr_unsigned(nmp->nm_fhsize);
|
||||
getattr.fsroot.handle = nmp->nm_fh;
|
||||
bcopy(&nmp->nm_fh, &getattr.fsroot.handle, sizeof(nfsfh_t));
|
||||
|
||||
error = nfs_request(nmp, NFSPROC_GETATTR, (FAR const void *)&getattr,
|
||||
(FAR void*)&resok, sizeof(struct rpc_reply_getattr));
|
||||
@ -1437,18 +1432,18 @@ static int nfs_statfs(struct inode *mountpt, struct statfs *sbp)
|
||||
}
|
||||
|
||||
nmp->nm_head->n_fattr = sfp.fsstat.obj_attributes;
|
||||
sbp->f_bsize = NFS_FABLKSIZE;
|
||||
tquad = fxdr_hyper(&sfp.fsstat.sf_tbytes);
|
||||
sbp->f_blocks = tquad / (uint64_t) NFS_FABLKSIZE;
|
||||
tquad = fxdr_hyper(&sfp.fsstat.sf_fbytes);
|
||||
sbp->f_bfree = tquad / (uint64_t) NFS_FABLKSIZE;
|
||||
tquad = fxdr_hyper(&sfp.fsstat.sf_abytes);
|
||||
sbp->f_bavail = tquad / (uint64_t) NFS_FABLKSIZE;
|
||||
tquad = fxdr_hyper(&sfp.fsstat.sf_tfiles);
|
||||
sbp->f_files = tquad;
|
||||
tquad = fxdr_hyper(&sfp.fsstat.sf_ffiles);
|
||||
sbp->f_ffree = tquad;
|
||||
sbp->f_namelen = NAME_MAX;
|
||||
sbp->f_bsize = NFS_FABLKSIZE;
|
||||
tquad = fxdr_hyper(&sfp.fsstat.sf_tbytes);
|
||||
sbp->f_blocks = tquad / (uint64_t) NFS_FABLKSIZE;
|
||||
tquad = fxdr_hyper(&sfp.fsstat.sf_fbytes);
|
||||
sbp->f_bfree = tquad / (uint64_t) NFS_FABLKSIZE;
|
||||
tquad = fxdr_hyper(&sfp.fsstat.sf_abytes);
|
||||
sbp->f_bavail = tquad / (uint64_t) NFS_FABLKSIZE;
|
||||
tquad = fxdr_hyper(&sfp.fsstat.sf_tfiles);
|
||||
sbp->f_files = tquad;
|
||||
tquad = fxdr_hyper(&sfp.fsstat.sf_ffiles);
|
||||
sbp->f_ffree = tquad;
|
||||
sbp->f_namelen = NAME_MAX;
|
||||
|
||||
errout_with_semaphore:
|
||||
nfs_semgive(nmp);
|
||||
@ -1508,7 +1503,7 @@ static int nfs_remove(struct inode *mountpt, const char *relpath)
|
||||
memset(&remove, 0, sizeof(struct REMOVE3args));
|
||||
memset(&resok, 0, sizeof(struct rpc_reply_remove));
|
||||
remove.object.dir.length = txdr_unsigned(np->n_fhsize);
|
||||
remove.object.dir.handle = np->n_fhp;
|
||||
bcopy(&np->n_fhp, &remove.object.dir.handle, sizeof(nfsfh_t));
|
||||
remove.object.length = txdr_unsigned(64);
|
||||
strncpy(remove.object.name, relpath, 64);
|
||||
|
||||
@ -1531,7 +1526,7 @@ static int nfs_remove(struct inode *mountpt, const char *relpath)
|
||||
goto errout_with_semaphore;
|
||||
}
|
||||
|
||||
//np->n_fattr = resok.dir_wcc.after;
|
||||
bcopy(&resok.remove.dir_wcc.after, &np->n_fattr, sizeof(struct nfs_fattr));
|
||||
np->n_flag |= NMODIFIED;
|
||||
}
|
||||
|
||||
@ -1584,14 +1579,14 @@ static int nfs_mkdir(struct inode *mountpt, const char *relpath, mode_t mode)
|
||||
memset(&mkir, 0, sizeof(struct MKDIR3args));
|
||||
memset(&resok, 0, sizeof(struct rpc_reply_mkdir));
|
||||
mkir.where.dir.length = txdr_unsigned(np->n_fhsize);
|
||||
mkir.where.dir.handle = np->n_fhp;
|
||||
bcopy(&np->n_fhp, &mkir.where.dir.handle, sizeof(nfsfh_t));
|
||||
mkir.where.length = txdr_unsigned(64);
|
||||
strncpy(mkir.where.name, relpath, 64);
|
||||
|
||||
sp.sa_modetrue = nfs_true;
|
||||
sp.sa_mode = txdr_unsigned(mode);
|
||||
sp.sa_uidfalse = 0;
|
||||
sp.sa_gidfalse = 0;
|
||||
sp.sa_modetrue = nfs_true;
|
||||
sp.sa_mode = txdr_unsigned(mode);
|
||||
sp.sa_uidfalse = 0;
|
||||
sp.sa_gidfalse = 0;
|
||||
sp.sa_sizefalse = 0;
|
||||
sp.sa_atimetype = txdr_unsigned(NFSV3SATTRTIME_DONTCHANGE);
|
||||
sp.sa_mtimetype = txdr_unsigned(NFSV3SATTRTIME_DONTCHANGE);
|
||||
@ -1599,7 +1594,7 @@ static int nfs_mkdir(struct inode *mountpt, const char *relpath, mode_t mode)
|
||||
//memset(&sp.sa_atime, 0, sizeof(nfstime3));
|
||||
//memset(&sp.sa_mtime, 0, sizeof(nfstime3));
|
||||
|
||||
mkir.attributes = sp;
|
||||
bcopy(&sp, &mkir.attributes, sizeof(struct nfsv3_sattr));
|
||||
|
||||
error = nfs_request(nmp, NFSPROC_MKDIR, (FAR const void *)&mkir,
|
||||
(FAR void *)&resok, sizeof(struct rpc_reply_mkdir));
|
||||
@ -1609,12 +1604,12 @@ static int nfs_mkdir(struct inode *mountpt, const char *relpath, mode_t mode)
|
||||
}
|
||||
|
||||
np->n_open = true;
|
||||
/* np->nfsv3_type = fxdr_unsigned(uint32_t, resok.obj_attributes.fa_type);
|
||||
np->n_fhp = resok.fshandle.handle;
|
||||
np->n_size = fxdr_hyper(&resok.obj_attributes.fa3_size);
|
||||
np->n_fattr = resok.obj_attributes;
|
||||
fxdr_nfsv3time(&resok.obj_attributes.fa3_mtime, &np->n_mtime)
|
||||
np->n_ctime = fxdr_hyper(&resok.obj_attributes.fa3_ctime);*/
|
||||
np->nfsv3_type = fxdr_unsigned(uint32_t, resok.mkdir.obj_attributes.fa_type);
|
||||
bcopy(&resok.mkdir.fshandle.handle, &np->n_fhp, sizeof(nfsfh_t));
|
||||
np->n_size = fxdr_hyper(&resok.mkdir.obj_attributes.fa3_size);
|
||||
bcopy(&resok.mkdir.obj_attributes, &np->n_fattr, sizeof(struct nfs_fattr));
|
||||
fxdr_nfsv3time(&resok.mkdir.obj_attributes.fa3_mtime, &np->n_mtime)
|
||||
np->n_ctime = fxdr_hyper(&resok.mkdir.obj_attributes.fa3_ctime);
|
||||
np->n_flag |= NMODIFIED;
|
||||
|
||||
NFS_INVALIDATE_ATTRCACHE(np);
|
||||
@ -1650,7 +1645,7 @@ static int nfs_rmdir(struct inode *mountpt, const char *relpath)
|
||||
/* Get the mountpoint private data from the inode structure */
|
||||
|
||||
nmp = (struct nfsmount *)mountpt->i_private;
|
||||
np = nmp->nm_head;
|
||||
np = nmp->nm_head;
|
||||
|
||||
/* Check if the mount is still healthy */
|
||||
|
||||
@ -1672,7 +1667,7 @@ static int nfs_rmdir(struct inode *mountpt, const char *relpath)
|
||||
memset(&rmdir, 0, sizeof(struct RMDIR3args));
|
||||
memset(&resok, 0, sizeof(struct rpc_reply_rmdir));
|
||||
rmdir.object.dir.length = txdr_unsigned(np->n_fhsize);
|
||||
rmdir.object.dir.handle = np->n_fhp;
|
||||
bcopy(&np->n_fhp, &rmdir.object.dir.handle, sizeof(nfsfh_t));
|
||||
rmdir.object.length = txdr_unsigned(64);
|
||||
strncpy(rmdir.object.name, relpath, 64);
|
||||
|
||||
@ -1688,7 +1683,7 @@ static int nfs_rmdir(struct inode *mountpt, const char *relpath)
|
||||
goto errout_with_semaphore;
|
||||
}
|
||||
|
||||
//np->n_fattr = resok.dir_wcc.after;
|
||||
bcopy(&resok.rmdir.dir_wcc.after, &np->n_fattr, sizeof(struct nfs_fattr));
|
||||
np->n_flag |= NMODIFIED;
|
||||
}
|
||||
|
||||
@ -1726,7 +1721,7 @@ static int nfs_rename(struct inode *mountpt, const char *oldrelpath,
|
||||
/* Get the mountpoint private data from the inode structure */
|
||||
|
||||
nmp = (struct nfsmount *)mountpt->i_private;
|
||||
np = nmp->nm_head;
|
||||
np = nmp->nm_head;
|
||||
|
||||
/* Check if the mount is still healthy */
|
||||
|
||||
@ -1748,11 +1743,11 @@ static int nfs_rename(struct inode *mountpt, const char *oldrelpath,
|
||||
memset(&rename, 0, sizeof(struct RENAME3args));
|
||||
memset(&resok, 0, sizeof(struct rpc_reply_rename));
|
||||
rename.from.dir.length = txdr_unsigned(np->n_fhsize);
|
||||
rename.from.dir.handle = np->n_fhp;
|
||||
bcopy(&np->n_fhp, &rename.from.dir.handle, sizeof(nfsfh_t));
|
||||
rename.from.length = txdr_unsigned(64);
|
||||
strncpy(rename.from.name, oldrelpath, 64);
|
||||
rename.to.dir.length = txdr_unsigned(np->n_fhsize);
|
||||
rename.to.dir.handle = np->n_fhp;
|
||||
bcopy(&np->n_fhp, &rename.to.dir.handle, sizeof(nfsfh_t));
|
||||
rename.to.length = txdr_unsigned(64);
|
||||
strncpy(rename.to.name, newrelpath, 64);
|
||||
|
||||
@ -1771,7 +1766,7 @@ static int nfs_rename(struct inode *mountpt, const char *oldrelpath,
|
||||
goto errout_with_semaphore;
|
||||
}
|
||||
|
||||
//np->n_fattr = resok.todir_wcc.after;
|
||||
bcopy(&resok.rename.todir_wcc.after, &np->n_fattr, sizeof(struct nfs_fattr));
|
||||
np->n_flag |= NMODIFIED;
|
||||
NFS_INVALIDATE_ATTRCACHE(np);
|
||||
|
||||
@ -1800,7 +1795,8 @@ static int nfs_getfsinfo(struct nfsmount *nmp, const char *relpath,
|
||||
{
|
||||
struct rpc_reply_fsinfo fsp;
|
||||
struct FS3args fsinfo;
|
||||
//uint32_t pref, max;
|
||||
uint32_t pref;
|
||||
uint32_t max;
|
||||
int error = 0;
|
||||
|
||||
#warning "relpath is not used! Additional logic will be required!"
|
||||
@ -1822,13 +1818,13 @@ static int nfs_getfsinfo(struct nfsmount *nmp, const char *relpath,
|
||||
}
|
||||
|
||||
//nmp->nm_fattr = fsp.obj_attributes;
|
||||
/* pref = fxdr_unsigned(uint32_t, fsp.fs_wtpref);
|
||||
pref = fxdr_unsigned(uint32_t, fsp.fsinfo.fs_wtpref);
|
||||
if (pref < nmp->nm_wsize)
|
||||
{
|
||||
nmp->nm_wsize = (pref + NFS_FABLKSIZE - 1) & ~(NFS_FABLKSIZE - 1);
|
||||
}
|
||||
|
||||
max = fxdr_unsigned(uint32_t, fsp.fs_wtmax);
|
||||
max = fxdr_unsigned(uint32_t, fsp.fsinfo.fs_wtmax);
|
||||
if (max < nmp->nm_wsize)
|
||||
{
|
||||
nmp->nm_wsize = max & ~(NFS_FABLKSIZE - 1);
|
||||
@ -1836,13 +1832,13 @@ static int nfs_getfsinfo(struct nfsmount *nmp, const char *relpath,
|
||||
nmp->nm_wsize = max;
|
||||
}
|
||||
|
||||
pref = fxdr_unsigned(uint32_t, fsp.fs_rtpref);
|
||||
pref = fxdr_unsigned(uint32_t, fsp.fsinfo.fs_rtpref);
|
||||
if (pref < nmp->nm_rsize)
|
||||
{
|
||||
nmp->nm_rsize = (pref + NFS_FABLKSIZE - 1) & ~(NFS_FABLKSIZE - 1);
|
||||
}
|
||||
|
||||
max = fxdr_unsigned(uint32_t, fsp.fs_rtmax);
|
||||
max = fxdr_unsigned(uint32_t, fsp.fsinfo.fs_rtmax);
|
||||
if (max < nmp->nm_rsize)
|
||||
{
|
||||
nmp->nm_rsize = max & ~(NFS_FABLKSIZE - 1);
|
||||
@ -1852,7 +1848,7 @@ static int nfs_getfsinfo(struct nfsmount *nmp, const char *relpath,
|
||||
}
|
||||
}
|
||||
|
||||
pref = fxdr_unsigned(uint32_t, fsp.fs_dtpref);
|
||||
pref = fxdr_unsigned(uint32_t, fsp.fsinfo.fs_dtpref);
|
||||
if (pref < nmp->nm_readdirsize)
|
||||
{
|
||||
nmp->nm_readdirsize = (pref + NFS_DIRBLKSIZ - 1) & ~(NFS_DIRBLKSIZ - 1);
|
||||
@ -1866,7 +1862,6 @@ static int nfs_getfsinfo(struct nfsmount *nmp, const char *relpath,
|
||||
nmp->nm_readdirsize = max;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
/* Verify that the caller has provided a non-NULL location to return the
|
||||
* FSINFO data.
|
||||
|
14
fs/nfs/rpc.h
14
fs/nfs/rpc.h
@ -387,72 +387,84 @@ struct rpc_reply_header
|
||||
struct rpc_reply_pmap
|
||||
{
|
||||
struct rpc_reply_header rh;
|
||||
uint32_t status;
|
||||
struct call_result_pmap pmap;
|
||||
};
|
||||
|
||||
struct rpc_reply_mount
|
||||
{
|
||||
struct rpc_reply_header rh;
|
||||
uint32_t status;
|
||||
struct call_result_mount mount;
|
||||
};
|
||||
|
||||
struct rpc_reply_create
|
||||
{
|
||||
struct rpc_reply_header rh;
|
||||
uint32_t status;
|
||||
struct CREATE3resok create;
|
||||
};
|
||||
|
||||
struct rpc_reply_write
|
||||
{
|
||||
struct rpc_reply_header rh;
|
||||
uint32_t status;
|
||||
struct WRITE3resok write;
|
||||
};
|
||||
|
||||
struct rpc_reply_read
|
||||
{
|
||||
struct rpc_reply_header rh;
|
||||
uint32_t status;
|
||||
struct READ3resok read;
|
||||
};
|
||||
|
||||
struct rpc_reply_remove
|
||||
{
|
||||
struct rpc_reply_header rh;
|
||||
uint32_t status;
|
||||
struct REMOVE3resok remove;
|
||||
};
|
||||
|
||||
struct rpc_reply_rename
|
||||
{
|
||||
struct rpc_reply_header rh;
|
||||
uint32_t status;
|
||||
struct RENAME3resok rename;
|
||||
};
|
||||
|
||||
struct rpc_reply_mkdir
|
||||
{
|
||||
struct rpc_reply_header rh;
|
||||
uint32_t status;
|
||||
struct MKDIR3resok mkdir;
|
||||
};
|
||||
|
||||
struct rpc_reply_rmdir
|
||||
{
|
||||
struct rpc_reply_header rh;
|
||||
uint32_t status;
|
||||
struct RMDIR3resok rmdir;
|
||||
};
|
||||
|
||||
struct rpc_reply_readdir
|
||||
{
|
||||
struct rpc_reply_header rh;
|
||||
uint32_t status;
|
||||
struct READDIR3resok readdir;
|
||||
};
|
||||
|
||||
struct rpc_reply_fsinfo
|
||||
{
|
||||
struct rpc_reply_header rh;
|
||||
uint32_t status;
|
||||
struct nfsv3_fsinfo fsinfo;
|
||||
};
|
||||
|
||||
struct rpc_reply_fsstat
|
||||
{
|
||||
struct rpc_reply_header rh;
|
||||
uint32_t status;
|
||||
struct nfs_statfs fsstat;
|
||||
};
|
||||
|
||||
@ -549,4 +561,4 @@ int rpcclnt_request(struct rpcclnt *, int, int, int, void *, FAR const void *,
|
||||
int rpcclnt_cancelreqs(struct rpcclnt *);
|
||||
#endif
|
||||
|
||||
#endif /* _RPCCLNT_H_ */
|
||||
#endif /* __FS_NFS_RPC_H */
|
||||
|
Loading…
x
Reference in New Issue
Block a user