diff options
author | 2014-05-05 12:27:30 -0700 | |
---|---|---|
committer | 2014-05-05 12:27:30 -0700 | |
commit | af46929e6ee7197dfe315af3c5bb5cc75a0aec9c (patch) | |
tree | 18359b934daf8c7e271930c938bd867a379cace7 /fs/kernfs/inode.c | |
parent | ASoC: fsl_spdif: Use clk_set_rate() for spdif root clock only (diff) | |
parent | Linux 3.15-rc4 (diff) | |
download | wireguard-linux-af46929e6ee7197dfe315af3c5bb5cc75a0aec9c.tar.xz wireguard-linux-af46929e6ee7197dfe315af3c5bb5cc75a0aec9c.zip |
Merge tag 'v3.15-rc4' into asoc-fsl-spdif
Linux 3.15-rc4
Diffstat (limited to 'fs/kernfs/inode.c')
-rw-r--r-- | fs/kernfs/inode.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/fs/kernfs/inode.c b/fs/kernfs/inode.c index abb0f1f53d93..985217626e66 100644 --- a/fs/kernfs/inode.c +++ b/fs/kernfs/inode.c @@ -48,14 +48,18 @@ void __init kernfs_inode_init(void) static struct kernfs_iattrs *kernfs_iattrs(struct kernfs_node *kn) { + static DEFINE_MUTEX(iattr_mutex); + struct kernfs_iattrs *ret; struct iattr *iattrs; + mutex_lock(&iattr_mutex); + if (kn->iattr) - return kn->iattr; + goto out_unlock; kn->iattr = kzalloc(sizeof(struct kernfs_iattrs), GFP_KERNEL); if (!kn->iattr) - return NULL; + goto out_unlock; iattrs = &kn->iattr->ia_iattr; /* assign default attributes */ @@ -65,8 +69,10 @@ static struct kernfs_iattrs *kernfs_iattrs(struct kernfs_node *kn) iattrs->ia_atime = iattrs->ia_mtime = iattrs->ia_ctime = CURRENT_TIME; simple_xattrs_init(&kn->iattr->xattrs); - - return kn->iattr; +out_unlock: + ret = kn->iattr; + mutex_unlock(&iattr_mutex); + return ret; } static int __kernfs_setattr(struct kernfs_node *kn, const struct iattr *iattr) |