Skip to content

Commit d0067b2

Browse files
authored
Improve Lookup efficiency (#121)
* Use an lstat rather than a readDir for lookups fix #119
1 parent 44f36ac commit d0067b2

File tree

1 file changed

+14
-18
lines changed

1 file changed

+14
-18
lines changed

nfs_onlookup.go

+14-18
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ func onLookup(ctx context.Context, w *response, userHandle Handler) error {
3838
if err != nil {
3939
return &NFSStatusError{NFSStatusStale, err}
4040
}
41-
contents, err := fs.ReadDir(fs.Join(p...))
42-
if err != nil {
41+
dirInfo, err := fs.Lstat(fs.Join(p...))
42+
if err != nil || !dirInfo.IsDir() {
4343
return &NFSStatusError{NFSStatusNotDir, err}
4444
}
4545

@@ -70,22 +70,18 @@ func onLookup(ctx context.Context, w *response, userHandle Handler) error {
7070
return nil
7171
}
7272

73-
// TODO: use sorting rather than linear
74-
for _, f := range contents {
75-
if bytes.Equal([]byte(f.Name()), obj.Filename) {
76-
newPath := append(p, f.Name())
77-
newHandle := userHandle.ToHandle(fs, newPath)
78-
resp, err := lookupSuccessResponse(newHandle, newPath, p, fs)
79-
if err != nil {
80-
return &NFSStatusError{NFSStatusServerFault, err}
81-
}
82-
if err := w.Write(resp); err != nil {
83-
return &NFSStatusError{NFSStatusServerFault, err}
84-
}
85-
return nil
86-
}
73+
reqPath := append(p, string(obj.Filename))
74+
if _, err = fs.Lstat(fs.Join(reqPath...)); err != nil {
75+
return &NFSStatusError{NFSStatusNoEnt, os.ErrNotExist}
8776
}
8877

89-
Log.Errorf("No file for lookup of %v\n", string(obj.Filename))
90-
return &NFSStatusError{NFSStatusNoEnt, os.ErrNotExist}
78+
newHandle := userHandle.ToHandle(fs, reqPath)
79+
resp, err := lookupSuccessResponse(newHandle, reqPath, p, fs)
80+
if err != nil {
81+
return &NFSStatusError{NFSStatusServerFault, err}
82+
}
83+
if err := w.Write(resp); err != nil {
84+
return &NFSStatusError{NFSStatusServerFault, err}
85+
}
86+
return nil
9187
}

0 commit comments

Comments
 (0)