Skip to content

Commit b9e3aa2

Browse files
committed
Merge tag 'exfat-for-5.9-rc9' of git://git.kernel.org/pub/scm/linux/kernel/git/linkinjeon/exfat
Pull exfat fixes from Namjae Jeon: - Fix use of uninitialized spinlock on error path - Fix missing err assignment in exfat_build_inode() * tag 'exfat-for-5.9-rc9' of git://git.kernel.org/pub/scm/linux/kernel/git/linkinjeon/exfat: exfat: fix use of uninitialized spinlock on error path exfat: fix pointer error checking
2 parents 86f0a5f + 8ff006e commit b9e3aa2

5 files changed

Lines changed: 12 additions & 22 deletions

File tree

fs/exfat/cache.c

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
#include "exfat_raw.h"
1818
#include "exfat_fs.h"
1919

20-
#define EXFAT_CACHE_VALID 0
2120
#define EXFAT_MAX_CACHE 16
2221

2322
struct exfat_cache {
@@ -61,16 +60,6 @@ void exfat_cache_shutdown(void)
6160
kmem_cache_destroy(exfat_cachep);
6261
}
6362

64-
void exfat_cache_init_inode(struct inode *inode)
65-
{
66-
struct exfat_inode_info *ei = EXFAT_I(inode);
67-
68-
spin_lock_init(&ei->cache_lru_lock);
69-
ei->nr_caches = 0;
70-
ei->cache_valid_id = EXFAT_CACHE_VALID + 1;
71-
INIT_LIST_HEAD(&ei->cache_lru);
72-
}
73-
7463
static inline struct exfat_cache *exfat_cache_alloc(void)
7564
{
7665
return kmem_cache_alloc(exfat_cachep, GFP_NOFS);

fs/exfat/exfat_fs.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,8 @@ struct exfat_sb_info {
248248
struct rcu_head rcu;
249249
};
250250

251+
#define EXFAT_CACHE_VALID 0
252+
251253
/*
252254
* EXFAT file system inode in-memory data
253255
*/
@@ -428,7 +430,6 @@ extern const struct dentry_operations exfat_utf8_dentry_ops;
428430
/* cache.c */
429431
int exfat_cache_init(void);
430432
void exfat_cache_shutdown(void);
431-
void exfat_cache_init_inode(struct inode *inode);
432433
void exfat_cache_inval_inode(struct inode *inode);
433434
int exfat_get_cluster(struct inode *inode, unsigned int cluster,
434435
unsigned int *fclus, unsigned int *dclus,

fs/exfat/inode.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -611,8 +611,6 @@ static int exfat_fill_inode(struct inode *inode, struct exfat_dir_entry *info)
611611
ei->i_crtime = info->crtime;
612612
inode->i_atime = info->atime;
613613

614-
exfat_cache_init_inode(inode);
615-
616614
return 0;
617615
}
618616

fs/exfat/namei.c

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -578,7 +578,8 @@ static int exfat_create(struct inode *dir, struct dentry *dentry, umode_t mode,
578578

579579
i_pos = exfat_make_i_pos(&info);
580580
inode = exfat_build_inode(sb, &info, i_pos);
581-
if (IS_ERR(inode))
581+
err = PTR_ERR_OR_ZERO(inode);
582+
if (err)
582583
goto unlock;
583584

584585
inode_inc_iversion(inode);
@@ -745,10 +746,9 @@ static struct dentry *exfat_lookup(struct inode *dir, struct dentry *dentry,
745746

746747
i_pos = exfat_make_i_pos(&info);
747748
inode = exfat_build_inode(sb, &info, i_pos);
748-
if (IS_ERR(inode)) {
749-
err = PTR_ERR(inode);
749+
err = PTR_ERR_OR_ZERO(inode);
750+
if (err)
750751
goto unlock;
751-
}
752752

753753
i_mode = inode->i_mode;
754754
alias = d_find_alias(inode);
@@ -890,10 +890,9 @@ static int exfat_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode)
890890

891891
i_pos = exfat_make_i_pos(&info);
892892
inode = exfat_build_inode(sb, &info, i_pos);
893-
if (IS_ERR(inode)) {
894-
err = PTR_ERR(inode);
893+
err = PTR_ERR_OR_ZERO(inode);
894+
if (err)
895895
goto unlock;
896-
}
897896

898897
inode_inc_iversion(inode);
899898
inode->i_mtime = inode->i_atime = inode->i_ctime =

fs/exfat/super.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,6 @@ static int exfat_read_root(struct inode *inode)
376376
inode->i_mtime = inode->i_atime = inode->i_ctime = ei->i_crtime =
377377
current_time(inode);
378378
exfat_truncate_atime(&inode->i_atime);
379-
exfat_cache_init_inode(inode);
380379
return 0;
381380
}
382381

@@ -763,6 +762,10 @@ static void exfat_inode_init_once(void *foo)
763762
{
764763
struct exfat_inode_info *ei = (struct exfat_inode_info *)foo;
765764

765+
spin_lock_init(&ei->cache_lru_lock);
766+
ei->nr_caches = 0;
767+
ei->cache_valid_id = EXFAT_CACHE_VALID + 1;
768+
INIT_LIST_HEAD(&ei->cache_lru);
766769
INIT_HLIST_NODE(&ei->i_hash_fat);
767770
inode_init_once(&ei->vfs_inode);
768771
}

0 commit comments

Comments
 (0)