summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Schneider <asn@samba.org>2015-07-17 09:35:11 +0200
committerKarolin Seeger <kseeger@samba.org>2015-07-21 16:52:09 +0200
commit28ee83dbf46888b1f68693f6a7ca778a8b382df4 (patch)
treec665b94b1366d2d7c65ea801fb39665273eba637
parentd7d60d837e236f2dfee873158e5df6640e17136d (diff)
downloadsamba-28ee83dbf46888b1f68693f6a7ca778a8b382df4.tar.gz
s3-smbd: Leave sys_disk_free() if dfree command is used
If we have a broken system which reports incorrect sizes we provide the 'dfree command'. This command makes sure Samba gets the correct values. However after that we call the quota command which then reports the broken values. The dfree command should take care to provide the correct values and in case of quota's it should also calculate the quote correctly. BUG: https://bugzilla.samba.org/show_bug.cgi?id=11403 Pair-Programmed-With: Michael Adam <obnox@samba.org> Signed-off-by: Andreas Schneider <asn@samba.org> Signed-off-by: Michael Adam <obnox@samba.org> Reviewed-by: Ralph Boehme <slow@samba.org> (cherry picked from commit 48a4d5a4078ff2a66dd753323d6e5d76d34b9828)
-rw-r--r--source3/smbd/dfree.c29
1 files changed, 13 insertions, 16 deletions
diff --git a/source3/smbd/dfree.c b/source3/smbd/dfree.c
index e6a0af21859..1e5aba63d03 100644
--- a/source3/smbd/dfree.c
+++ b/source3/smbd/dfree.c
@@ -98,7 +98,7 @@ uint64_t sys_disk_free(connection_struct *conn, const char *path, bool small_que
DEBUG (3, ("disk_free: Running command '%s'\n", syscmd));
lines = file_lines_pload(syscmd, NULL);
- if (lines) {
+ if (lines != NULL) {
char *line = lines[0];
DEBUG (3, ("Read input from dfree, \"%s\"\n", line));
@@ -122,22 +122,18 @@ uint64_t sys_disk_free(connection_struct *conn, const char *path, bool small_que
*dsize = 2048;
if (!*dfree)
*dfree = 1024;
- } else {
- DEBUG (0, ("disk_free: file_lines_load() failed for "
- "command '%s'. Error was : %s\n",
- syscmd, strerror(errno) ));
- if (sys_fsusage(path, dfree, dsize) != 0) {
- DEBUG (0, ("disk_free: sys_fsusage() failed. Error was : %s\n",
- strerror(errno) ));
- return (uint64_t)-1;
- }
- }
- } else {
- if (sys_fsusage(path, dfree, dsize) != 0) {
- DEBUG (0, ("disk_free: sys_fsusage() failed. Error was : %s\n",
- strerror(errno) ));
- return (uint64_t)-1;
+
+ goto dfree_done;
}
+ DEBUG (0, ("disk_free: file_lines_load() failed for "
+ "command '%s'. Error was : %s\n",
+ syscmd, strerror(errno) ));
+ }
+
+ if (sys_fsusage(path, dfree, dsize) != 0) {
+ DEBUG (0, ("disk_free: sys_fsusage() failed. Error was : %s\n",
+ strerror(errno) ));
+ return (uint64_t)-1;
}
if (disk_quotas(path, &bsize_q, &dfree_q, &dsize_q)) {
@@ -161,6 +157,7 @@ uint64_t sys_disk_free(connection_struct *conn, const char *path, bool small_que
*dfree = MAX(1,*dfree);
}
+dfree_done:
disk_norm(small_query,bsize,dfree,dsize);
if ((*bsize) < 1024) {