From 228e53351da64cdfe436260eec116c30e67d22d5 Mon Sep 17 00:00:00 2001 From: Jeremy Gill Date: Fri, 4 Sep 2020 13:28:51 -0400 Subject: [PATCH] Add support for block device storage endpoints. --- pkg/scsi/backingstore/common.go | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/pkg/scsi/backingstore/common.go b/pkg/scsi/backingstore/common.go index 41cccc4..28b591f 100644 --- a/pkg/scsi/backingstore/common.go +++ b/pkg/scsi/backingstore/common.go @@ -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 }