mirror of
https://github.com/torvalds/linux.git
synced 2026-10-13 22:01:02 +02:00
ksmbd: don't check directory emptiness when deleting a stream
set_file_disposition_info() checks S_ISDIR(inode->i_mode) && ksmbd_vfs_empty_dir(fp) == -ENOTEMPTY to refuse deleting a non-empty directory. A stream handle's fp->filp refers to the same underlying inode as its base file or directory (streams are xattr-backed on that same inode), so this check also fires when the target is actually a stream attached to a directory, not the directory itself -- deleting the stream then incorrectly fails with -EBUSY whenever the directory happens to be non-empty, even though removing an xattr has nothing to do with the directory's contents. Skip the directory-emptiness check for stream handles, matching how ksmbd_stream_fd() is already used elsewhere in this function. Assisted-by: Claude:claude-sonnet-5 Signed-off-by: Gael Blivet <gael.blivet@gmail.com> Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
This commit is contained in:
parent
439a472cb4
commit
86f9018030
|
|
@ -7253,7 +7253,7 @@ static int set_file_disposition_info(struct ksmbd_work *work,
|
|||
if (ksmbd_has_stream_without_delete_share(fp))
|
||||
return -ESHARE;
|
||||
|
||||
if (S_ISDIR(inode->i_mode) &&
|
||||
if (S_ISDIR(inode->i_mode) && !ksmbd_stream_fd(fp) &&
|
||||
ksmbd_vfs_empty_dir(fp) == -ENOTEMPTY)
|
||||
return -EBUSY;
|
||||
smb_break_all_levII_oplock_for_delete(work, fp);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user