commit 826c8bc4edcfdc7ec551274af4d0b4f34f1f3d62
parent bf342a1b06685ce941ca56342657c15d4cf32e67
Author: Matsuda Kenji <info@mtkn.jp>
Date: Mon, 18 Dec 2023 08:35:52 +0900
change sAttach and sWalk not to Open the assosiated file
Diffstat:
| M | server.go | | | 34 | ++++++++++------------------------ |
1 file changed, 10 insertions(+), 24 deletions(-)
diff --git a/server.go b/server.go
@@ -278,14 +278,10 @@ func sAttach(ctx context.Context, s *Server, r *Req) {
return
}
}
- fid.File, err = s.fs.OpenFile(".", OREAD)
- if err != nil {
- Respond(ctx, r, fmt.Errorf("open root: %v", err))
- return
- }
+ fid.OMode = -1
+ fid.path = "."
fid.Uid = ifcall.Uname
- fid.OMode = -1 // TODO: right?
- st, err := fid.File.Stat()
+ st, err := fs.Stat(ExportFS{s.fs}, ".")
if err != nil {
Respond(ctx, r, fmt.Errorf("stat root: %v", err))
return
@@ -328,7 +324,7 @@ func sWalk(ctx context.Context, s *Server, r *Req) {
Respond(ctx, r, fmt.Errorf("cannot clone open fid"))
return
}
- oldst, err := oldFid.File.Stat()
+ oldst, err := fs.Stat(ExportFS{s.fs}, oldFid.path)
if err != nil {
Respond(ctx, r, fmt.Errorf("stat: %v", err))
return
@@ -351,32 +347,20 @@ func sWalk(ctx context.Context, s *Server, r *Req) {
}
wqids := make([]Qid, len(ifcall.Wnames))
cwdp := oldFid.path
- cwdf := oldFid.File
- err = nil
var n int
// TODO: replace this block with fs.WalkDir.
for i, name := range ifcall.Wnames {
- if i > 0 {
- if err := cwdf.Close(); err != nil {
- log.Printf("close: %v", err)
- break
- }
- }
cwdp = path.Join(cwdp, name)
- cwdf, err = s.fs.OpenFile(cwdp, OREAD)
- if err != nil {
- break
- }
- stat, err := cwdf.Stat()
+ stat, err := fs.Stat(ExportFS{s.fs}, cwdp)
if err != nil {
break
}
wqids[i] = stat.Sys().(*Stat).Qid
n++
}
- newFid.File = cwdf
- newFid.Uid = oldFid.Uid
+ newFid.OMode = -1
newFid.path = cwdp
+ newFid.Uid = oldFid.Uid
r.Ofcall = &RWalk{
Qids: wqids[:n],
}
@@ -727,7 +711,8 @@ func sClunk(ctx context.Context, s *Server, r *Req) {
return
}
s.fPool.delete(ifcall.Fid)
- if fid.OMode != -1 {
+ //if fid.OMode != -1 {
+ if fid.File != nil {
if err := fid.File.Close(); err != nil {
Respond(ctx, r, fmt.Errorf("close: %v", err))
return
@@ -740,6 +725,7 @@ func sClunk(ctx context.Context, s *Server, r *Req) {
func rClunk(r *Req, err error) {
if err != nil {
log.Printf("clunk: %v", err)
+ r.Ofcall = &RClunk{}
}
}