From 48dbbba8a8515c0ac65102e2eee6cd23b984def3 Mon Sep 17 00:00:00 2001 From: Evan Hazlett Date: Sat, 28 Nov 2020 23:34:25 -0500 Subject: [PATCH] enable block device size lookup for file backend Signed-off-by: Evan Hazlett --- nbd/file.go | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/nbd/file.go b/nbd/file.go index d6a5099..a8df9e5 100644 --- a/nbd/file.go +++ b/nbd/file.go @@ -1,8 +1,10 @@ package nbd import ( - "golang.org/x/net/context" + "io" "os" + + "golang.org/x/net/context" ) // FileBackend implements Backend @@ -79,9 +81,20 @@ func NewFileBackend(ctx context.Context, ec *ExportConfig) (Backend, error) { file.Close() return nil, err } + var size uint64 + switch { + case stat.Mode().IsRegular(): + size = uint64(stat.Size()) + case stat.Mode()&os.ModeDevice != 0: + ds, err := file.Seek(0, io.SeekEnd) + if err != nil { + return nil, err + } + size = uint64(ds) + } return &FileBackend{ file: file, - size: uint64(stat.Size()), + size: size, }, nil }