Add support for block device storage endpoints.

This commit is contained in:
Jeremy Gill
2020-09-04 13:28:51 -04:00
parent f4d57bede2
commit 228e53351d

View File

@@ -19,6 +19,7 @@ package backingstore
import (
"fmt"
"os"
"io"
"github.com/gostor/gotgt/pkg/api"
"github.com/gostor/gotgt/pkg/scsi"
@@ -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
}