From: Eric Dumazet <dada1@cosmosbay.com>
To: Andrew Morton <akpm@osdl.org>, linux-kernel@vger.kernel.org
Subject: [PATCH] removes filp_count_lock and changes nr_files type to atomic_t
Date: Thu, 25 Aug 2005 10:45:12 +0200 [thread overview]
Message-ID: <430D8518.8020502@cosmosbay.com> (raw)
In-Reply-To: <1124956563.3222.8.camel@laptopd505.fenrus.org>
[-- Attachment #1: Type: text/plain, Size: 350 bytes --]
This patch removes filp_count_lock spinlock, used to protect files_stat.nr_files.
Just use atomic_t type and atomic_inc()/atomic_dec() operations.
This patch assumes that atomic_read() is a plain {return v->counter;} on all
architectures. (keywords : sysctl, /proc/sys/fs/file-nr, proc_dointvec)
Signed-off-by: Eric Dumazet <dada1@cosmosbay.com>
[-- Attachment #2: patch_filp_count_lock --]
[-- Type: text/plain, Size: 3005 bytes --]
diff -Nru linux-2.6.13-rc7/fs/file_table.c linux-2.6.13-rc7-ed/fs/file_table.c
--- linux-2.6.13-rc7/fs/file_table.c 2005-08-24 05:39:14.000000000 +0200
+++ linux-2.6.13-rc7-ed/fs/file_table.c 2005-08-25 10:41:00.000000000 +0200
@@ -28,29 +28,21 @@
/* public. Not pretty! */
__cacheline_aligned_in_smp DEFINE_SPINLOCK(files_lock);
-static DEFINE_SPINLOCK(filp_count_lock);
/* slab constructors and destructors are called from arbitrary
- * context and must be fully threaded - use a local spinlock
- * to protect files_stat.nr_files
+ * context and must be fully threaded
*/
void filp_ctor(void * objp, struct kmem_cache_s *cachep, unsigned long cflags)
{
if ((cflags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) ==
SLAB_CTOR_CONSTRUCTOR) {
- unsigned long flags;
- spin_lock_irqsave(&filp_count_lock, flags);
- files_stat.nr_files++;
- spin_unlock_irqrestore(&filp_count_lock, flags);
+ atomic_inc(&files_stat.nr_files);
}
}
void filp_dtor(void * objp, struct kmem_cache_s *cachep, unsigned long dflags)
{
- unsigned long flags;
- spin_lock_irqsave(&filp_count_lock, flags);
- files_stat.nr_files--;
- spin_unlock_irqrestore(&filp_count_lock, flags);
+ atomic_dec(&files_stat.nr_files);
}
static inline void file_free(struct file *f)
@@ -70,7 +62,7 @@
/*
* Privileged users can go above max_files
*/
- if (files_stat.nr_files >= files_stat.max_files &&
+ if (atomic_read(&files_stat.nr_files) >= files_stat.max_files &&
!capable(CAP_SYS_ADMIN))
goto over;
@@ -94,10 +86,10 @@
over:
/* Ran out of filps - report that */
- if (files_stat.nr_files > old_max) {
+ if (atomic_read(&files_stat.nr_files) > old_max) {
printk(KERN_INFO "VFS: file-max limit %d reached\n",
files_stat.max_files);
- old_max = files_stat.nr_files;
+ old_max = atomic_read(&files_stat.nr_files);
}
goto fail;
diff -Nru linux-2.6.13-rc7/fs/xfs/linux-2.6/xfs_linux.h linux-2.6.13-rc7-ed/fs/xfs/linux-2.6/xfs_linux.h
--- linux-2.6.13-rc7/fs/xfs/linux-2.6/xfs_linux.h 2005-08-24 05:39:14.000000000 +0200
+++ linux-2.6.13-rc7-ed/fs/xfs/linux-2.6/xfs_linux.h 2005-08-25 10:41:00.000000000 +0200
@@ -242,7 +242,7 @@
/* IRIX uses the current size of the name cache to guess a good value */
/* - this isn't the same but is a good enough starting point for now. */
-#define DQUOT_HASH_HEURISTIC files_stat.nr_files
+#define DQUOT_HASH_HEURISTIC atomic_read(&files_stat.nr_files)
/* IRIX inodes maintain the project ID also, zero this field on Linux */
#define DEFAULT_PROJID 0
diff -Nru linux-2.6.13-rc7/include/linux/fs.h linux-2.6.13-rc7-ed/include/linux/fs.h
--- linux-2.6.13-rc7/include/linux/fs.h 2005-08-24 05:39:14.000000000 +0200
+++ linux-2.6.13-rc7-ed/include/linux/fs.h 2005-08-25 10:41:00.000000000 +0200
@@ -30,7 +30,7 @@
/* And dynamically-tunable limits and defaults: */
struct files_stat_struct {
- int nr_files; /* read only */
+ atomic_t nr_files; /* read only */
int nr_free_files; /* read only */
int max_files; /* tunable */
};
next prev parent reply other threads:[~2005-08-25 8:45 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-08-24 21:46 [patch] Additions to .data.read_mostly section Ravikiran G Thirumalai
2005-08-24 22:38 ` Eric Dumazet
2005-08-25 7:56 ` Arjan van de Ven
2005-08-25 8:45 ` Eric Dumazet [this message]
2005-08-25 9:05 ` [PATCH] removes filp_count_lock and changes nr_files type to atomic_t Arjan van de Ven
2005-08-25 9:20 ` Eric Dumazet
2005-08-25 9:31 ` Arjan van de Ven
2005-08-25 9:08 ` Christoph Hellwig
2005-08-25 9:17 ` Eric Dumazet
2005-08-25 9:23 ` Christoph Hellwig
2005-08-25 10:41 ` Eric Dumazet
2005-08-25 11:11 ` Nick Piggin
2005-08-25 12:26 ` Eric Dumazet
2005-08-25 14:51 ` Nick Piggin
2005-08-25 14:56 ` Christoph Hellwig
2005-08-25 15:13 ` Eric Dumazet
2005-08-25 18:19 ` Dipankar Sarma
2005-08-25 18:36 ` Christoph Hellwig
2005-08-26 1:16 ` Nick Piggin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=430D8518.8020502@cosmosbay.com \
--to=dada1@cosmosbay.com \
--cc=akpm@osdl.org \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.