Fix user-space filesystem st_dev values being non-unique.
This commit is contained in:
parent
2f50a03035
commit
065a51cb00
|
@ -660,7 +660,7 @@ Unode::Unode(Ref<Server> server, ino_t ino, mode_t type)
|
||||||
SetupKernelIOCtx(&kctx);
|
SetupKernelIOCtx(&kctx);
|
||||||
this->server = server;
|
this->server = server;
|
||||||
this->ino = ino;
|
this->ino = ino;
|
||||||
this->dev = (dev_t) server;
|
this->dev = (dev_t) server.Get();
|
||||||
this->type = type;
|
this->type = type;
|
||||||
|
|
||||||
// Let the remote know that the kernel is using this inode.
|
// Let the remote know that the kernel is using this inode.
|
||||||
|
@ -787,7 +787,7 @@ int Unode::stat(ioctx_t* ctx, struct stat* st)
|
||||||
msg.ino = ino;
|
msg.ino = ino;
|
||||||
if ( SendMessage(channel, FSM_REQ_STAT, &msg, sizeof(msg)) &&
|
if ( SendMessage(channel, FSM_REQ_STAT, &msg, sizeof(msg)) &&
|
||||||
RecvMessage(channel, FSM_RESP_STAT, &resp, sizeof(resp)) &&
|
RecvMessage(channel, FSM_RESP_STAT, &resp, sizeof(resp)) &&
|
||||||
(resp.st.st_dev = (dev_t) server, true) &&
|
(resp.st.st_dev = (dev_t) server.Get(), true) &&
|
||||||
ctx->copy_to_dest(st, &resp.st, sizeof(*st)) )
|
ctx->copy_to_dest(st, &resp.st, sizeof(*st)) )
|
||||||
ret = 0;
|
ret = 0;
|
||||||
channel->KernelClose();
|
channel->KernelClose();
|
||||||
|
@ -805,7 +805,7 @@ int Unode::statvfs(ioctx_t* ctx, struct statvfs* stvfs)
|
||||||
msg.ino = ino;
|
msg.ino = ino;
|
||||||
if ( SendMessage(channel, FSM_REQ_STATVFS, &msg, sizeof(msg)) &&
|
if ( SendMessage(channel, FSM_REQ_STATVFS, &msg, sizeof(msg)) &&
|
||||||
RecvMessage(channel, FSM_RESP_STATVFS, &resp, sizeof(resp)) &&
|
RecvMessage(channel, FSM_RESP_STATVFS, &resp, sizeof(resp)) &&
|
||||||
(resp.stvfs.f_fsid = (dev_t) server, true) &&
|
(resp.stvfs.f_fsid = (dev_t) server.Get(), true) &&
|
||||||
(resp.stvfs.f_flag |= ST_NOSUID, true) &&
|
(resp.stvfs.f_flag |= ST_NOSUID, true) &&
|
||||||
ctx->copy_to_dest(stvfs, &resp.stvfs, sizeof(*stvfs)) )
|
ctx->copy_to_dest(stvfs, &resp.stvfs, sizeof(*stvfs)) )
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
@ -1034,7 +1034,7 @@ ssize_t Unode::readdirents(ioctx_t* ctx, struct dirent* dirent, size_t size,
|
||||||
memset(&entry, 0, sizeof(entry));
|
memset(&entry, 0, sizeof(entry));
|
||||||
entry.d_reclen = sizeof(entry) + resp.namelen + 1;
|
entry.d_reclen = sizeof(entry) + resp.namelen + 1;
|
||||||
entry.d_namlen = resp.namelen;
|
entry.d_namlen = resp.namelen;
|
||||||
entry.d_dev = (dev_t) server;
|
entry.d_dev = (dev_t) server.Get();
|
||||||
entry.d_ino = resp.ino;
|
entry.d_ino = resp.ino;
|
||||||
entry.d_type = resp.type;
|
entry.d_type = resp.type;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue