--- /dev/null
+commit beabec486f7ad680c70292384049eb45c5ac081d
+Author: Alexander V. Lukyanov <lavv17f@gmail.com>
+Date: Fri Nov 14 20:42:32 2014 +0300
+
+ du: round file sizes up to block size
+
+diff --git a/src/FindJobDu.cc b/src/FindJobDu.cc
+index 822baed..e2e19df 100644
+--- a/src/FindJobDu.cc
++++ b/src/FindJobDu.cc
+@@ -107,6 +107,13 @@ const char *FinderJob_Du::MakeFileName(const char *n)
+ return size_stack.count()>0 ? dir_file(size_stack.last()->dir,n) : n;
+ }
+
++off_t FinderJob_Du::BlockCeil(off_t size) const
++{
++ size+=output_block_size-1;
++ size-=size%output_block_size;
++ return size;
++}
++
+ FinderJob::prf_res FinderJob_Du::ProcessFile(const char *d,const FileInfo *fi)
+ {
+ if(buf->Broken())
+@@ -127,7 +134,7 @@ FinderJob::prf_res FinderJob_Du::ProcessFile(const char *d,const FileInfo *fi)
+ return PRF_OK; /* can't count this one */
+
+ /* add this file to the current dir */
+- long long add = fi->size;
++ long long add = BlockCeil(fi->size);
+ if (file_count)
+ add = 1;
+ if(size_stack.count()>0)
+@@ -137,7 +144,7 @@ FinderJob::prf_res FinderJob_Du::ProcessFile(const char *d,const FileInfo *fi)
+ if(all_files || stack_ptr == -1) {
+ /* this is <, where Pop() is <=, since the file counts in depth */
+ if(max_print_depth == -1 || stack_ptr < max_print_depth)
+- print_size(fi->size, MakeFileName(fi->name));
++ print_size(BlockCeil(fi->size), MakeFileName(fi->name));
+ }
+
+ return PRF_OK;
+@@ -172,7 +179,7 @@ void FinderJob_Du::print_size (long long n_blocks, const char *string)
+ /* We get blocks in bytes, since we don't know the remote system's
+ * block size. */
+ buf->Format("%s\t%s\n",
+- human_readable (n_blocks, buffer, human_opts, 1, output_block_size),
++ human_readable (n_blocks, buffer, human_opts, 1, human_opts?1:output_block_size),
+ string);
+ }
+
+diff --git a/src/FindJobDu.h b/src/FindJobDu.h
+index 9dfbc33..820d79f 100644
+--- a/src/FindJobDu.h
++++ b/src/FindJobDu.h
+@@ -51,6 +51,7 @@ class FinderJob_Du : public FinderJob
+ Ref<ArgV> args;
+
+ void print_size (long long n_blocks, const char *string);
++ off_t BlockCeil(off_t size) const;
+
+ // prepends last directory name
+ const char *MakeFileName(const char *n);
+diff --git a/src/commands.cc b/src/commands.cc
+index b14b71b..20e908f 100644
+--- a/src/commands.cc
++++ b/src/commands.cc
+@@ -2983,6 +2983,7 @@ CMD(du)
+ break;
+ case 'b':
+ blocksize = 1;
++ human_opts = 0;
+ break;
+ case 'c':
+ print_totals=true;
+@@ -3000,18 +3001,18 @@ CMD(du)
+ file_count=true;
+ break;
+ case 'h':
+- blocksize=1;
+- human_opts|=human_autoscale|human_SI|human_base_1024;
++ human_opts |= human_autoscale|human_SI|human_base_1024;
+ break;
+ case 'H':
+- blocksize=1;
+ human_opts |= human_autoscale|human_SI;
+ break;
+ case 'k': /* the default; here for completeness */
+ blocksize = 1024;
++ human_opts = 0;
+ break;
+ case 'm':
+ blocksize = 1024*1024;
++ human_opts = 0;
+ break;
+ case 's':
+ summarize_only = true;