Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ubifs: split allocation of ubifs_info into a separate function

preparation to ubifs sget() race fixes

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

Al Viro b1c27ab3 ff78fca2

+48 -39
+48 -39
fs/ubifs/super.c
··· 1971 1971 return ERR_PTR(-EINVAL); 1972 1972 } 1973 1973 1974 + static struct ubifs_info *alloc_ubifs_info(struct ubi_volume_desc *ubi) 1975 + { 1976 + struct ubifs_info *c; 1977 + 1978 + c = kzalloc(sizeof(struct ubifs_info), GFP_KERNEL); 1979 + if (c) { 1980 + spin_lock_init(&c->cnt_lock); 1981 + spin_lock_init(&c->cs_lock); 1982 + spin_lock_init(&c->buds_lock); 1983 + spin_lock_init(&c->space_lock); 1984 + spin_lock_init(&c->orphan_lock); 1985 + init_rwsem(&c->commit_sem); 1986 + mutex_init(&c->lp_mutex); 1987 + mutex_init(&c->tnc_mutex); 1988 + mutex_init(&c->log_mutex); 1989 + mutex_init(&c->mst_mutex); 1990 + mutex_init(&c->umount_mutex); 1991 + mutex_init(&c->bu_mutex); 1992 + mutex_init(&c->write_reserve_mutex); 1993 + init_waitqueue_head(&c->cmt_wq); 1994 + c->buds = RB_ROOT; 1995 + c->old_idx = RB_ROOT; 1996 + c->size_tree = RB_ROOT; 1997 + c->orph_tree = RB_ROOT; 1998 + INIT_LIST_HEAD(&c->infos_list); 1999 + INIT_LIST_HEAD(&c->idx_gc); 2000 + INIT_LIST_HEAD(&c->replay_list); 2001 + INIT_LIST_HEAD(&c->replay_buds); 2002 + INIT_LIST_HEAD(&c->uncat_list); 2003 + INIT_LIST_HEAD(&c->empty_list); 2004 + INIT_LIST_HEAD(&c->freeable_list); 2005 + INIT_LIST_HEAD(&c->frdi_idx_list); 2006 + INIT_LIST_HEAD(&c->unclean_leb_list); 2007 + INIT_LIST_HEAD(&c->old_buds); 2008 + INIT_LIST_HEAD(&c->orph_list); 2009 + INIT_LIST_HEAD(&c->orph_new); 2010 + c->no_chk_data_crc = 1; 2011 + 2012 + c->highest_inum = UBIFS_FIRST_INO; 2013 + c->lhead_lnum = c->ltail_lnum = UBIFS_LOG_LNUM; 2014 + 2015 + ubi_get_volume_info(ubi, &c->vi); 2016 + ubi_get_device_info(c->vi.ubi_num, &c->di); 2017 + } 2018 + return c; 2019 + } 2020 + 1974 2021 static int ubifs_fill_super(struct super_block *sb, void *data, int silent) 1975 2022 { 1976 2023 struct ubi_volume_desc *ubi = sb->s_fs_info; ··· 2025 1978 struct inode *root; 2026 1979 int err; 2027 1980 2028 - c = kzalloc(sizeof(struct ubifs_info), GFP_KERNEL); 1981 + c = alloc_ubifs_info(ubi); 2029 1982 if (!c) 2030 1983 return -ENOMEM; 2031 1984 2032 - spin_lock_init(&c->cnt_lock); 2033 - spin_lock_init(&c->cs_lock); 2034 - spin_lock_init(&c->buds_lock); 2035 - spin_lock_init(&c->space_lock); 2036 - spin_lock_init(&c->orphan_lock); 2037 - init_rwsem(&c->commit_sem); 2038 - mutex_init(&c->lp_mutex); 2039 - mutex_init(&c->tnc_mutex); 2040 - mutex_init(&c->log_mutex); 2041 - mutex_init(&c->mst_mutex); 2042 - mutex_init(&c->umount_mutex); 2043 - mutex_init(&c->bu_mutex); 2044 - mutex_init(&c->write_reserve_mutex); 2045 - init_waitqueue_head(&c->cmt_wq); 2046 - c->buds = RB_ROOT; 2047 - c->old_idx = RB_ROOT; 2048 - c->size_tree = RB_ROOT; 2049 - c->orph_tree = RB_ROOT; 2050 - INIT_LIST_HEAD(&c->infos_list); 2051 - INIT_LIST_HEAD(&c->idx_gc); 2052 - INIT_LIST_HEAD(&c->replay_list); 2053 - INIT_LIST_HEAD(&c->replay_buds); 2054 - INIT_LIST_HEAD(&c->uncat_list); 2055 - INIT_LIST_HEAD(&c->empty_list); 2056 - INIT_LIST_HEAD(&c->freeable_list); 2057 - INIT_LIST_HEAD(&c->frdi_idx_list); 2058 - INIT_LIST_HEAD(&c->unclean_leb_list); 2059 - INIT_LIST_HEAD(&c->old_buds); 2060 - INIT_LIST_HEAD(&c->orph_list); 2061 - INIT_LIST_HEAD(&c->orph_new); 2062 - c->no_chk_data_crc = 1; 2063 - 2064 1985 c->vfs_sb = sb; 2065 - c->highest_inum = UBIFS_FIRST_INO; 2066 - c->lhead_lnum = c->ltail_lnum = UBIFS_LOG_LNUM; 2067 - 2068 - ubi_get_volume_info(ubi, &c->vi); 2069 - ubi_get_device_info(c->vi.ubi_num, &c->di); 2070 - 2071 1986 /* Re-open the UBI device in read-write mode */ 2072 1987 c->ubi = ubi_open_volume(c->vi.ubi_num, c->vi.vol_id, UBI_READWRITE); 2073 1988 if (IS_ERR(c->ubi)) {