[pacman-dev] [PATCH] Add a cushion for diskspace checking

Dan McGee dan at archlinux.org
Wed Dec 15 01:15:14 EST 2010


It is the minimum of 5% of disk capacity or 20 MiB on a per-partition basis.

Signed-off-by: Dan McGee <dan at archlinux.org>
---
 lib/libalpm/diskspace.c |   11 ++++++++---
 1 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/lib/libalpm/diskspace.c b/lib/libalpm/diskspace.c
index 5ed8e0b..bf5d389 100644
--- a/lib/libalpm/diskspace.c
+++ b/lib/libalpm/diskspace.c
@@ -294,10 +294,15 @@ int _alpm_check_diskspace(pmtrans_t *trans, pmdb_t *db_local)
 	for(i = mount_points; i; i = alpm_list_next(i)) {
 		alpm_mountpoint_t *data = i->data;
 		if(data->used == 1) {
-			_alpm_log(PM_LOG_DEBUG, "partition %s, needed %ld, free %ld\n",
-					data->mount_dir, data->max_blocks_needed,
+			/* cushion is min(5% capacity, 20MiB) */
+			long fivepc = data->fsp.f_blocks / 20;
+			long twentymb = 20 * 1024 * 1024 / data->fsp.f_bsize;
+			long cushion = fivepc < twentymb ? fivepc : twentymb;
+
+			_alpm_log(PM_LOG_DEBUG, "partition %s, needed %ld, cushion %ld, free %ld\n",
+					data->mount_dir, data->max_blocks_needed, cushion,
 					(unsigned long)data->fsp.f_bfree);
-			if(data->max_blocks_needed > data->fsp.f_bfree) {
+			if(data->max_blocks_needed + cushion > data->fsp.f_bfree) {
 				abort = 1;
 			}
 		}
-- 
1.7.3.3



More information about the pacman-dev mailing list