Message ID | 20240904043635.782603-1-hobin.woo@samsung.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2] ksmbd: make __dir_empty() compatible with POSIX | expand |
On Wed, Sep 4, 2024 at 1:36 PM Hobin Woo <hobin.woo@samsung.com> wrote: > > Some file systems may not provide dot (.) and dot-dot (..) as they are > optional in POSIX. ksmbd can misjudge emptiness of a directory in those > file systems, since it assumes there are always at least two entries: > dot and dot-dot. > Just don't count dot and dot-dot. > > Signed-off-by: Hobin Woo <hobin.woo@samsung.com> Applied it to #ksmbd-for-next-next. Thanks for your patch!
diff --git a/fs/smb/server/vfs.c b/fs/smb/server/vfs.c index 9e859ba010cf..62de668cd1e1 100644 --- a/fs/smb/server/vfs.c +++ b/fs/smb/server/vfs.c @@ -1115,9 +1115,10 @@ static bool __dir_empty(struct dir_context *ctx, const char *name, int namlen, struct ksmbd_readdir_data *buf; buf = container_of(ctx, struct ksmbd_readdir_data, ctx); - buf->dirent_count++; + if (!is_dot_dotdot(name, namlen)) + buf->dirent_count++; - return buf->dirent_count <= 2; + return !buf->dirent_count; } /** @@ -1137,7 +1138,7 @@ int ksmbd_vfs_empty_dir(struct ksmbd_file *fp) readdir_data.dirent_count = 0; err = iterate_dir(fp->filp, &readdir_data.ctx); - if (readdir_data.dirent_count > 2) + if (readdir_data.dirent_count) err = -ENOTEMPTY; else err = 0;
Some file systems may not provide dot (.) and dot-dot (..) as they are optional in POSIX. ksmbd can misjudge emptiness of a directory in those file systems, since it assumes there are always at least two entries: dot and dot-dot. Just don't count dot and dot-dot. Signed-off-by: Hobin Woo <hobin.woo@samsung.com> --- v2: - Just don't count dot and dot-dot. fs/smb/server/vfs.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)