diff options
author | Gabor Juhos <juhosg@openwrt.org> | 2012-10-31 19:33:12 +0000 |
---|---|---|
committer | Gabor Juhos <juhosg@openwrt.org> | 2012-10-31 19:33:12 +0000 |
commit | a4126685c6a33ca434494b0e5c7f5df60f4e6405 (patch) | |
tree | 48a4bb160f0df7a471d252cc2a590300e70cc7a0 /target/linux/generic/patches-3.6/506-yaffs-3.2-dont-use-i_nlink-directly.patch | |
parent | 1fff98998c91c0a8f07eac83a64d4d23509b5a88 (diff) | |
download | upstream-a4126685c6a33ca434494b0e5c7f5df60f4e6405.tar.gz upstream-a4126685c6a33ca434494b0e5c7f5df60f4e6405.tar.bz2 upstream-a4126685c6a33ca434494b0e5c7f5df60f4e6405.zip |
generic: split yaffs-3.2-fix patch
Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
SVN-Revision: 34041
Diffstat (limited to 'target/linux/generic/patches-3.6/506-yaffs-3.2-dont-use-i_nlink-directly.patch')
-rw-r--r-- | target/linux/generic/patches-3.6/506-yaffs-3.2-dont-use-i_nlink-directly.patch | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/target/linux/generic/patches-3.6/506-yaffs-3.2-dont-use-i_nlink-directly.patch b/target/linux/generic/patches-3.6/506-yaffs-3.2-dont-use-i_nlink-directly.patch new file mode 100644 index 0000000000..91e8281196 --- /dev/null +++ b/target/linux/generic/patches-3.6/506-yaffs-3.2-dont-use-i_nlink-directly.patch @@ -0,0 +1,78 @@ +--- a/fs/yaffs2/yaffs_vfs_glue.c ++++ b/fs/yaffs2/yaffs_vfs_glue.c +@@ -220,6 +220,29 @@ static struct inode *yaffs_iget(struct s + #define yaffs_SuperToDevice(sb) ((yaffs_dev_t *)sb->u.generic_sbp) + #endif + ++#if (LINUX_VERSION_CODE > KERNEL_VERSION(3, 2, 0)) ++static inline void yaffs_set_nlink(struct inode *inode, unsigned int nlink) ++{ ++ set_nlink(inode, nlink); ++} ++ ++static inline void yaffs_dec_link_count(struct inode *inode) ++{ ++ inode_dec_link_count(inode); ++} ++#else ++static inline void yaffs_set_nlink(struct inode *inode, unsigned int nlink) ++{ ++ inode->i_nlink = nlink; ++} ++ ++static inline void yaffs_dec_link_count(struct inode *inode) ++{ ++ inode->i_nlink--; ++ mark_inode_dirty(inode) ++} ++#endif ++ + + #define update_dir_time(dir) do {\ + (dir)->i_ctime = (dir)->i_mtime = CURRENT_TIME; \ +@@ -1362,7 +1385,7 @@ static void yaffs_fill_inode_from_obj(st + inode->i_size = yaffs_get_obj_length(obj); + inode->i_blocks = (inode->i_size + 511) >> 9; + +- inode->i_nlink = yaffs_get_obj_link_count(obj); ++ yaffs_set_nlink(inode, yaffs_get_obj_link_count(obj)); + + T(YAFFS_TRACE_OS, + (TSTR("yaffs_fill_inode mode %x uid %d gid %d size %d count %d\n"), +@@ -1784,10 +1807,9 @@ static int yaffs_unlink(struct inode *di + retVal = yaffs_unlinker(obj, dentry->d_name.name); + + if (retVal == YAFFS_OK) { +- dentry->d_inode->i_nlink--; ++ yaffs_dec_link_count(dentry->d_inode); + dir->i_version++; + yaffs_gross_unlock(dev); +- mark_inode_dirty(dentry->d_inode); + update_dir_time(dir); + return 0; + } +@@ -1818,7 +1840,8 @@ static int yaffs_link(struct dentry *old + obj); + + if (link) { +- old_dentry->d_inode->i_nlink = yaffs_get_obj_link_count(obj); ++ yaffs_set_nlink(old_dentry->d_inode, ++ yaffs_get_obj_link_count(obj)); + d_instantiate(dentry, old_dentry->d_inode); + atomic_inc(&old_dentry->d_inode->i_count); + T(YAFFS_TRACE_OS, +@@ -1937,11 +1960,9 @@ static int yaffs_rename(struct inode *ol + yaffs_gross_unlock(dev); + + if (retVal == YAFFS_OK) { +- if (target) { +- new_dentry->d_inode->i_nlink--; +- mark_inode_dirty(new_dentry->d_inode); +- } +- ++ if (target) ++ yaffs_dec_link_count(new_dentry->d_inode); ++ + update_dir_time(old_dir); + if(old_dir != new_dir) + update_dir_time(new_dir); |