diff options
| author | Jakob Unterwurzacher | 2016-01-24 19:43:21 +0100 | 
|---|---|---|
| committer | Jakob Unterwurzacher | 2016-01-24 19:43:21 +0100 | 
| commit | 4259c8f7ebc9f5d167556ed142e82e8232706de6 (patch) | |
| tree | 081f6951b1c251e77a89daeb2652b144699c2952 | |
| parent | 8fb32aab683959ca8aefac55090dbfa39f827682 (diff) | |
Only warn once for unsupported fallocate(2) and truncate(2)
Also, print the inode number in Ftruncate warnings.
| -rw-r--r-- | pathfs_frontend/file.go | 12 | ||||
| -rw-r--r-- | pathfs_frontend/fs.go | 8 | 
2 files changed, 16 insertions, 4 deletions
| diff --git a/pathfs_frontend/file.go b/pathfs_frontend/file.go index 522b9c1..ceb9216 100644 --- a/pathfs_frontend/file.go +++ b/pathfs_frontend/file.go @@ -336,7 +336,7 @@ func (f *file) Truncate(newSize uint64) fuse.Status {  		err := syscall.Ftruncate(int(f.fd.Fd()), 0)  		f.fdLock.Unlock()  		if err != nil { -			cryptfs.Warn.Printf("Ftruncate(fd, 0) returned error: %v", err) +			cryptfs.Warn.Printf("ino%d: Ftruncate(fd, 0) returned error: %v", f.ino, err)  			return fuse.ToStatus(err)  		}  		// Truncate to zero kills the file header @@ -348,7 +348,7 @@ func (f *file) Truncate(newSize uint64) fuse.Status {  	// the file  	fi, err := f.fd.Stat()  	if err != nil { -		cryptfs.Warn.Printf("Truncate: Fstat failed: %v", err) +		cryptfs.Warn.Printf("ino%d: Truncate: Fstat failed: %v", f.ino, err)  		return fuse.ToStatus(err)  	}  	oldSize := f.cfs.CipherSizeToPlainSize(uint64(fi.Size())) @@ -455,8 +455,14 @@ func (f *file) GetAttr(a *fuse.Attr) fuse.Status {  }  // Allocate - FUSE call, fallocate(2) +var allocateWarned bool +  func (f *file) Allocate(off uint64, sz uint64, mode uint32) fuse.Status { -	cryptfs.Warn.Printf("Fallocate is not supported, returning ENOSYS - see https://github.com/rfjakob/gocryptfs/issues/1") +	// Only warn once +	if !allocateWarned { +		cryptfs.Warn.Printf("fallocate(2) is not supported, returning ENOSYS - see https://github.com/rfjakob/gocryptfs/issues/1") +		allocateWarned = true +	}  	return fuse.ENOSYS  } diff --git a/pathfs_frontend/fs.go b/pathfs_frontend/fs.go index c7dfc82..2b26f6f 100644 --- a/pathfs_frontend/fs.go +++ b/pathfs_frontend/fs.go @@ -198,8 +198,14 @@ func (fs *FS) Mknod(path string, mode uint32, dev uint32, context *fuse.Context)  	return fs.FileSystem.Mknod(cPath, mode, dev, context)  } +var truncateWarned bool +  func (fs *FS) Truncate(path string, offset uint64, context *fuse.Context) (code fuse.Status) { -	cryptfs.Warn.Printf("Truncate of a closed file is not supported, returning ENOSYS") +	// Only warn once +	if !truncateWarned { +		cryptfs.Warn.Printf("truncate(2) is not supported, returning ENOSYS - use ftruncate(2)") +		truncateWarned = true +	}  	return fuse.ENOSYS  } | 
