From: OGAWA Hirofumi Since MSDOS_SB() is inline function, it increases text size at each calls. I don't know whether there is __attribute__ for avoiding this. This removes the multiple call. Signed-off-by: OGAWA Hirofumi Signed-off-by: Andrew Morton --- 25-akpm/fs/fat/dir.c | 30 ++++++++++++++++-------------- 25-akpm/fs/vfat/namei.c | 8 ++++---- 2 files changed, 20 insertions(+), 18 deletions(-) diff -puN fs/fat/dir.c~fat-remove-the-multiple-msdos_sb-call fs/fat/dir.c --- 25/fs/fat/dir.c~fat-remove-the-multiple-msdos_sb-call Sun Mar 6 17:13:27 2005 +++ 25-akpm/fs/fat/dir.c Sun Mar 6 17:13:27 2005 @@ -205,18 +205,19 @@ int fat_search_long(struct inode *inode, int name_len, struct fat_slot_info *sinfo) { struct super_block *sb = inode->i_sb; + struct msdos_sb_info *sbi = MSDOS_SB(sb); struct buffer_head *bh = NULL; struct msdos_dir_entry *de; - struct nls_table *nls_io = MSDOS_SB(sb)->nls_io; - struct nls_table *nls_disk = MSDOS_SB(sb)->nls_disk; + struct nls_table *nls_io = sbi->nls_io; + struct nls_table *nls_disk = sbi->nls_disk; wchar_t bufuname[14]; unsigned char xlate_len, nr_slots; wchar_t *unicode = NULL; unsigned char work[8], bufname[260]; /* 256 + 4 */ - int uni_xlate = MSDOS_SB(sb)->options.unicode_xlate; - int utf8 = MSDOS_SB(sb)->options.utf8; - int anycase = (MSDOS_SB(sb)->options.name_check != 's'); - unsigned short opt_shortname = MSDOS_SB(sb)->options.shortname; + int uni_xlate = sbi->options.unicode_xlate; + int utf8 = sbi->options.utf8; + int anycase = (sbi->options.name_check != 's'); + unsigned short opt_shortname = sbi->options.shortname; loff_t cpos = 0; int chl, i, j, last_u, err; @@ -386,10 +387,11 @@ static int fat_readdirx(struct inode *in filldir_t filldir, int short_only, int both) { struct super_block *sb = inode->i_sb; + struct msdos_sb_info *sbi = MSDOS_SB(sb); struct buffer_head *bh; struct msdos_dir_entry *de; - struct nls_table *nls_io = MSDOS_SB(sb)->nls_io; - struct nls_table *nls_disk = MSDOS_SB(sb)->nls_disk; + struct nls_table *nls_io = sbi->nls_io; + struct nls_table *nls_disk = sbi->nls_disk; unsigned char long_slots; const char *fill_name; int fill_len; @@ -397,11 +399,11 @@ static int fat_readdirx(struct inode *in wchar_t *unicode = NULL; unsigned char c, work[8], bufname[56], *ptname = bufname; unsigned long lpos, dummy, *furrfu = &lpos; - int uni_xlate = MSDOS_SB(sb)->options.unicode_xlate; - int isvfat = MSDOS_SB(sb)->options.isvfat; - int utf8 = MSDOS_SB(sb)->options.utf8; - int nocase = MSDOS_SB(sb)->options.nocase; - unsigned short opt_shortname = MSDOS_SB(sb)->options.shortname; + int uni_xlate = sbi->options.unicode_xlate; + int isvfat = sbi->options.isvfat; + int utf8 = sbi->options.utf8; + int nocase = sbi->options.nocase; + unsigned short opt_shortname = sbi->options.shortname; unsigned long inum; int chi, chl, i, i2, j, last, last_u, dotoffset = 0; loff_t cpos; @@ -513,7 +515,7 @@ ParseLong: long_slots = 0; } - if (MSDOS_SB(sb)->options.dotsOK) { + if (sbi->options.dotsOK) { ptname = bufname; dotoffset = 0; if (de->attr & ATTR_HIDDEN) { diff -puN fs/vfat/namei.c~fat-remove-the-multiple-msdos_sb-call fs/vfat/namei.c --- 25/fs/vfat/namei.c~fat-remove-the-multiple-msdos_sb-call Sun Mar 6 17:13:27 2005 +++ 25-akpm/fs/vfat/namei.c Sun Mar 6 17:13:27 2005 @@ -301,6 +301,7 @@ static int vfat_create_shortname(struct wchar_t *uname, int ulen, unsigned char *name_res, unsigned char *lcase) { + struct fat_mount_options *opts = &MSDOS_SB(dir->i_sb)->options; wchar_t *ip, *ext_start, *end, *name_start; unsigned char base[9], ext[4], buf[8], *p; unsigned char charbuf[NLS_MAX_CHARSET_SIZE]; @@ -308,7 +309,6 @@ static int vfat_create_shortname(struct int sz = 0, extlen, baselen, i, numtail_baselen, numtail2_baselen; int is_shortname; struct shortname_info base_info, ext_info; - unsigned short opt_shortname = MSDOS_SB(dir->i_sb)->options.shortname; is_shortname = 1; INIT_SHORTNAME_INFO(&base_info); @@ -421,9 +421,9 @@ static int vfat_create_shortname(struct if (vfat_find_form(dir, name_res) == 0) return -EEXIST; - if (opt_shortname & VFAT_SFN_CREATE_WIN95) { + if (opts->shortname & VFAT_SFN_CREATE_WIN95) { return (base_info.upper && ext_info.upper); - } else if (opt_shortname & VFAT_SFN_CREATE_WINNT) { + } else if (opts->shortname & VFAT_SFN_CREATE_WINNT) { if ((base_info.upper || base_info.lower) && (ext_info.upper || ext_info.lower)) { if (!base_info.upper && base_info.lower) @@ -438,7 +438,7 @@ static int vfat_create_shortname(struct } } - if (MSDOS_SB(dir->i_sb)->options.numtail == 0) + if (opts->numtail == 0) if (vfat_find_form(dir, name_res) < 0) return 0; _