All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] remove extern inline from quotaops.h
@ 2002-11-04 21:13 Andreas Dilger
  2002-11-06 20:11 ` Denis Vlasenko
  0 siblings, 1 reply; 5+ messages in thread
From: Andreas Dilger @ 2002-11-04 21:13 UTC (permalink / raw)
  To: linux-kernel; +Cc: Marco van Wieringen

We are having a strange problem with compiling ext3 code out-of-tree,
and it is related to the fact that several functions in quotaops.h
are declared "extern __inline__" instead of "static inline".  Is
there a good reason to have it that way?  I thought "extern __inline__"
was sort of frowned upon.

Below is a patch to change this to "static inline".  A similar patch is
needed for 2.5, but the file has changed significantly...

Cheers, Andreas
=============================================================================
--- linux-2.4/include/linux/quotaops.h.orig	Wed Oct 30 17:10:48 2002
+++ linux-2.4/include/linux/quotaops.h	Mon Nov  4 13:53:05 2002
@@ -38,9 +38,9 @@
  */
 #define sb_any_quota_enabled(sb) ((sb)->s_dquot.flags & (DQUOT_USR_ENABLED | DQUOT_GRP_ENABLED))
 
-static __inline__ void DQUOT_INIT(struct inode *inode)
+static inline void DQUOT_INIT(struct inode *inode)
 {
- 	if (!inode->i_sb)
+	if (!inode->i_sb)
 		out_of_line_bug();
 	lock_kernel();
 	if (sb_any_quota_enabled(inode->i_sb) && !IS_NOQUOTA(inode))
@@ -48,18 +48,19 @@
 	unlock_kernel();
 }
 
-static __inline__ void DQUOT_DROP(struct inode *inode)
+static inline void DQUOT_DROP(struct inode *inode)
 {
 	lock_kernel();
 	if (IS_QUOTAINIT(inode)) {
 		if (!inode->i_sb)
 			out_of_line_bug();
-		inode->i_sb->dq_op->drop(inode);	/* Ops must be set when there's any quota... */
+		/* Ops must be set when there's any quota... */
+		inode->i_sb->dq_op->drop(inode);
 	}
 	unlock_kernel();
 }
 
-static __inline__ int DQUOT_PREALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t nr)
+static inline int DQUOT_PREALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t nr)
 {
 	lock_kernel();
 	if (sb_any_quota_enabled(inode->i_sb)) {
@@ -75,7 +76,7 @@
 	return 0;
 }
 
-static __inline__ int DQUOT_PREALLOC_SPACE(struct inode *inode, qsize_t nr)
+static inline int DQUOT_PREALLOC_SPACE(struct inode *inode, qsize_t nr)
 {
 	int ret;
 	if (!(ret = DQUOT_PREALLOC_SPACE_NODIRTY(inode, nr)))
@@ -83,7 +84,7 @@
 	return ret;
 }
 
-static __inline__ int DQUOT_ALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t nr)
+static inline int DQUOT_ALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t nr)
 {
 	lock_kernel();
 	if (sb_any_quota_enabled(inode->i_sb)) {
@@ -99,7 +100,7 @@
 	return 0;
 }
 
-static __inline__ int DQUOT_ALLOC_SPACE(struct inode *inode, qsize_t nr)
+static inline int DQUOT_ALLOC_SPACE(struct inode *inode, qsize_t nr)
 {
 	int ret;
 	if (!(ret = DQUOT_ALLOC_SPACE_NODIRTY(inode, nr)))
@@ -107,7 +108,7 @@
 	return ret;
 }
 
-static __inline__ int DQUOT_ALLOC_INODE(struct inode *inode)
+static inline int DQUOT_ALLOC_INODE(struct inode *inode)
 {
 	lock_kernel();
 	if (sb_any_quota_enabled(inode->i_sb)) {
@@ -121,7 +122,7 @@
 	return 0;
 }
 
-static __inline__ void DQUOT_FREE_SPACE_NODIRTY(struct inode *inode, qsize_t nr)
+static inline void DQUOT_FREE_SPACE_NODIRTY(struct inode *inode, qsize_t nr)
 {
 	lock_kernel();
 	if (sb_any_quota_enabled(inode->i_sb))
@@ -131,13 +132,13 @@
 	unlock_kernel();
 }
 
-static __inline__ void DQUOT_FREE_SPACE(struct inode *inode, qsize_t nr)
+static inline void DQUOT_FREE_SPACE(struct inode *inode, qsize_t nr)
 {
 	DQUOT_FREE_SPACE_NODIRTY(inode, nr);
 	mark_inode_dirty(inode);
 }
-	
-static __inline__ void DQUOT_FREE_INODE(struct inode *inode)
+
+static inline void DQUOT_FREE_INODE(struct inode *inode)
 {
 	lock_kernel();
 	if (sb_any_quota_enabled(inode->i_sb))
@@ -145,7 +146,7 @@
 	unlock_kernel();
 }
 
-static __inline__ int DQUOT_TRANSFER(struct inode *inode, struct iattr *iattr)
+static inline int DQUOT_TRANSFER(struct inode *inode, struct iattr *iattr)
 {
 	lock_kernel();
 	if (sb_any_quota_enabled(inode->i_sb) && !IS_NOQUOTA(inode)) {
@@ -174,7 +175,7 @@
 #define DQUOT_SYNC(dev)				do { } while(0)
 #define DQUOT_OFF(sb)				do { } while(0)
 #define DQUOT_TRANSFER(inode, iattr)		(0)
-extern __inline__ int DQUOT_PREALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t nr)
+static inline int DQUOT_PREALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t nr)
 {
 	lock_kernel();
 	inode_add_bytes(inode, nr);
@@ -182,14 +183,14 @@
 	return 0;
 }
 
-extern __inline__ int DQUOT_PREALLOC_SPACE(struct inode *inode, qsize_t nr)
+static inline int DQUOT_PREALLOC_SPACE(struct inode *inode, qsize_t nr)
 {
 	DQUOT_PREALLOC_SPACE_NODIRTY(inode, nr);
 	mark_inode_dirty(inode);
 	return 0;
 }
 
-extern __inline__ int DQUOT_ALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t nr)
+static inline int DQUOT_ALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t nr)
 {
 	lock_kernel();
 	inode_add_bytes(inode, nr);
@@ -197,21 +198,21 @@
 	return 0;
 }
 
-extern __inline__ int DQUOT_ALLOC_SPACE(struct inode *inode, qsize_t nr)
+static inline int DQUOT_ALLOC_SPACE(struct inode *inode, qsize_t nr)
 {
 	DQUOT_ALLOC_SPACE_NODIRTY(inode, nr);
 	mark_inode_dirty(inode);
 	return 0;
 }
 
-extern __inline__ void DQUOT_FREE_SPACE_NODIRTY(struct inode *inode, qsize_t nr)
+static inline void DQUOT_FREE_SPACE_NODIRTY(struct inode *inode, qsize_t nr)
 {
 	lock_kernel();
 	inode_sub_bytes(inode, nr);
 	unlock_kernel();
 }
 
-extern __inline__ void DQUOT_FREE_SPACE(struct inode *inode, qsize_t nr)
+static inline void DQUOT_FREE_SPACE(struct inode *inode, qsize_t nr)
 {
 	DQUOT_FREE_SPACE_NODIRTY(inode, nr);
 	mark_inode_dirty(inode);
--
Andreas Dilger
http://sourceforge.net/projects/ext2resize/
http://www-mddsp.enel.ucalgary.ca/People/adilger/


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] remove extern inline from quotaops.h
  2002-11-06 20:11 ` Denis Vlasenko
@ 2002-11-06 18:27   ` Andrew Morton
  2002-11-06 18:43     ` Christoph Hellwig
  0 siblings, 1 reply; 5+ messages in thread
From: Andrew Morton @ 2002-11-06 18:27 UTC (permalink / raw)
  To: vda; +Cc: Andreas Dilger, linux-kernel, Marco van Wieringen

Denis Vlasenko wrote:
> 
> For example,
> 
> static __inline__ int DQUOT_ALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t nr)
> {
>         lock_kernel();
>         if (sb_any_quota_enabled(inode->i_sb)) {

That's nuts.

Here you go.  Saves 7k in an ext2+ext3 build, and a lot of it is
fastpath.  This will significantly reduce the cache footprint
which the kernel presents to applications which are performing
filesystem operations.




 fs/Makefile              |    6 -
 fs/quotaops.c            |  193 +++++++++++++++++++++++++++++++++++++++++++++++
 include/linux/quotaops.h |  188 +++------------------------------------------
 3 files changed, 212 insertions(+), 175 deletions(-)

--- 25/include/linux/quotaops.h~quota-scrog	Wed Nov  6 10:03:42 2002
+++ 25-akpm/include/linux/quotaops.h	Wed Nov  6 10:16:43 2002
@@ -42,139 +42,14 @@ extern struct quotactl_ops vfs_quotactl_
 #define sb_dquot_ops (&dquot_operations)
 #define sb_quotactl_ops (&vfs_quotactl_ops)
 
-static __inline__ void DQUOT_INIT(struct inode *inode)
-{
-	if (!inode->i_sb)
-		BUG();
-	lock_kernel();
-	if (sb_any_quota_enabled(inode->i_sb) && !IS_NOQUOTA(inode))
-		inode->i_sb->dq_op->initialize(inode, -1);
-	unlock_kernel();
-}
-
-static __inline__ void DQUOT_DROP(struct inode *inode)
-{
-	lock_kernel();
-	if (IS_QUOTAINIT(inode)) {
-		if (!inode->i_sb)
-			BUG();
-		inode->i_sb->dq_op->drop(inode);	/* Ops must be set when there's any quota... */
-	}
-	unlock_kernel();
-}
-
-static __inline__ int DQUOT_PREALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t nr)
-{
-	lock_kernel();
-	if (sb_any_quota_enabled(inode->i_sb)) {
-		/* Used space is updated in alloc_space() */
-		if (inode->i_sb->dq_op->alloc_space(inode, nr, 1) == NO_QUOTA) {
-			unlock_kernel();
-			return 1;
-		}
-	}
-	else
-		inode_add_bytes(inode, nr);
-	unlock_kernel();
-	return 0;
-}
-
-static __inline__ int DQUOT_PREALLOC_SPACE(struct inode *inode, qsize_t nr)
-{
-	int ret;
-        if (!(ret =  DQUOT_PREALLOC_SPACE_NODIRTY(inode, nr)))
-		mark_inode_dirty(inode);
-	return ret;
-}
-
-static __inline__ int DQUOT_ALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t nr)
-{
-	lock_kernel();
-	if (sb_any_quota_enabled(inode->i_sb)) {
-		/* Used space is updated in alloc_space() */
-		if (inode->i_sb->dq_op->alloc_space(inode, nr, 0) == NO_QUOTA) {
-			unlock_kernel();
-			return 1;
-		}
-	}
-	else
-		inode_add_bytes(inode, nr);
-	unlock_kernel();
-	return 0;
-}
-
-static __inline__ int DQUOT_ALLOC_SPACE(struct inode *inode, qsize_t nr)
-{
-	int ret;
-	if (!(ret = DQUOT_ALLOC_SPACE_NODIRTY(inode, nr)))
-		mark_inode_dirty(inode);
-	return ret;
-}
-
-static __inline__ int DQUOT_ALLOC_INODE(struct inode *inode)
-{
-	lock_kernel();
-	if (sb_any_quota_enabled(inode->i_sb)) {
-		DQUOT_INIT(inode);
-		if (inode->i_sb->dq_op->alloc_inode(inode, 1) == NO_QUOTA) {
-			unlock_kernel();
-			return 1;
-		}
-	}
-	unlock_kernel();
-	return 0;
-}
-
-static __inline__ void DQUOT_FREE_SPACE_NODIRTY(struct inode *inode, qsize_t nr)
-{
-	lock_kernel();
-	if (sb_any_quota_enabled(inode->i_sb))
-		inode->i_sb->dq_op->free_space(inode, nr);
-	else
-		inode_sub_bytes(inode, nr);
-	unlock_kernel();
-}
-
-static __inline__ void DQUOT_FREE_SPACE(struct inode *inode, qsize_t nr)
-{
-	DQUOT_FREE_SPACE_NODIRTY(inode, nr);
-	mark_inode_dirty(inode);
-}
-
-static __inline__ void DQUOT_FREE_INODE(struct inode *inode)
-{
-	lock_kernel();
-	if (sb_any_quota_enabled(inode->i_sb))
-		inode->i_sb->dq_op->free_inode(inode, 1);
-	unlock_kernel();
-}
-
-static __inline__ int DQUOT_TRANSFER(struct inode *inode, struct iattr *iattr)
-{
-	lock_kernel();
-	if (sb_any_quota_enabled(inode->i_sb) && !IS_NOQUOTA(inode)) {
-		DQUOT_INIT(inode);
-		if (inode->i_sb->dq_op->transfer(inode, iattr) == NO_QUOTA) {
-			unlock_kernel();
-			return 1;
-		}
-	}
-	unlock_kernel();
-	return 0;
-}
-
 #define DQUOT_SYNC(sb)	sync_dquots(sb, -1)
 
-static __inline__ int DQUOT_OFF(struct super_block *sb)
-{
-	int ret = -ENOSYS;
-
-	lock_kernel();
-	if (sb->s_qcop && sb->s_qcop->quota_off)
-		ret = sb->s_qcop->quota_off(sb, -1);
-	unlock_kernel();
-	return ret;
-}
+void DQUOT_INIT(struct inode *inode);
+void DQUOT_DROP(struct inode *inode);
+int DQUOT_ALLOC_INODE(struct inode *inode);
+void DQUOT_FREE_INODE(struct inode *inode);
+int DQUOT_TRANSFER(struct inode *inode, struct iattr *iattr);
+int DQUOT_OFF(struct super_block *sb);
 
 #else
 
@@ -190,51 +65,18 @@ static __inline__ int DQUOT_OFF(struct s
 #define DQUOT_SYNC(sb)				do { } while(0)
 #define DQUOT_OFF(sb)				do { } while(0)
 #define DQUOT_TRANSFER(inode, iattr)		(0)
-extern __inline__ int DQUOT_PREALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t nr)
-{
-	lock_kernel();
-	inode_add_bytes(inode, nr);
-	unlock_kernel();
-	return 0;
-}
-
-extern __inline__ int DQUOT_PREALLOC_SPACE(struct inode *inode, qsize_t nr)
-{
-	DQUOT_PREALLOC_SPACE_NODIRTY(inode, nr);
-	mark_inode_dirty(inode);
-	return 0;
-}
-
-extern __inline__ int DQUOT_ALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t nr)
-{
-	lock_kernel();
-	inode_add_bytes(inode, nr);
-	unlock_kernel();
-	return 0;
-}
-
-extern __inline__ int DQUOT_ALLOC_SPACE(struct inode *inode, qsize_t nr)
-{
-	DQUOT_ALLOC_SPACE_NODIRTY(inode, nr);
-	mark_inode_dirty(inode);
-	return 0;
-}
-
-extern __inline__ void DQUOT_FREE_SPACE_NODIRTY(struct inode *inode, qsize_t nr)
-{
-	lock_kernel();
-	inode_sub_bytes(inode, nr);
-	unlock_kernel();
-}
-
-extern __inline__ void DQUOT_FREE_SPACE(struct inode *inode, qsize_t nr)
-{
-	DQUOT_FREE_SPACE_NODIRTY(inode, nr);
-	mark_inode_dirty(inode);
-}	
 
 #endif /* CONFIG_QUOTA */
 
+/* fs/quotaops.c */
+
+int DQUOT_PREALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t nr);
+int DQUOT_PREALLOC_SPACE(struct inode *inode, qsize_t nr);
+int DQUOT_ALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t nr);
+int DQUOT_ALLOC_SPACE(struct inode *inode, qsize_t nr);
+void DQUOT_FREE_SPACE_NODIRTY(struct inode *inode, qsize_t nr);
+void DQUOT_FREE_SPACE(struct inode *inode, qsize_t nr);
+
 #define DQUOT_PREALLOC_BLOCK_NODIRTY(inode, nr)	DQUOT_PREALLOC_SPACE_NODIRTY(inode, ((qsize_t)(nr)) << (inode)->i_sb->s_blocksize_bits)
 #define DQUOT_PREALLOC_BLOCK(inode, nr)	DQUOT_PREALLOC_SPACE(inode, ((qsize_t)(nr)) << (inode)->i_sb->s_blocksize_bits)
 #define DQUOT_ALLOC_BLOCK_NODIRTY(inode, nr) DQUOT_ALLOC_SPACE_NODIRTY(inode, ((qsize_t)(nr)) << (inode)->i_sb->s_blocksize_bits)
--- /dev/null	Thu Aug 30 13:30:55 2001
+++ 25-akpm/fs/quotaops.c	Wed Nov  6 10:18:38 2002
@@ -0,0 +1,193 @@
+#include <linux/config.h>
+#include <linux/smp_lock.h>
+#include <linux/fs.h>
+#include <linux/module.h>
+#include <linux/quotaops.h>
+
+#if defined(CONFIG_QUOTA)
+
+void DQUOT_INIT(struct inode *inode)
+{
+	if (!inode->i_sb)
+		BUG();
+	lock_kernel();
+	if (sb_any_quota_enabled(inode->i_sb) && !IS_NOQUOTA(inode))
+		inode->i_sb->dq_op->initialize(inode, -1);
+	unlock_kernel();
+}
+
+void DQUOT_DROP(struct inode *inode)
+{
+	lock_kernel();
+	if (IS_QUOTAINIT(inode)) {
+		if (!inode->i_sb)
+			BUG();
+		inode->i_sb->dq_op->drop(inode);	/* Ops must be set when there's any quota... */
+	}
+	unlock_kernel();
+}
+
+int DQUOT_PREALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t nr)
+{
+	lock_kernel();
+	if (sb_any_quota_enabled(inode->i_sb)) {
+		/* Used space is updated in alloc_space() */
+		if (inode->i_sb->dq_op->alloc_space(inode, nr, 1) == NO_QUOTA) {
+			unlock_kernel();
+			return 1;
+		}
+	}
+	else
+		inode_add_bytes(inode, nr);
+	unlock_kernel();
+	return 0;
+}
+
+int DQUOT_PREALLOC_SPACE(struct inode *inode, qsize_t nr)
+{
+	int ret;
+        if (!(ret =  DQUOT_PREALLOC_SPACE_NODIRTY(inode, nr)))
+		mark_inode_dirty(inode);
+	return ret;
+}
+
+int DQUOT_ALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t nr)
+{
+	lock_kernel();
+	if (sb_any_quota_enabled(inode->i_sb)) {
+		/* Used space is updated in alloc_space() */
+		if (inode->i_sb->dq_op->alloc_space(inode, nr, 0) == NO_QUOTA) {
+			unlock_kernel();
+			return 1;
+		}
+	}
+	else
+		inode_add_bytes(inode, nr);
+	unlock_kernel();
+	return 0;
+}
+
+int DQUOT_ALLOC_SPACE(struct inode *inode, qsize_t nr)
+{
+	int ret;
+	if (!(ret = DQUOT_ALLOC_SPACE_NODIRTY(inode, nr)))
+		mark_inode_dirty(inode);
+	return ret;
+}
+
+int DQUOT_ALLOC_INODE(struct inode *inode)
+{
+	lock_kernel();
+	if (sb_any_quota_enabled(inode->i_sb)) {
+		DQUOT_INIT(inode);
+		if (inode->i_sb->dq_op->alloc_inode(inode, 1) == NO_QUOTA) {
+			unlock_kernel();
+			return 1;
+		}
+	}
+	unlock_kernel();
+	return 0;
+}
+
+void DQUOT_FREE_SPACE_NODIRTY(struct inode *inode, qsize_t nr)
+{
+	lock_kernel();
+	if (sb_any_quota_enabled(inode->i_sb))
+		inode->i_sb->dq_op->free_space(inode, nr);
+	else
+		inode_sub_bytes(inode, nr);
+	unlock_kernel();
+}
+
+void DQUOT_FREE_SPACE(struct inode *inode, qsize_t nr)
+{
+	DQUOT_FREE_SPACE_NODIRTY(inode, nr);
+	mark_inode_dirty(inode);
+}
+
+void DQUOT_FREE_INODE(struct inode *inode)
+{
+	lock_kernel();
+	if (sb_any_quota_enabled(inode->i_sb))
+		inode->i_sb->dq_op->free_inode(inode, 1);
+	unlock_kernel();
+}
+
+int DQUOT_TRANSFER(struct inode *inode, struct iattr *iattr)
+{
+	lock_kernel();
+	if (sb_any_quota_enabled(inode->i_sb) && !IS_NOQUOTA(inode)) {
+		DQUOT_INIT(inode);
+		if (inode->i_sb->dq_op->transfer(inode, iattr) == NO_QUOTA) {
+			unlock_kernel();
+			return 1;
+		}
+	}
+	unlock_kernel();
+	return 0;
+}
+
+int DQUOT_OFF(struct super_block *sb)
+{
+	int ret = -ENOSYS;
+
+	lock_kernel();
+	if (sb->s_qcop && sb->s_qcop->quota_off)
+		ret = sb->s_qcop->quota_off(sb, -1);
+	unlock_kernel();
+	return ret;
+}
+
+#else
+
+int DQUOT_PREALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t nr)
+{
+	lock_kernel();
+	inode_add_bytes(inode, nr);
+	unlock_kernel();
+	return 0;
+}
+
+int DQUOT_PREALLOC_SPACE(struct inode *inode, qsize_t nr)
+{
+	DQUOT_PREALLOC_SPACE_NODIRTY(inode, nr);
+	mark_inode_dirty(inode);
+	return 0;
+}
+
+int DQUOT_ALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t nr)
+{
+	lock_kernel();
+	inode_add_bytes(inode, nr);
+	unlock_kernel();
+	return 0;
+}
+
+int DQUOT_ALLOC_SPACE(struct inode *inode, qsize_t nr)
+{
+	DQUOT_ALLOC_SPACE_NODIRTY(inode, nr);
+	mark_inode_dirty(inode);
+	return 0;
+}
+
+void DQUOT_FREE_SPACE_NODIRTY(struct inode *inode, qsize_t nr)
+{
+	lock_kernel();
+	inode_sub_bytes(inode, nr);
+	unlock_kernel();
+}
+
+void DQUOT_FREE_SPACE(struct inode *inode, qsize_t nr)
+{
+	DQUOT_FREE_SPACE_NODIRTY(inode, nr);
+	mark_inode_dirty(inode);
+}	
+
+#endif /* CONFIG_QUOTA */
+
+EXPORT_SYMBOL(DQUOT_PREALLOC_SPACE_NODIRTY);
+EXPORT_SYMBOL(DQUOT_PREALLOC_SPACE);
+EXPORT_SYMBOL(DQUOT_ALLOC_SPACE_NODIRTY);
+EXPORT_SYMBOL(DQUOT_ALLOC_SPACE);
+EXPORT_SYMBOL(DQUOT_FREE_SPACE_NODIRTY);
+EXPORT_SYMBOL(DQUOT_FREE_SPACE);
--- 25/fs/Makefile~quota-scrog	Wed Nov  6 10:08:21 2002
+++ 25-akpm/fs/Makefile	Wed Nov  6 10:08:49 2002
@@ -6,14 +6,16 @@
 # 
 
 export-objs :=	open.o dcache.o buffer.o bio.o inode.o dquot.o mpage.o aio.o \
-                fcntl.o read_write.o dcookies.o mbcache.o posix_acl.o xattr_acl.o
+                fcntl.o read_write.o dcookies.o mbcache.o posix_acl.o xattr_acl.o \
+		quotaops.o
 
 obj-y :=	open.o read_write.o devices.o file_table.o buffer.o \
 		bio.o super.o block_dev.o char_dev.o stat.o exec.o pipe.o \
 		namei.o fcntl.o ioctl.o readdir.o select.o fifo.o locks.o \
 		dcache.o inode.o attr.o bad_inode.o file.o dnotify.o \
 		filesystems.o namespace.o seq_file.o xattr.o libfs.o \
-		fs-writeback.o mpage.o direct-io.o aio.o eventpoll.o
+		fs-writeback.o mpage.o direct-io.o aio.o eventpoll.o \
+		quotaops.o
 
 ifneq ($(CONFIG_NFSD),n)
 ifneq ($(CONFIG_NFSD),)

_

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] remove extern inline from quotaops.h
  2002-11-06 18:27   ` Andrew Morton
@ 2002-11-06 18:43     ` Christoph Hellwig
  2002-11-06 19:09       ` Andrew Morton
  0 siblings, 1 reply; 5+ messages in thread
From: Christoph Hellwig @ 2002-11-06 18:43 UTC (permalink / raw)
  To: Andrew Morton; +Cc: vda, Andreas Dilger, linux-kernel, Marco van Wieringen

On Wed, Nov 06, 2002 at 10:27:22AM -0800, Andrew Morton wrote:
> Denis Vlasenko wrote:
> > 
> > For example,
> > 
> > static __inline__ int DQUOT_ALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t nr)
> > {
> >         lock_kernel();
> >         if (sb_any_quota_enabled(inode->i_sb)) {
> 
> That's nuts.
> 
> Here you go.  Saves 7k in an ext2+ext3 build, and a lot of it is
> fastpath.  This will significantly reduce the cache footprint
> which the kernel presents to applications which are performing
> filesystem operations.

What about giving it non-shouting names while you're at it?


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] remove extern inline from quotaops.h
  2002-11-06 18:43     ` Christoph Hellwig
@ 2002-11-06 19:09       ` Andrew Morton
  0 siblings, 0 replies; 5+ messages in thread
From: Andrew Morton @ 2002-11-06 19:09 UTC (permalink / raw)
  To: Christoph Hellwig; +Cc: vda, Andreas Dilger, linux-kernel, Marco van Wieringen

Christoph Hellwig wrote:
> 
> What about giving it non-shouting names while you're at it?

That's a cleanup.  Not interested.   Let's get this thing
out the door.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] remove extern inline from quotaops.h
  2002-11-04 21:13 [PATCH] remove extern inline from quotaops.h Andreas Dilger
@ 2002-11-06 20:11 ` Denis Vlasenko
  2002-11-06 18:27   ` Andrew Morton
  0 siblings, 1 reply; 5+ messages in thread
From: Denis Vlasenko @ 2002-11-06 20:11 UTC (permalink / raw)
  To: Andreas Dilger, linux-kernel; +Cc: Marco van Wieringen

On 4 November 2002 19:13, Andreas Dilger wrote:
> We are having a strange problem with compiling ext3 code out-of-tree,
> and it is related to the fact that several functions in quotaops.h
> are declared "extern __inline__" instead of "static inline".  Is
> there a good reason to have it that way?  I thought "extern
> __inline__" was sort of frowned upon.
>
> Below is a patch to change this to "static inline".  A similar patch
> is needed for 2.5, but the file has changed significantly...

What is your gcc version?

Mine is 3.2, and it sometimes de-inline large inline functions.
That is, static inlines turn into simple static. And extern inlines
in dangling extern references, that's what bite you maybe ;)

Do not blindly fix it, think of it as a warning:
"gcc: your inline is too large"

For example,

static __inline__ int DQUOT_ALLOC_SPACE_NODIRTY(struct inode *inode, qsize_t nr)
{
        lock_kernel();
        if (sb_any_quota_enabled(inode->i_sb)) {
                /* Used space is updated in alloc_space() */
                if (inode->i_sb->dq_op->alloc_space(inode, nr, 0) == NO_QUOTA) {
                        unlock_kernel();
                        return 1;
                }
        }
        else
                inode_add_bytes(inode, nr);
        unlock_kernel();
        return 0;
}

static __inline__ int DQUOT_ALLOC_SPACE(struct inode *inode, qsize_t nr)
{
        int ret;
        if (!(ret = DQUOT_ALLOC_SPACE_NODIRTY(inode, nr)))
                mark_inode_dirty(inode);
        return ret;
}

Don't you think DQUOT_ALLOC_SPACE is _way too large_ to inline?
Did you look at generated assembly to get a feeling of it's size?
--
vda

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2002-11-06 19:02 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-11-04 21:13 [PATCH] remove extern inline from quotaops.h Andreas Dilger
2002-11-06 20:11 ` Denis Vlasenko
2002-11-06 18:27   ` Andrew Morton
2002-11-06 18:43     ` Christoph Hellwig
2002-11-06 19:09       ` Andrew Morton

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.