@@ -31,11 +31,18 @@ func openNodirect(path string) (*DirectFile, error) {
31
31
32
32
// Close closes the file
33
33
func (df * DirectFile ) Close () error {
34
- return df .file .Close ()
34
+ if df .file != nil {
35
+ return df .file .Close ()
36
+ }
37
+
38
+ return nil
35
39
}
36
40
37
41
// Read satisfies the io.Reader
38
42
func (df * DirectFile ) Read (p []byte ) (n int , err error ) {
43
+ if ! df .Direct {
44
+ return df .file .Read (p )
45
+ }
39
46
blockSize := int (df .blockSize )
40
47
41
48
// Ensure buffer length is aligned with BlockSize for O_DIRECT
@@ -52,7 +59,7 @@ func (df *DirectFile) Read(p []byte) (n int, err error) {
52
59
53
60
req := len (p )
54
61
act := len (buf )
55
- percent := act / req * 100
62
+ percent := act / req * 100
56
63
safeLog ("Read into aligned buffer" , "requested" , req , "reading" , act , "percentage of requested" , percent )
57
64
58
65
// Perform the read
@@ -66,6 +73,9 @@ func (df *DirectFile) Read(p []byte) (n int, err error) {
66
73
67
74
// ReadAt satisfies the io.ReaderAt interface
68
75
func (df * DirectFile ) ReadAt (p []byte , off int64 ) (n int , err error ) {
76
+ if ! df .Direct {
77
+ return df .file .ReadAt (p , off )
78
+ }
69
79
blockSize := int (df .blockSize )
70
80
// Calculate aligned offset by rounding down to the nearest BlockSize boundary
71
81
// Integer division in go always discards remainder
@@ -86,7 +96,7 @@ func (df *DirectFile) ReadAt(p []byte, off int64) (n int, err error) {
86
96
87
97
req := len (p )
88
98
act := len (buf )
89
- percent := act / req * 100
99
+ percent := act / req * 100
90
100
safeLog ("ReadAt into aligned buffer" , "requested" , req , "reading" , act , "percentage of requested" , percent )
91
101
92
102
// Perform the read at the aligned offset
0 commit comments