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 (
"fmt"
"io"
"os"
"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 {
var (
mode os.FileMode
finfo os.FileInfo
)
if finfo, err := os.Stat(path); err != nil {
return err
} else {
bs.DataSize = uint64(finfo.Size())
// determine file type
mode = finfo.Mode()
}
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
return err
}