From 2d2c864e8bcb4cb811b10e61dad8ceeff69d3b4e Mon Sep 17 00:00:00 2001 From: Miklos Szeredi Date: Fri, 28 Oct 2011 14:13:30 +0200 Subject: [PATCH] --- yaml --- r: 273198 b: refs/heads/master c: a78ef704a8dd430225955f0709b22d4a6ba21deb h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/fs/inode.c | 2 +- trunk/include/linux/fs.h | 20 +++++++++++++++----- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/[refs] b/[refs] index 65d5936894ad..1b1e0ccdc4bf 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: bfe8684869601dacfcb2cd69ef8cfd9045f62170 +refs/heads/master: a78ef704a8dd430225955f0709b22d4a6ba21deb diff --git a/trunk/fs/inode.c b/trunk/fs/inode.c index ecbb68dc7e2a..ee4e66b998f4 100644 --- a/trunk/fs/inode.c +++ b/trunk/fs/inode.c @@ -142,7 +142,7 @@ int inode_init_always(struct super_block *sb, struct inode *inode) atomic_set(&inode->i_count, 1); inode->i_op = &empty_iops; inode->i_fop = &empty_fops; - inode->i_nlink = 1; + inode->__i_nlink = 1; inode->i_opflags = 0; inode->i_uid = 0; inode->i_gid = 0; diff --git a/trunk/include/linux/fs.h b/trunk/include/linux/fs.h index 48c1f5fc7411..23467d768cab 100644 --- a/trunk/include/linux/fs.h +++ b/trunk/include/linux/fs.h @@ -768,7 +768,17 @@ struct inode { /* Stat data, not accessed from path walking */ unsigned long i_ino; - unsigned int i_nlink; + /* + * Filesystems may only read i_nlink directly. They shall use the + * following functions for modification: + * + * (set|clear|inc|drop)_nlink + * inode_(inc|dec)_link_count + */ + union { + const unsigned int i_nlink; + unsigned int __i_nlink; + }; dev_t i_rdev; loff_t i_size; struct timespec i_atime; @@ -1764,7 +1774,7 @@ static inline void mark_inode_dirty_sync(struct inode *inode) */ static inline void set_nlink(struct inode *inode, unsigned int nlink) { - inode->i_nlink = nlink; + inode->__i_nlink = nlink; } /** @@ -1777,7 +1787,7 @@ static inline void set_nlink(struct inode *inode, unsigned int nlink) */ static inline void inc_nlink(struct inode *inode) { - inode->i_nlink++; + inode->__i_nlink++; } static inline void inode_inc_link_count(struct inode *inode) @@ -1799,7 +1809,7 @@ static inline void inode_inc_link_count(struct inode *inode) */ static inline void drop_nlink(struct inode *inode) { - inode->i_nlink--; + inode->__i_nlink--; } /** @@ -1812,7 +1822,7 @@ static inline void drop_nlink(struct inode *inode) */ static inline void clear_nlink(struct inode *inode) { - inode->i_nlink = 0; + inode->__i_nlink = 0; } static inline void inode_dec_link_count(struct inode *inode)