Merge pull request #103 from jeremy-gill/master

Add support for block device storage endpoints.
This commit is contained in:
Lei Xue
2022-12-08 17:22:37 +08:00
committed by GitHub

View File

@@ -18,6 +18,7 @@ package backingstore
import ( import (
"fmt" "fmt"
"io"
"os" "os"
"github.com/gostor/gotgt/pkg/api" "github.com/gostor/gotgt/pkg/api"
@@ -51,14 +52,33 @@ func new() (api.BackingStore, error) {
func (bs *FileBackingStore) Open(dev *api.SCSILu, path string) error { func (bs *FileBackingStore) Open(dev *api.SCSILu, path string) error {
var (
mode os.FileMode
finfo os.FileInfo
)
if finfo, err := os.Stat(path); err != nil { if finfo, err := os.Stat(path); err != nil {
return err return err
} else { } else {
bs.DataSize = uint64(finfo.Size()) // determine file type
mode = finfo.Mode()
} }
f, err := os.OpenFile(path, os.O_RDWR, os.ModePerm) f, err := os.OpenFile(path, os.O_RDWR, os.ModePerm)
if err == nil {
// block device filesize needs to be treated differently
if (mode & os.ModeDevice) != 0 {
pos, err := f.Seek(0, io.SeekEnd)
if err != nil {
return err
}
bs.DataSize = uint64(pos)
} else {
bs.DataSize = uint64(finfo.Size())
}
}
bs.file = f bs.file = f
return err return err
} }