summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
authorRalph Boehme <slow@samba.org>2020-12-11 12:59:28 +0100
committerJeremy Allison <jra@samba.org>2021-01-08 21:38:18 +0000
commit564b62a6f7c0a9b9712946d723118122b9c3785f (patch)
treebbc6e7ee68749c880b8445ed24721837c4ab55ad /source3
parentc5da08422990dfc1e082bc01aa10d6e415eebe3f (diff)
downloadsamba-564b62a6f7c0a9b9712946d723118122b9c3785f.tar.gz
vfs_fruit: fix close for fake_fd
If the next backend doesn't use kernel fd's should not pass a fake_fd to the next backend. BUG: https://bugzilla.samba.org/show_bug.cgi?id=14596 Signed-off-by: Ralph Boehme <slow@samba.org> Reviewed-by: Stefan Metzmacher <metze@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org> Autobuild-User(master): Jeremy Allison <jra@samba.org> Autobuild-Date(master): Fri Jan 8 21:38:18 UTC 2021 on sn-devel-184
Diffstat (limited to 'source3')
-rw-r--r--source3/modules/vfs_fruit.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/source3/modules/vfs_fruit.c b/source3/modules/vfs_fruit.c
index 26f0a9e22d5..ecacaf5fc41 100644
--- a/source3/modules/vfs_fruit.c
+++ b/source3/modules/vfs_fruit.c
@@ -1661,6 +1661,7 @@ static int fruit_openat(vfs_handle_struct *handle,
static int fruit_close_meta(vfs_handle_struct *handle,
files_struct *fsp)
{
+ struct fio *fio = (struct fio *)VFS_FETCH_FSP_EXTENSION(handle, fsp);
int ret;
struct fruit_config_data *config = NULL;
@@ -1669,7 +1670,12 @@ static int fruit_close_meta(vfs_handle_struct *handle,
switch (config->meta) {
case FRUIT_META_STREAM:
- ret = SMB_VFS_NEXT_CLOSE(handle, fsp);
+ if (fio->fake_fd) {
+ ret = vfs_fake_fd_close(fsp_get_pathref_fd(fsp));
+ fsp_set_fd(fsp, -1);
+ } else {
+ ret = SMB_VFS_NEXT_CLOSE(handle, fsp);
+ }
break;
case FRUIT_META_NETATALK:
@@ -2465,9 +2471,9 @@ static ssize_t fruit_pwrite_meta_stream(vfs_handle_struct *handle,
}
if (fio->fake_fd) {
- int fd;
+ int fd = fsp_get_pathref_fd(fsp);
- ret = SMB_VFS_NEXT_CLOSE(handle, fsp);
+ ret = vfs_fake_fd_close(fd);
fsp_set_fd(fsp, -1);
if (ret != 0) {
DBG_ERR("Close [%s] failed: %s\n",