From ab9c0814d291db840f60073b4e63d58f932e5e64 Mon Sep 17 00:00:00 2001 From: Dan McGee Date: Wed, 15 Dec 2010 00:14:25 -0600 Subject: Add a cushion for diskspace checking It is the minimum of 5% of disk capacity or 20 MiB on a per-partition basis. Signed-off-by: Dan McGee --- lib/libalpm/diskspace.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'lib/libalpm/diskspace.c') diff --git a/lib/libalpm/diskspace.c b/lib/libalpm/diskspace.c index 5ed8e0be..97f28ab2 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 roughly min(5% capacity, 20MiB) */ + long fivepc = (data->fsp.f_blocks / 20) + 1; + long twentymb = (20 * 1024 * 1024 / data->fsp.f_bsize) + 1; + 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; } } -- cgit v1.2.3-24-g4f1b