diff options
| author | Eric Biggers <ebiggers@google.com> | 2020-05-09 14:52:07 -0700 |
|---|---|---|
| committer | Eric Biggers <ebiggers@google.com> | 2020-05-09 15:21:31 -0700 |
| commit | 66fb4c557644ba2c37951a7568c06c47a6c718a7 (patch) | |
| tree | 10ee55fb8f2753dc39b3e0435b43291f27c46908 /filesystem/mountpoint.go | |
| parent | fbc161a77962fe64e3caad80efb535d28d8c1f74 (diff) | |
filesystem: improve errors
Introduce filesystem.ErrEncryptionNotEnabled and
filesystem.ErrEncryptionNotSupported which include the Mount as context,
and translate the corresponding metadata/ errors into them. Then make
these errors show much better suggestions.
Also replace lots of other filesystem/ errors with either custom types
or with unnamed one-off errors that include more context. Fix backwards
wrapping in lots of cases.
Finally, don't include the mountpoint in places where it's not useful,
like OS-level errors that already include the path.
Diffstat (limited to 'filesystem/mountpoint.go')
| -rw-r--r-- | filesystem/mountpoint.go | 26 |
1 files changed, 13 insertions, 13 deletions
diff --git a/filesystem/mountpoint.go b/filesystem/mountpoint.go index acddbae..c830780 100644 --- a/filesystem/mountpoint.go +++ b/filesystem/mountpoint.go @@ -380,7 +380,7 @@ func FindMount(path string) (*Mount, error) { func GetMount(mountpoint string) (*Mount, error) { mnt, err := FindMount(mountpoint) if err != nil { - return nil, errors.Wrap(ErrNotAMountpoint, mountpoint) + return nil, &ErrNotAMountpoint{mountpoint} } // Check whether 'mountpoint' names the same directory as 'mnt.Path'. // Use os.SameFile() (i.e., compare inode numbers) rather than compare @@ -394,7 +394,7 @@ func GetMount(mountpoint string) (*Mount, error) { return nil, err } if !os.SameFile(fi1, fi2) { - return nil, errors.Wrap(ErrNotAMountpoint, mountpoint) + return nil, &ErrNotAMountpoint{mountpoint} } return mnt, nil } @@ -410,22 +410,22 @@ func getMountFromLink(link string) (*Mount, error) { link = strings.TrimSpace(link) linkComponents := strings.Split(link, "=") if len(linkComponents) != 2 { - return nil, errors.Wrapf(ErrFollowLink, "link %q format is invalid", link) + return nil, &ErrFollowLink{link, errors.New("invalid link format")} } token := linkComponents[0] value := linkComponents[1] if token != uuidToken { - return nil, errors.Wrapf(ErrFollowLink, "token type %q not supported", token) + return nil, &ErrFollowLink{link, errors.Errorf("token type %q not supported", token)} } // See if UUID points to an existing device searchPath := filepath.Join(uuidDirectory, value) if filepath.Base(searchPath) != value { - return nil, errors.Wrapf(ErrFollowLink, "value %q is not a UUID", value) + return nil, &ErrFollowLink{link, errors.Errorf("invalid UUID format %q", value)} } deviceNumber, err := getDeviceNumber(searchPath) if err != nil { - return nil, errors.Wrapf(ErrFollowLink, "no device with UUID %q", value) + return nil, &ErrFollowLink{link, errors.Errorf("no device with UUID %s", value)} } // Lookup mountpoints for device in global store @@ -436,11 +436,11 @@ func getMountFromLink(link string) (*Mount, error) { } mnt, ok := mountsByDevice[deviceNumber] if !ok { - return nil, errors.Wrapf(ErrFollowLink, "no mounts for device %q (%v)", - getDeviceName(deviceNumber), deviceNumber) + return nil, &ErrFollowLink{link, errors.Errorf("no mounts for device %q (%v)", + getDeviceName(deviceNumber), deviceNumber)} } if mnt == nil { - return nil, filesystemLacksMainMountError(deviceNumber) + return nil, &ErrFollowLink{link, filesystemLacksMainMountError(deviceNumber)} } return mnt, nil } @@ -450,12 +450,12 @@ func getMountFromLink(link string) (*Mount, error) { // error is returned if the mount has no device, or no UUID. func makeLink(mnt *Mount, token string) (string, error) { if token != uuidToken { - return "", errors.Wrapf(ErrMakeLink, "token type %q not supported", token) + return "", &ErrMakeLink{mnt, errors.Errorf("token type %q not supported", token)} } dirContents, err := ioutil.ReadDir(uuidDirectory) if err != nil { - return "", errors.Wrap(ErrMakeLink, err.Error()) + return "", &ErrMakeLink{mnt, err} } for _, fileInfo := range dirContents { if fileInfo.Mode()&os.ModeSymlink == 0 { @@ -471,6 +471,6 @@ func makeLink(mnt *Mount, token string) (string, error) { return fmt.Sprintf("%s=%s", uuidToken, uuid), nil } } - return "", errors.Wrapf(ErrMakeLink, "device %q (%v) has no UUID", - mnt.Device, mnt.DeviceNumber) + return "", &ErrMakeLink{mnt, errors.Errorf("cannot determine UUID of device %q (%v)", + mnt.Device, mnt.DeviceNumber)} } |