ENOTEMPTY on "rm -rf" for snapshot and subvolume
Hi Everyone,
Recently i created a snapshot of an existing volume which had some
amount of data.
Now that after creating the snapshot i have tried deleting the
same snapshot. But i am
getting ENOTEMPTY for "rmdir". But when i see the actual files
inside are deleted
not the parent directory.
From the code it looks like
if (inode->i_size > BTRFS_EMPTY_DIR_SIZE ||
inode->i_ino == BTRFS_FIRST_FREE_OBJECTID)
return -ENOTEMPTY;
Why would "unlink" succeeds for the files inside the directory?,
yet returning ENOTEMPTY
This looks odd after this, i went ahead and tried deleting the
the existing volume itself
same result.
So i was wondering if at all this is supposed to work this way, do
i need to use "btrfs"
commands to delete subvolumes always? and their relative snapshots?.
But either in that case too returning ENOTEMPTY does confuse a
user a lot. Isn't it valid
just by returning EPERM will explain a lot to users saying that
this is a snapshot of a
subvolume or a parent subvolume which is not supposed to be
deleted this way.
Regards
Signature · 2 lines
Harshavardhana http://www.gluster.com
Quoted 10 lines · Harshavardhana
Hi Everyone,
Recently i created a snapshot of an existing volume which had
some amount of data.
Now that after creating the snapshot i have tried deleting the
same snapshot. But i am
getting ENOTEMPTY for "rmdir". But when i see the actual files
inside are deleted
not the parent directory.
Quoted 8 lines
From the code it looks like
if (
inode->i_size>BTRFS_EMPTY_DIR_SIZE||
inode->i_ino==BTRFS_FIRST_FREE_OBJECTID)
return-ENOTEMPTY;Why would "unlink" succeeds for the files inside the
directory?, yet returning ENOTEMPTY
You need to use the snapshot deletion ioctl to actually delete the snapshot.
Quoted 8 lines
This looks odd after this, i went ahead and tried deleting the
the existing volume itself
same result.So i was wondering if at all this is supposed to work this way,
do i need to use "btrfs"
commands to delete subvolumes always? and their relative snapshots?.
Yes. We could add support for doing this inside rm, it isn't a huge amount of code.
Quoted 7 lines
But either in that case too returning ENOTEMPTY does confuse a
user a lot. Isn't it valid
just by returning EPERM will explain a lot to users saying that
this is a snapshot of a
subvolume or a parent subvolume which is not supposed to be
deleted this way.
Good point, eperm might be more intuitive.
-chris
Quoted 11 lines · Chris Mason
Quoted 7 lines
Quoted 6 lines
But either in that case too returning ENOTEMPTY does confuse a
user a lot. Isn't it valid
just by returning EPERM will explain a lot to users saying that
this is a snapshot of a
subvolume or a parent subvolume which is not supposed to be
deleted this way.Good point, eperm might be more intuitive.
-chris
Thanks a lot for the inputs sent a patch for that.
Regards
Signature · 2 lines
Harshavardhana http://www.gluster.com