s3: enforce a positive allocation_file_size for non-empty files (bug #10543)
authorBjörn Baumbach <bb@sernet.de>
Thu, 27 Mar 2014 10:17:30 +0000 (11:17 +0100)
committerKarolin Seeger <kseeger@samba.org>
Tue, 2 Sep 2014 18:39:19 +0000 (20:39 +0200)
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

(cherry picked from commit c35b31f45244a8339684c3b83a7d86eefb80e0da)

source3/modules/vfs_default.c

index 67050fa8aceda2c1b2331aa24f57f7c5c288e174..b31f4be0c47057db74995a3cf3044567cf390f25 100644 (file)
@@ -1355,6 +1355,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