Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit af4d2ecb authored by Kirill Korotaev's avatar Kirill Korotaev Committed by Linus Torvalds
Browse files

[PATCH] Fix of bogus file max limit messages



This patch fixes incorrect and bogus kernel messages that file-max limit
reached when the allocation fails

Signed-Off-By: default avatarKirill Korotaev <dev@sw.ru>
Signed-Off-By: default avatarDenis Lunev <den@sw.ru>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent c663e5d8
Loading
Loading
Loading
Loading
+30 −27
Original line number Diff line number Diff line
@@ -69,15 +69,18 @@ static int old_max;
	/*
	 * Privileged users can go above max_files
	 */
	if (files_stat.nr_files < files_stat.max_files ||
				capable(CAP_SYS_ADMIN)) {
	if (files_stat.nr_files >= files_stat.max_files &&
				!capable(CAP_SYS_ADMIN))
		goto over;

	f = kmem_cache_alloc(filp_cachep, GFP_KERNEL);
		if (f) {
			memset(f, 0, sizeof(*f));
			if (security_file_alloc(f)) {
				file_free(f);
	if (f == NULL)
		goto fail;
			}

	memset(f, 0, sizeof(*f));
	if (security_file_alloc(f))
		goto fail_sec;

	eventpoll_init_file(f);
	atomic_set(&f->f_count, 1);
	f->f_uid = current->fsuid;
@@ -87,18 +90,18 @@ static int old_max;
	INIT_LIST_HEAD(&f->f_list);
	f->f_maxcount = INT_MAX;
	return f;
		}
	}

over:
	/* Ran out of filps - report that */
	if (files_stat.max_files >= old_max) {
	if (files_stat.nr_files > old_max) {
		printk(KERN_INFO "VFS: file-max limit %d reached\n",
					files_stat.max_files);
		old_max = files_stat.max_files;
	} else {
		/* Big problems... */
		printk(KERN_WARNING "VFS: filp allocation failed\n");
		old_max = files_stat.nr_files;
	}
	goto fail;

fail_sec:
	file_free(f);
fail:
	return NULL;
}