Merge pull request #103 from jeremy-gill/master
Add support for block device storage endpoints.
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user