Re: [PATCH] btrfs: return EPERM in btrfs_rm_device()

2013-03-02 Thread Ilya Dryomov
On Sat, Mar 02, 2013 at 12:13:59AM -0700, Jerry Snitselaar wrote:
 Currently there are error paths in btrfs_rm_device() where EINVAL is
 returned telling the user they passed an invalid argument even though
 they passed a valid device. Change to return EPERM instead as the
 operation is not permitted.
 
 Signed-off-by: Jerry Snitselaar jerry.snitsel...@oracle.com
 ---
  fs/btrfs/volumes.c | 8 
  1 file changed, 4 insertions(+), 4 deletions(-)
 
 diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
 index 5cbb7f4..3e1586c 100644
 --- a/fs/btrfs/volumes.c
 +++ b/fs/btrfs/volumes.c
 @@ -1392,14 +1392,14 @@ int btrfs_rm_device(struct btrfs_root *root, char 
 *device_path)
   if ((all_avail  BTRFS_BLOCK_GROUP_RAID10)  num_devices = 4) {
   printk(KERN_ERR btrfs: unable to go below four devices 
  on raid10\n);
 - ret = -EINVAL;
 + ret = -EPERM;
   goto out;
   }
  
   if ((all_avail  BTRFS_BLOCK_GROUP_RAID1)  num_devices = 2) {
   printk(KERN_ERR btrfs: unable to go below two 
  devices on raid1\n);
 - ret = -EINVAL;
 + ret = -EPERM;
   goto out;
   }
  
 @@ -1449,14 +1449,14 @@ int btrfs_rm_device(struct btrfs_root *root, char 
 *device_path)
  
   if (device-is_tgtdev_for_dev_replace) {
   pr_err(btrfs: unable to remove the dev_replace target dev\n);
 - ret = -EINVAL;
 + ret = -EPERM;
   goto error_brelse;
   }
  
   if (device-writeable  root-fs_info-fs_devices-rw_devices == 1) {
   printk(KERN_ERR btrfs: unable to remove the only writeable 
  device\n);
 - ret = -EINVAL;
 + ret = -EPERM;

I don't think returning EPERM in these cases is any better than EINVAL.
FWIW, many other btrfs ioctls, especially balance, suffer from this as
well.  What we really need is some kind of error message delivery
system, but that's not going to happen any time soon...

Thanks,

Ilya
--
To unsubscribe from this list: send the line unsubscribe linux-btrfs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] btrfs: return EPERM in btrfs_rm_device()

2013-03-01 Thread Jerry Snitselaar
Currently there are error paths in btrfs_rm_device() where EINVAL is
returned telling the user they passed an invalid argument even though
they passed a valid device. Change to return EPERM instead as the
operation is not permitted.

Signed-off-by: Jerry Snitselaar jerry.snitsel...@oracle.com
---
 fs/btrfs/volumes.c | 8 
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c
index 5cbb7f4..3e1586c 100644
--- a/fs/btrfs/volumes.c
+++ b/fs/btrfs/volumes.c
@@ -1392,14 +1392,14 @@ int btrfs_rm_device(struct btrfs_root *root, char 
*device_path)
if ((all_avail  BTRFS_BLOCK_GROUP_RAID10)  num_devices = 4) {
printk(KERN_ERR btrfs: unable to go below four devices 
   on raid10\n);
-   ret = -EINVAL;
+   ret = -EPERM;
goto out;
}
 
if ((all_avail  BTRFS_BLOCK_GROUP_RAID1)  num_devices = 2) {
printk(KERN_ERR btrfs: unable to go below two 
   devices on raid1\n);
-   ret = -EINVAL;
+   ret = -EPERM;
goto out;
}
 
@@ -1449,14 +1449,14 @@ int btrfs_rm_device(struct btrfs_root *root, char 
*device_path)
 
if (device-is_tgtdev_for_dev_replace) {
pr_err(btrfs: unable to remove the dev_replace target dev\n);
-   ret = -EINVAL;
+   ret = -EPERM;
goto error_brelse;
}
 
if (device-writeable  root-fs_info-fs_devices-rw_devices == 1) {
printk(KERN_ERR btrfs: unable to remove the only writeable 
   device\n);
-   ret = -EINVAL;
+   ret = -EPERM;
goto error_brelse;
}
 
-- 
1.8.2.rc1

--
To unsubscribe from this list: send the line unsubscribe linux-btrfs in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html