summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjörn Baumbach <bb@sernet.de>2014-03-27 11:17:30 +0100
committerJeremy Allison <jra@samba.org>2014-04-05 03:09:00 +0200
commitc35b31f45244a8339684c3b83a7d86eefb80e0da (patch)
treeedc56d90b399b109279023e8a3f0e34a565f2a82
parent69b7631ca712046eab2bf4d8dae666718c46cb82 (diff)
downloadsamba-c35b31f45244a8339684c3b83a7d86eefb80e0da.tar.gz
samba-c35b31f45244a8339684c3b83a7d86eefb80e0da.tar.xz
samba-c35b31f45244a8339684c3b83a7d86eefb80e0da.zip
s3: enforce a positive allocation_file_size for non-empty files
Some file systems do not allocate a block for very small files. But for non-empty file should report a positive size. Pair-Programmed-With: Michael Adam <obnox@samba.org> Signed-off-by: Björn Baumbach <bb@sernet.de> Reviewed-by: Jeremy Allison <jra@samba.org> Autobuild-User(master): Jeremy Allison <jra@samba.org> Autobuild-Date(master): Sat Apr 5 03:09:00 CEST 2014 on sn-devel-104
-rw-r--r--source3/modules/vfs_default.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c
index 673ebfe35b..a129d81d43 100644
--- a/source3/modules/vfs_default.c
+++ b/source3/modules/vfs_default.c
@@ -1538,6 +1538,18 @@ static uint64_t vfswrap_get_alloc_size(vfs_handle_struct *handle,
#else
#error SIZEOF_BLKCNT_T_NOT_A_SUPPORTED_VALUE
#endif
+ if (result == 0) {
+ /*
+ * Some file systems do not allocate a block for very
+ * small files. But for non-empty file should report a
+ * positive size.
+ */
+
+ uint64_t filesize = get_file_size_stat(sbuf);
+ if (filesize > 0) {
+ result = MIN((uint64_t)STAT_ST_BLOCKSIZE, filesize);
+ }
+ }
#else
result = get_file_size_stat(sbuf);
#endif