nfs4: Use FileInfo instead of filehandle to identify a file

This commit is contained in:
Pawel Dziepak
2012-07-03 01:33:41 +02:00
parent 1a0820703b
commit a28e873222
9 changed files with 74 additions and 83 deletions
@@ -74,7 +74,7 @@ struct OpenFileCookie : public Cookie {
uint32 fMode; uint32 fMode;
Filehandle fHandle; FileInfo fInfo;
uint32 fStateId[3]; uint32 fStateId[3];
uint32 fStateSeq; uint32 fStateSeq;
@@ -32,7 +32,7 @@ struct Filehandle {
// since OPEN requires both parent filehandle and file name (just like LOOKUP). // since OPEN requires both parent filehandle and file name (just like LOOKUP).
struct FileInfo { struct FileInfo {
uint64 fFileId; uint64 fFileId;
Filehandle fFH; Filehandle fHandle;
Filehandle fParent; Filehandle fParent;
const char* fName; const char* fName;
@@ -101,7 +101,7 @@ inline
FileInfo::FileInfo(const FileInfo& fi) FileInfo::FileInfo(const FileInfo& fi)
: :
fFileId(fi.fFileId), fFileId(fi.fFileId),
fFH(fi.fFH), fHandle(fi.fHandle),
fParent(fi.fParent), fParent(fi.fParent),
fName(strdup(fi.fName)), fName(strdup(fi.fName)),
fPath(strdup(fi.fPath)) fPath(strdup(fi.fPath))
@@ -113,7 +113,7 @@ inline FileInfo&
FileInfo::operator=(const FileInfo& fi) FileInfo::operator=(const FileInfo& fi)
{ {
fFileId = fi.fFileId; fFileId = fi.fFileId;
fFH = fi.fFH; fHandle = fi.fHandle;
fParent = fi.fParent; fParent = fi.fParent;
free(const_cast<char*>(fName)); free(const_cast<char*>(fName));
@@ -170,7 +170,7 @@ Filesystem::Mount(Filesystem** pfs, RPC::Server* serv, const char* fsPath,
fs->fDevId = id; fs->fDevId = id;
fs->fFsId = *fsid; fs->fFsId = *fsid;
fi.fFH = fh; fi.fHandle = fh;
fi.fParent = fh; fi.fParent = fh;
fi.fPath = strdup(sGetPath(fs->fPath, fsPath)); fi.fPath = strdup(sGetPath(fs->fPath, fsPath));
+30 -33
View File
@@ -34,18 +34,15 @@ Inode::CreateInode(Filesystem* fs, const FileInfo &fi, Inode** _inode)
if (inode == NULL) if (inode == NULL)
return B_NO_MEMORY; return B_NO_MEMORY;
inode->fHandle = fi.fFH; inode->fInfo = fi;
inode->fFilesystem = fs; inode->fFilesystem = fs;
inode->fParentFH = fi.fParent;
inode->fName = strdup(fi.fName);
inode->fPath = strdup(fi.fPath);
do { do {
RPC::Server* serv = fs->Server(); RPC::Server* serv = fs->Server();
Request request(serv); Request request(serv);
RequestBuilder& req = request.Builder(); RequestBuilder& req = request.Builder();
req.PutFH(inode->fHandle); req.PutFH(inode->fInfo.fHandle);
Attribute attr[] = { FATTR4_TYPE, FATTR4_FSID, FATTR4_FILEID }; Attribute attr[] = { FATTR4_TYPE, FATTR4_FSID, FATTR4_FILEID };
req.GetAttr(attr, sizeof(attr) / sizeof(Attribute)); req.GetAttr(attr, sizeof(attr) / sizeof(Attribute));
@@ -69,11 +66,11 @@ Inode::CreateInode(Filesystem* fs, const FileInfo &fi, Inode** _inode)
if (fi.fFileId == 0) { if (fi.fFileId == 0) {
if (count < 3 || values[2].fAttribute != FATTR4_FILEID) if (count < 3 || values[2].fAttribute != FATTR4_FILEID)
inode->fFileId = fs->AllocFileId(); inode->fInfo.fFileId = fs->AllocFileId();
else else
inode->fFileId = values[2].fData.fValue64; inode->fInfo.fFileId = values[2].fData.fValue64;
} else } else
inode->fFileId = fi.fFileId; inode->fInfo.fFileId = fi.fFileId;
// FATTR4_TYPE is mandatory // FATTR4_TYPE is mandatory
inode->fType = values[0].fData.fValue32; inode->fType = values[0].fData.fValue32;
@@ -97,7 +94,7 @@ Inode::CreateInode(Filesystem* fs, const FileInfo &fi, Inode** _inode)
Inode::~Inode() Inode::~Inode()
{ {
free(const_cast<char*>(fName)); free(const_cast<char*>(fInfo.fName));
} }
@@ -117,7 +114,7 @@ Inode::LookUp(const char* name, ino_t* id)
Request request(serv); Request request(serv);
RequestBuilder& req = request.Builder(); RequestBuilder& req = request.Builder();
req.PutFH(fHandle); req.PutFH(fInfo.fHandle);
if (!strcmp(name, "..")) if (!strcmp(name, ".."))
req.LookUpUp(); req.LookUpUp();
@@ -174,13 +171,13 @@ Inode::LookUp(const char* name, ino_t* id)
FileInfo fi; FileInfo fi;
fi.fFileId = fileId; fi.fFileId = fileId;
fi.fFH = fh; fi.fHandle = fh;
fi.fParent = fHandle; fi.fParent = fInfo.fHandle;
fi.fName = strdup(name); fi.fName = strdup(name);
char* path = reinterpret_cast<char*>(malloc(strlen(name) + 2 + char* path = reinterpret_cast<char*>(malloc(strlen(name) + 2 +
strlen(fPath))); strlen(fInfo.fPath)));
strcpy(path, fPath); strcpy(path, fInfo.fPath);
strcat(path, "/"); strcat(path, "/");
strcat(path, name); strcat(path, name);
fi.fPath = path; fi.fPath = path;
@@ -200,9 +197,9 @@ Inode::Link(Inode* dir, const char* name)
Request request(serv); Request request(serv);
RequestBuilder& req = request.Builder(); RequestBuilder& req = request.Builder();
req.PutFH(fHandle); req.PutFH(fInfo.fHandle);
req.SaveFH(); req.SaveFH();
req.PutFH(dir->fHandle); req.PutFH(dir->fInfo.fHandle);
req.Link(name); req.Link(name);
status_t result = request.Send(); status_t result = request.Send();
@@ -244,7 +241,7 @@ Inode::Remove(const char* name, FileType type)
Request request(serv); Request request(serv);
RequestBuilder& req = request.Builder(); RequestBuilder& req = request.Builder();
req.PutFH(fHandle); req.PutFH(fInfo.fHandle);
req.LookUp(name); req.LookUp(name);
AttrValue attr; AttrValue attr;
attr.fAttribute = FATTR4_TYPE; attr.fAttribute = FATTR4_TYPE;
@@ -255,7 +252,7 @@ Inode::Remove(const char* name, FileType type)
else else
req.Nverify(&attr, 1); req.Nverify(&attr, 1);
req.PutFH(fHandle); req.PutFH(fInfo.fHandle);
req.Remove(name); req.Remove(name);
status_t result = request.Send(); status_t result = request.Send();
@@ -305,9 +302,9 @@ Inode::Rename(Inode* from, Inode* to, const char* fromName, const char* toName)
Request request(serv); Request request(serv);
RequestBuilder& req = request.Builder(); RequestBuilder& req = request.Builder();
req.PutFH(from->fHandle); req.PutFH(from->fInfo.fHandle);
req.SaveFH(); req.SaveFH();
req.PutFH(to->fHandle); req.PutFH(to->fInfo.fHandle);
req.Rename(fromName, toName); req.Rename(fromName, toName);
status_t result = request.Send(); status_t result = request.Send();
@@ -346,7 +343,7 @@ Inode::CreateLink(const char* name, const char* path, int mode)
Request request(serv); Request request(serv);
RequestBuilder& req = request.Builder(); RequestBuilder& req = request.Builder();
req.PutFH(fHandle); req.PutFH(fInfo.fHandle);
AttrValue attr; AttrValue attr;
attr.fAttribute = FATTR4_MODE; attr.fAttribute = FATTR4_MODE;
@@ -381,7 +378,7 @@ Inode::ReadLink(void* buffer, size_t* length)
Request request(serv); Request request(serv);
RequestBuilder& req = request.Builder(); RequestBuilder& req = request.Builder();
req.PutFH(fHandle); req.PutFH(fInfo.fHandle);
req.ReadLink(); req.ReadLink();
status_t result = request.Send(); status_t result = request.Send();
@@ -412,7 +409,7 @@ Inode::Access(int mode)
Request request(serv); Request request(serv);
RequestBuilder& req = request.Builder(); RequestBuilder& req = request.Builder();
req.PutFH(fHandle); req.PutFH(fInfo.fHandle);
req.Access(); req.Access();
status_t result = request.Send(); status_t result = request.Send();
@@ -460,7 +457,7 @@ Inode::Stat(struct stat* st)
Request request(serv); Request request(serv);
RequestBuilder& req = request.Builder(); RequestBuilder& req = request.Builder();
req.PutFH(fHandle); req.PutFH(fInfo.fHandle);
Attribute attr[] = { FATTR4_SIZE, FATTR4_MODE, FATTR4_NUMLINKS, Attribute attr[] = { FATTR4_SIZE, FATTR4_MODE, FATTR4_NUMLINKS,
FATTR4_TIME_ACCESS, FATTR4_TIME_CREATE, FATTR4_TIME_ACCESS, FATTR4_TIME_CREATE,
@@ -499,7 +496,7 @@ Inode::Stat(struct stat* st)
} else { } else {
// Try to guess using ACCESS request // Try to guess using ACCESS request
request.Reset(); request.Reset();
request.Builder().PutFH(fHandle); request.Builder().PutFH(fInfo.fHandle);
request.Builder().Access(); request.Builder().Access();
result = request.Send(); result = request.Send();
if (result != B_OK) if (result != B_OK)
@@ -617,7 +614,7 @@ Inode::WriteStat(const struct stat* st, uint32 mask)
Request request(serv); Request request(serv);
RequestBuilder& req = request.Builder(); RequestBuilder& req = request.Builder();
req.PutFH(fHandle); req.PutFH(fInfo.fHandle);
if ((mask & B_STAT_SIZE) != 0) if ((mask & B_STAT_SIZE) != 0)
req.SetAttr(cookie->fStateId, cookie->fStateSeq, attr, i); req.SetAttr(cookie->fStateId, cookie->fStateSeq, attr, i);
else else
@@ -690,7 +687,7 @@ Inode::TestLock(OpenFileCookie* cookie, struct flock* lock)
Request request(serv); Request request(serv);
RequestBuilder& req = request.Builder(); RequestBuilder& req = request.Builder();
req.PutFH(fHandle); req.PutFH(fInfo.fHandle);
req.LockT(sGetLockType(lock->l_type, false), lock->l_start, req.LockT(sGetLockType(lock->l_type, false), lock->l_start,
lock->l_len, cookie); lock->l_len, cookie);
@@ -760,7 +757,7 @@ Inode::AcquireLock(OpenFileCookie* cookie, const struct flock* lock,
Request request(serv); Request request(serv);
RequestBuilder& req = request.Builder(); RequestBuilder& req = request.Builder();
req.PutFH(fHandle); req.PutFH(fInfo.fHandle);
req.Lock(cookie, linfo); req.Lock(cookie, linfo);
status_t result = request.Send(); status_t result = request.Send();
@@ -829,7 +826,7 @@ Inode::ReleaseLock(OpenFileCookie* cookie, const struct flock* lock)
Request request(serv); Request request(serv);
RequestBuilder& req = request.Builder(); RequestBuilder& req = request.Builder();
req.PutFH(fHandle); req.PutFH(fInfo.fHandle);
req.LockU(linfo); req.LockU(linfo);
status_t result = request.Send(); status_t result = request.Send();
@@ -874,7 +871,7 @@ Inode::ReleaseAllLocks(OpenFileCookie* cookie)
Request request(serv); Request request(serv);
RequestBuilder& req = request.Builder(); RequestBuilder& req = request.Builder();
req.PutFH(fHandle); req.PutFH(fInfo.fHandle);
req.LockU(linfo); req.LockU(linfo);
status_t result = request.Send(); status_t result = request.Send();
@@ -1021,7 +1018,7 @@ Inode::_LookUpFilehandle()
uint32 lookupCount = 0; uint32 lookupCount = 0;
sParsePath(req, &lookupCount, fFilesystem->Path()); sParsePath(req, &lookupCount, fFilesystem->Path());
sParsePath(req, &lookupCount, fPath); sParsePath(req, &lookupCount, fInfo.fPath);
req.GetFH(); req.GetFH();
@@ -1029,7 +1026,7 @@ Inode::_LookUpFilehandle()
AttrValue attr; AttrValue attr;
attr.fAttribute = FATTR4_FILEID; attr.fAttribute = FATTR4_FILEID;
attr.fFreePointer = false; attr.fFreePointer = false;
attr.fData.fValue64 = fFileId; attr.fData.fValue64 = fInfo.fFileId;
req.Verify(&attr, 1); req.Verify(&attr, 1);
} }
@@ -1043,7 +1040,7 @@ Inode::_LookUpFilehandle()
for (uint32 i = 0; i < lookupCount; i++) for (uint32 i = 0; i < lookupCount; i++)
reply.LookUp(); reply.LookUp();
result = reply.GetFH(&fHandle); result = reply.GetFH(&fInfo.fHandle);
if (result != B_OK) if (result != B_OK)
return result; return result;
+3 -9
View File
@@ -90,16 +90,10 @@ protected:
static inline ino_t _FileIdToInoT(uint64 fileid); static inline ino_t _FileIdToInoT(uint64 fileid);
uint64 fFileId;
uint32 fType; uint32 fType;
Filehandle fHandle; FileInfo fInfo;
Filesystem* fFilesystem; Filesystem* fFilesystem;
Filehandle fParentFH;
const char* fName;
const char* fPath;
}; };
@@ -117,7 +111,7 @@ Inode::_FileIdToInoT(uint64 fileid)
inline ino_t inline ino_t
Inode::ID() const Inode::ID() const
{ {
return _FileIdToInoT(fFileId); return _FileIdToInoT(fInfo.fFileId);
} }
@@ -131,7 +125,7 @@ Inode::Type() const
inline const char* inline const char*
Inode::Name() const Inode::Name() const
{ {
return fName; return fInfo.fName;
} }
@@ -24,7 +24,7 @@ Inode::CreateDir(const char* name, int mode)
Request request(serv); Request request(serv);
RequestBuilder& req = request.Builder(); RequestBuilder& req = request.Builder();
req.PutFH(fHandle); req.PutFH(fInfo.fHandle);
AttrValue attr; AttrValue attr;
attr.fAttribute = FATTR4_MODE; attr.fAttribute = FATTR4_MODE;
@@ -59,7 +59,7 @@ Inode::OpenDir(OpenDirCookie* cookie)
Request request(serv); Request request(serv);
RequestBuilder& req = request.Builder(); RequestBuilder& req = request.Builder();
req.PutFH(fHandle); req.PutFH(fInfo.fHandle);
req.Access(); req.Access();
status_t result = request.Send(); status_t result = request.Send();
@@ -99,7 +99,7 @@ Inode::_ReadDirOnce(DirEntry** dirents, uint32* count, OpenDirCookie* cookie,
Request request(serv); Request request(serv);
RequestBuilder& req = request.Builder(); RequestBuilder& req = request.Builder();
req.PutFH(fHandle); req.PutFH(fInfo.fHandle);
Attribute attr[] = { FATTR4_FSID, FATTR4_FILEID }; Attribute attr[] = { FATTR4_FSID, FATTR4_FILEID };
req.ReadDir(*count, cookie->fCookie, cookie->fCookieVerf, attr, req.ReadDir(*count, cookie->fCookie, cookie->fCookieVerf, attr,
@@ -151,7 +151,7 @@ Inode::_ReadDirUp(struct dirent* de, uint32 pos, uint32 size)
Request request(serv); Request request(serv);
RequestBuilder& req = request.Builder(); RequestBuilder& req = request.Builder();
req.PutFH(fHandle); req.PutFH(fInfo.fHandle);
req.LookUpUp(); req.LookUpUp();
req.GetFH(); req.GetFH();
@@ -214,7 +214,7 @@ Inode::ReadDir(void* _buffer, uint32 size, uint32* _count,
if (cookie->fCookie == 0 && cookie->fCookieVerf == 2 && count < *_count) { if (cookie->fCookie == 0 && cookie->fCookieVerf == 2 && count < *_count) {
struct dirent* de = reinterpret_cast<dirent*>(buffer + pos); struct dirent* de = reinterpret_cast<dirent*>(buffer + pos);
_FillDirEntry(de, fFileId, ".", pos, size); _FillDirEntry(de, fInfo.fFileId, ".", pos, size);
pos += de->d_reclen; pos += de->d_reclen;
count++; count++;
@@ -224,10 +224,10 @@ Inode::ReadDir(void* _buffer, uint32 size, uint32* _count,
if (cookie->fCookie == 0 && cookie->fCookieVerf == 1 && count < *_count) { if (cookie->fCookie == 0 && cookie->fCookieVerf == 1 && count < *_count) {
struct dirent* de = reinterpret_cast<dirent*>(buffer + pos); struct dirent* de = reinterpret_cast<dirent*>(buffer + pos);
if (strcmp(fName, "/")) if (strcmp(fInfo.fName, "/"))
_ReadDirUp(de, pos, size); _ReadDirUp(de, pos, size);
else else
_FillDirEntry(de, _FileIdToInoT(fFileId), "..", pos, size); _FillDirEntry(de, _FileIdToInoT(fInfo.fFileId), "..", pos, size);
pos += de->d_reclen; pos += de->d_reclen;
count++; count++;
@@ -75,7 +75,7 @@ Inode::Create(const char* name, int mode, int perms, OpenFileCookie* cookie,
cookie->fOwnerId = atomic_add64(&cookie->fLastOwnerId, 1); cookie->fOwnerId = atomic_add64(&cookie->fLastOwnerId, 1);
req.PutFH(fHandle); req.PutFH(fInfo.fHandle);
AttrValue cattr[2]; AttrValue cattr[2];
uint32 i = 0; uint32 i = 0;
@@ -130,13 +130,13 @@ Inode::Create(const char* name, int mode, int perms, OpenFileCookie* cookie,
FileInfo fi; FileInfo fi;
fi.fFileId = fileId; fi.fFileId = fileId;
fi.fFH = fh; fi.fHandle = fh;
fi.fParent = fHandle; fi.fParent = fInfo.fHandle;
fi.fName = strdup(name); fi.fName = strdup(name);
char* path = reinterpret_cast<char*>(malloc(strlen(name) + 2 + char* path = reinterpret_cast<char*>(malloc(strlen(name) + 2 +
strlen(fPath))); strlen(fInfo.fPath)));
strcpy(path, fPath); strcpy(path, fInfo.fPath);
strcat(path, "/"); strcat(path, "/");
strcat(path, name); strcat(path, name);
fi.fPath = path; fi.fPath = path;
@@ -144,7 +144,7 @@ Inode::Create(const char* name, int mode, int perms, OpenFileCookie* cookie,
fFilesystem->InoIdMap()->AddEntry(fi, *id); fFilesystem->InoIdMap()->AddEntry(fi, *id);
cookie->fFilesystem = fFilesystem; cookie->fFilesystem = fFilesystem;
cookie->fHandle = fh; cookie->fInfo = fi;
break; break;
} while (true); } while (true);
@@ -165,7 +165,7 @@ Inode::Open(int mode, OpenFileCookie* cookie)
status_t result; status_t result;
cookie->fFilesystem = fFilesystem; cookie->fFilesystem = fFilesystem;
cookie->fHandle = fHandle; cookie->fInfo = fInfo;
cookie->fMode = mode; cookie->fMode = mode;
cookie->fSequence = 0; cookie->fSequence = 0;
cookie->fLocks = NULL; cookie->fLocks = NULL;
@@ -182,36 +182,36 @@ Inode::Open(int mode, OpenFileCookie* cookie)
// Since we are opening the file using a pair (parentFH, name) we // Since we are opening the file using a pair (parentFH, name) we
// need to check for race conditions. // need to check for race conditions.
if (fFilesystem->IsAttrSupported(FATTR4_FILEID)) { if (fFilesystem->IsAttrSupported(FATTR4_FILEID)) {
req.PutFH(fParentFH); req.PutFH(fInfo.fParent);
req.LookUp(fName); req.LookUp(fInfo.fName);
AttrValue attr; AttrValue attr;
attr.fAttribute = FATTR4_FILEID; attr.fAttribute = FATTR4_FILEID;
attr.fFreePointer = false; attr.fFreePointer = false;
attr.fData.fValue64 = fFileId; attr.fData.fValue64 = fInfo.fFileId;
req.Verify(&attr, 1); req.Verify(&attr, 1);
} else if (fFilesystem->ExpireType() == FH4_PERSISTENT) { } else if (fFilesystem->ExpireType() == FH4_PERSISTENT) {
req.PutFH(fParentFH); req.PutFH(fInfo.fParent);
req.LookUp(fName); req.LookUp(fInfo.fName);
AttrValue attr; AttrValue attr;
attr.fAttribute = FATTR4_FILEHANDLE; attr.fAttribute = FATTR4_FILEHANDLE;
attr.fFreePointer = true; attr.fFreePointer = true;
attr.fData.fPointer = malloc(sizeof(fHandle)); attr.fData.fPointer = malloc(sizeof(fInfo.fHandle));
memcpy(attr.fData.fPointer, &fHandle, sizeof(fHandle)); memcpy(attr.fData.fPointer, &fInfo.fHandle, sizeof(fInfo.fHandle));
req.Verify(&attr, 1); req.Verify(&attr, 1);
} }
req.PutFH(fParentFH); req.PutFH(fInfo.fParent);
if ((mode & O_TRUNC) == O_TRUNC) { if ((mode & O_TRUNC) == O_TRUNC) {
AttrValue attr; AttrValue attr;
attr.fAttribute = FATTR4_SIZE; attr.fAttribute = FATTR4_SIZE;
attr.fFreePointer = false; attr.fFreePointer = false;
attr.fData.fValue64 = 0; attr.fData.fValue64 = 0;
req.Open(CLAIM_NULL, cookie->fSequence++, sModeToAccess(mode), req.Open(CLAIM_NULL, cookie->fSequence++, sModeToAccess(mode),
cookie->fClientId, OPEN4_CREATE, cookie->fOwnerId, fName, &attr, cookie->fClientId, OPEN4_CREATE, cookie->fOwnerId, fInfo.fName,
1, false); &attr, 1, false);
} else } else
req.Open(CLAIM_NULL, cookie->fSequence++, sModeToAccess(mode), req.Open(CLAIM_NULL, cookie->fSequence++, sModeToAccess(mode),
cookie->fClientId, OPEN4_NOCREATE, cookie->fOwnerId, fName); cookie->fClientId, OPEN4_NOCREATE, cookie->fOwnerId, fInfo.fName);
result = request.Send(); result = request.Send();
if (result != B_OK) if (result != B_OK)
@@ -248,7 +248,7 @@ Inode::Open(int mode, OpenFileCookie* cookie)
fFilesystem->AddOpenFile(cookie); fFilesystem->AddOpenFile(cookie);
if (confirm) if (confirm)
return _ConfirmOpen(fHandle, cookie); return _ConfirmOpen(fInfo.fHandle, cookie);
else else
return B_OK; return B_OK;
} }
@@ -264,7 +264,7 @@ Inode::Close(OpenFileCookie* cookie)
Request request(serv); Request request(serv);
RequestBuilder& req = request.Builder(); RequestBuilder& req = request.Builder();
req.PutFH(fHandle); req.PutFH(fInfo.fHandle);
req.Close(cookie->fSequence++, cookie->fStateId, req.Close(cookie->fSequence++, cookie->fStateId,
cookie->fStateSeq); cookie->fStateSeq);
@@ -302,7 +302,7 @@ Inode::Read(OpenFileCookie* cookie, off_t pos, void* buffer, size_t* _length)
Request request(serv); Request request(serv);
RequestBuilder& req = request.Builder(); RequestBuilder& req = request.Builder();
req.PutFH(fHandle); req.PutFH(fInfo.fHandle);
req.Read(cookie->fStateId, cookie->fStateSeq, pos + size, req.Read(cookie->fStateId, cookie->fStateSeq, pos + size,
*_length - size); *_length - size);
@@ -358,7 +358,7 @@ Inode::Write(OpenFileCookie* cookie, off_t pos, const void* _buffer,
pos = fileSize; pos = fileSize;
} }
req.PutFH(fHandle); req.PutFH(fInfo.fHandle);
if ((cookie->fMode & O_APPEND) == O_APPEND) { if ((cookie->fMode & O_APPEND) == O_APPEND) {
AttrValue attr; AttrValue attr;
attr.fAttribute = FATTR4_SIZE; attr.fAttribute = FATTR4_SIZE;
@@ -77,7 +77,7 @@ NFS4Server::_ReclaimOpen(OpenFileCookie* cookie)
Request request(fServer); Request request(fServer);
RequestBuilder& req = request.Builder(); RequestBuilder& req = request.Builder();
req.PutFH(cookie->fHandle); req.PutFH(cookie->fInfo.fHandle);
req.Open(CLAIM_PREVIOUS, cookie->fSequence++, sModeToAccess(cookie->fMode), req.Open(CLAIM_PREVIOUS, cookie->fSequence++, sModeToAccess(cookie->fMode),
cookie->fClientId, OPEN4_NOCREATE, cookie->fOwnerId, NULL); cookie->fClientId, OPEN4_NOCREATE, cookie->fOwnerId, NULL);
@@ -97,7 +97,7 @@ NFS4Server::_ReclaimOpen(OpenFileCookie* cookie)
if (confirm) { if (confirm) {
request.Reset(); request.Reset();
req.PutFH(cookie->fHandle); req.PutFH(cookie->fInfo.fHandle);
req.OpenConfirm(cookie->fSequence++, cookie->fStateId, req.OpenConfirm(cookie->fSequence++, cookie->fStateId,
cookie->fStateSeq); cookie->fStateSeq);
@@ -131,7 +131,7 @@ NFS4Server::_ReclaimLocks(OpenFileCookie* cookie)
Request request(fServer); Request request(fServer);
RequestBuilder& req = request.Builder(); RequestBuilder& req = request.Builder();
req.PutFH(cookie->fHandle); req.PutFH(cookie->fInfo.fHandle);
req.Lock(cookie, linfo, true); req.Lock(cookie, linfo, true);
status_t result = request.Send(); status_t result = request.Send();
@@ -22,7 +22,7 @@ RootInode::ReadInfo(struct fs_info* info)
Request request(serv); Request request(serv);
RequestBuilder& req = request.Builder(); RequestBuilder& req = request.Builder();
req.PutFH(fHandle); req.PutFH(fInfo.fHandle);
Attribute attr[] = { FATTR4_FILES_FREE, FATTR4_FILES_TOTAL, Attribute attr[] = { FATTR4_FILES_FREE, FATTR4_FILES_TOTAL,
FATTR4_MAXREAD, FATTR4_MAXWRITE, FATTR4_SPACE_FREE, FATTR4_MAXREAD, FATTR4_MAXWRITE, FATTR4_SPACE_FREE,
FATTR4_SPACE_TOTAL }; FATTR4_SPACE_TOTAL };
@@ -87,7 +87,7 @@ RootInode::ReadInfo(struct fs_info* info)
} while (true); } while (true);
info->flags = 0; info->flags = 0;
strncpy(info->volume_name, fName, B_FILE_NAME_LENGTH); strncpy(info->volume_name, fInfo.fName, B_FILE_NAME_LENGTH);
return B_OK; return B_OK;
} }
@@ -101,7 +101,7 @@ RootInode::ProbeMigration()
Request request(serv); Request request(serv);
RequestBuilder& req = request.Builder(); RequestBuilder& req = request.Builder();
req.PutFH(fHandle); req.PutFH(fInfo.fHandle);
req.Access(); req.Access();
status_t result = request.Send(); status_t result = request.Send();
@@ -130,7 +130,7 @@ RootInode::GetLocations(AttrValue** attrv)
Request request(serv); Request request(serv);
RequestBuilder& req = request.Builder(); RequestBuilder& req = request.Builder();
req.PutFH(fHandle); req.PutFH(fInfo.fHandle);
Attribute attr[] = { FATTR4_FS_LOCATIONS }; Attribute attr[] = { FATTR4_FS_LOCATIONS };
req.GetAttr(attr, sizeof(attr) / sizeof(Attribute)); req.GetAttr(attr, sizeof(attr) / sizeof(Attribute));