projects
/
firefly-linux-kernel-4.4.55.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
[firefly-linux-kernel-4.4.55.git]
/
fs
/
stack.c
diff --git
a/fs/stack.c
b/fs/stack.c
index 5ddbc34535f9300ddbe8dc0578d67d0dc7dccea8..67716f6a1a4a29ddb5e59dda194f837cedbfe210 100644
(file)
--- a/
fs/stack.c
+++ b/
fs/stack.c
@@
-20,11
+20,6
@@
EXPORT_SYMBOL_GPL(fsstack_copy_inode_size);
void fsstack_copy_attr_all(struct inode *dest, const struct inode *src,
int (*get_nlinks)(struct inode *))
{
void fsstack_copy_attr_all(struct inode *dest, const struct inode *src,
int (*get_nlinks)(struct inode *))
{
- if (!get_nlinks)
- dest->i_nlink = src->i_nlink;
- else
- dest->i_nlink = (*get_nlinks)(dest);
-
dest->i_mode = src->i_mode;
dest->i_uid = src->i_uid;
dest->i_gid = src->i_gid;
dest->i_mode = src->i_mode;
dest->i_uid = src->i_uid;
dest->i_gid = src->i_gid;
@@
-35,6
+30,13
@@
void fsstack_copy_attr_all(struct inode *dest, const struct inode *src,
dest->i_blkbits = src->i_blkbits;
dest->i_flags = src->i_flags;
dest->i_blkbits = src->i_blkbits;
dest->i_flags = src->i_flags;
- fsstack_copy_inode_size(dest, src);
+ /*
+ * Update the nlinks AFTER updating the above fields, because the
+ * get_links callback may depend on them.
+ */
+ if (!get_nlinks)
+ dest->i_nlink = src->i_nlink;
+ else
+ dest->i_nlink = (*get_nlinks)(dest);
}
EXPORT_SYMBOL_GPL(fsstack_copy_attr_all);
}
EXPORT_SYMBOL_GPL(fsstack_copy_attr_all);