summaryrefslogtreecommitdiffstats
path: root/source3/modules
diff options
context:
space:
mode:
authorAndreas Schneider <asn@samba.org>2013-11-08 15:41:18 +0100
committerDavid Disseldorp <ddiss@samba.org>2013-11-12 17:33:12 +0100
commit654b784e9c9c3563afd1af853f4795117c258e56 (patch)
tree553188734265e45a6bb96cb5a07b0b5cad00b48a /source3/modules
parent2405e7906c41a2cd08f7e643dfc83b6380cadcf4 (diff)
downloadsamba-654b784e9c9c3563afd1af853f4795117c258e56.tar.gz
samba-654b784e9c9c3563afd1af853f4795117c258e56.tar.xz
samba-654b784e9c9c3563afd1af853f4795117c258e56.zip
s3-vfs: Fix stream_depot vfs module on btrfs.
Checking if the directory is empty using 'nlink == 2' only checks if there are no subdirectories. It doesn't indicate if there are files in the directory. However checking link count for no subdirectories is wrong and applications shouldn't rely on it, see: https://lkml.org/lkml/2012/2/1/756 Signed-off-by: Andreas Schneider <asn@samba.org> Reviewed-by: David Disseldorp <ddiss@samba.org>
Diffstat (limited to 'source3/modules')
-rw-r--r--source3/modules/vfs_streams_depot.c10
1 files changed, 4 insertions, 6 deletions
diff --git a/source3/modules/vfs_streams_depot.c b/source3/modules/vfs_streams_depot.c
index 3ada92eeb5..ae1af24684 100644
--- a/source3/modules/vfs_streams_depot.c
+++ b/source3/modules/vfs_streams_depot.c
@@ -646,7 +646,8 @@ static int streams_depot_unlink(vfs_handle_struct *handle,
return -1;
}
- if (smb_fname_base->st.st_ex_nlink == 1) {
+ ret = SMB_VFS_NEXT_UNLINK(handle, smb_fname);
+ if (ret == 0) {
char *dirname = stream_dir(handle, smb_fname_base,
&smb_fname_base->st, false);
@@ -656,8 +657,6 @@ static int streams_depot_unlink(vfs_handle_struct *handle,
TALLOC_FREE(dirname);
}
- ret = SMB_VFS_NEXT_UNLINK(handle, smb_fname);
-
TALLOC_FREE(smb_fname_base);
return ret;
}
@@ -690,7 +689,8 @@ static int streams_depot_rmdir(vfs_handle_struct *handle, const char *path)
return -1;
}
- if (smb_fname_base->st.st_ex_nlink == 2) {
+ ret = SMB_VFS_NEXT_RMDIR(handle, path);
+ if (ret == 0) {
char *dirname = stream_dir(handle, smb_fname_base,
&smb_fname_base->st, false);
@@ -700,8 +700,6 @@ static int streams_depot_rmdir(vfs_handle_struct *handle, const char *path)
TALLOC_FREE(dirname);
}
- ret = SMB_VFS_NEXT_RMDIR(handle, path);
-
TALLOC_FREE(smb_fname_base);
return ret;
}