1 /* 2 * linux/fs/fat/inode.c 3 * 4 * Written 1992,1993 by Werner Almesberger 5 * VFAT extensions by Gordon Chaffee, merged with msdos fs by Henrik Storner 6 * Rewritten for the constant inumbers support by Al Viro 7 * 8 * Fixes: 9 * 10 * Max Cohan: Fixed invalid FSINFO offset when info_sector is 0 11 */ 12 13 #include <linux/module.h> 14 #include <linux/init.h> 15 #include <linux/time.h> 16 #include <linux/slab.h> 17 #include <linux/seq_file.h> 18 #include <linux/pagemap.h> 19 #include <linux/mpage.h> 20 #include <linux/buffer_head.h> 21 #include <linux/exportfs.h> 22 #include <linux/mount.h> 23 #include <linux/vfs.h> 24 #include <linux/parser.h> 25 #include <linux/uio.h> 26 #include <linux/writeback.h> 27 #include <linux/log2.h> 28 #include <linux/hash.h> 29 #include <asm/unaligned.h> 30 #include "fat.h" 31 32 #ifndef CONFIG_FAT_DEFAULT_IOCHARSET 33 /* if user don't select VFAT, this is undefined. */ 34 #define CONFIG_FAT_DEFAULT_IOCHARSET "" 35 #endif 36 37 static int fat_default_codepage = CONFIG_FAT_DEFAULT_CODEPAGE; 38 static char fat_default_iocharset[] = CONFIG_FAT_DEFAULT_IOCHARSET; 39 40 41 static int fat_add_cluster(struct inode *inode) 42 { 43 int err, cluster; 44 45 err = fat_alloc_clusters(inode, &cluster, 1); 46 if (err) 47 return err; 48 /* FIXME: this cluster should be added after data of this 49 * cluster is writed */ 50 err = fat_chain_add(inode, cluster, 1); 51 if (err) 52 fat_free_clusters(inode, cluster); 53 return err; 54 } 55 56 static inline int __fat_get_block(struct inode *inode, sector_t iblock, 57 unsigned long *max_blocks, 58 struct buffer_head *bh_result, int create) 59 { 60 struct super_block *sb = inode->i_sb; 61 struct msdos_sb_info *sbi = MSDOS_SB(sb); 62 unsigned long mapped_blocks; 63 sector_t phys; 64 int err, offset; 65 66 err = fat_bmap(inode, iblock, &phys, &mapped_blocks, create); 67 if (err) 68 return err; 69 if (phys) { 70 map_bh(bh_result, sb, phys); 71 *max_blocks = min(mapped_blocks, *max_blocks); 72 return 0; 73 } 74 if (!create) 75 return 0; 76 77 if (iblock != MSDOS_I(inode)->mmu_private >> sb->s_blocksize_bits) { 78 fat_fs_error(sb, "corrupted file size (i_pos %lld, %lld)", 79 MSDOS_I(inode)->i_pos, MSDOS_I(inode)->mmu_private); 80 return -EIO; 81 } 82 83 offset = (unsigned long)iblock & (sbi->sec_per_clus - 1); 84 if (!offset) { 85 /* TODO: multiple cluster allocation would be desirable. */ 86 err = fat_add_cluster(inode); 87 if (err) 88 return err; 89 } 90 /* available blocks on this cluster */ 91 mapped_blocks = sbi->sec_per_clus - offset; 92 93 *max_blocks = min(mapped_blocks, *max_blocks); 94 MSDOS_I(inode)->mmu_private += *max_blocks << sb->s_blocksize_bits; 95 96 err = fat_bmap(inode, iblock, &phys, &mapped_blocks, create); 97 if (err) 98 return err; 99 100 BUG_ON(!phys); 101 BUG_ON(*max_blocks != mapped_blocks); 102 set_buffer_new(bh_result); 103 map_bh(bh_result, sb, phys); 104 105 return 0; 106 } 107 108 static int fat_get_block(struct inode *inode, sector_t iblock, 109 struct buffer_head *bh_result, int create) 110 { 111 struct super_block *sb = inode->i_sb; 112 unsigned long max_blocks = bh_result->b_size >> inode->i_blkbits; 113 int err; 114 115 err = __fat_get_block(inode, iblock, &max_blocks, bh_result, create); 116 if (err) 117 return err; 118 bh_result->b_size = max_blocks << sb->s_blocksize_bits; 119 return 0; 120 } 121 122 static int fat_writepage(struct page *page, struct writeback_control *wbc) 123 { 124 return block_write_full_page(page, fat_get_block, wbc); 125 } 126 127 static int fat_writepages(struct address_space *mapping, 128 struct writeback_control *wbc) 129 { 130 return mpage_writepages(mapping, wbc, fat_get_block); 131 } 132 133 static int fat_readpage(struct file *file, struct page *page) 134 { 135 return mpage_readpage(page, fat_get_block); 136 } 137 138 static int fat_readpages(struct file *file, struct address_space *mapping, 139 struct list_head *pages, unsigned nr_pages) 140 { 141 return mpage_readpages(mapping, pages, nr_pages, fat_get_block); 142 } 143 144 static void fat_write_failed(struct address_space *mapping, loff_t to) 145 { 146 struct inode *inode = mapping->host; 147 148 if (to > inode->i_size) { 149 truncate_pagecache(inode, to, inode->i_size); 150 fat_truncate_blocks(inode, inode->i_size); 151 } 152 } 153 154 static int fat_write_begin(struct file *file, struct address_space *mapping, 155 loff_t pos, unsigned len, unsigned flags, 156 struct page **pagep, void **fsdata) 157 { 158 int err; 159 160 *pagep = NULL; 161 err = cont_write_begin(file, mapping, pos, len, flags, 162 pagep, fsdata, fat_get_block, 163 &MSDOS_I(mapping->host)->mmu_private); 164 if (err < 0) 165 fat_write_failed(mapping, pos + len); 166 return err; 167 } 168 169 static int fat_write_end(struct file *file, struct address_space *mapping, 170 loff_t pos, unsigned len, unsigned copied, 171 struct page *pagep, void *fsdata) 172 { 173 struct inode *inode = mapping->host; 174 int err; 175 err = generic_write_end(file, mapping, pos, len, copied, pagep, fsdata); 176 if (err < len) 177 fat_write_failed(mapping, pos + len); 178 if (!(err < 0) && !(MSDOS_I(inode)->i_attrs & ATTR_ARCH)) { 179 inode->i_mtime = inode->i_ctime = CURRENT_TIME_SEC; 180 MSDOS_I(inode)->i_attrs |= ATTR_ARCH; 181 mark_inode_dirty(inode); 182 } 183 return err; 184 } 185 186 static ssize_t fat_direct_IO(int rw, struct kiocb *iocb, 187 const struct iovec *iov, 188 loff_t offset, unsigned long nr_segs) 189 { 190 struct file *file = iocb->ki_filp; 191 struct address_space *mapping = file->f_mapping; 192 struct inode *inode = mapping->host; 193 ssize_t ret; 194 195 if (rw == WRITE) { 196 /* 197 * FIXME: blockdev_direct_IO() doesn't use ->write_begin(), 198 * so we need to update the ->mmu_private to block boundary. 199 * 200 * But we must fill the remaining area or hole by nul for 201 * updating ->mmu_private. 202 * 203 * Return 0, and fallback to normal buffered write. 204 */ 205 loff_t size = offset + iov_length(iov, nr_segs); 206 if (MSDOS_I(inode)->mmu_private < size) 207 return 0; 208 } 209 210 /* 211 * FAT need to use the DIO_LOCKING for avoiding the race 212 * condition of fat_get_block() and ->truncate(). 213 */ 214 ret = blockdev_direct_IO(rw, iocb, inode, iov, offset, nr_segs, 215 fat_get_block); 216 if (ret < 0 && (rw & WRITE)) 217 fat_write_failed(mapping, offset + iov_length(iov, nr_segs)); 218 219 return ret; 220 } 221 222 static sector_t _fat_bmap(struct address_space *mapping, sector_t block) 223 { 224 sector_t blocknr; 225 226 /* fat_get_cluster() assumes the requested blocknr isn't truncated. */ 227 down_read(&MSDOS_I(mapping->host)->truncate_lock); 228 blocknr = generic_block_bmap(mapping, block, fat_get_block); 229 up_read(&MSDOS_I(mapping->host)->truncate_lock); 230 231 return blocknr; 232 } 233 234 static const struct address_space_operations fat_aops = { 235 .readpage = fat_readpage, 236 .readpages = fat_readpages, 237 .writepage = fat_writepage, 238 .writepages = fat_writepages, 239 .write_begin = fat_write_begin, 240 .write_end = fat_write_end, 241 .direct_IO = fat_direct_IO, 242 .bmap = _fat_bmap 243 }; 244 245 /* 246 * New FAT inode stuff. We do the following: 247 * a) i_ino is constant and has nothing with on-disk location. 248 * b) FAT manages its own cache of directory entries. 249 * c) *This* cache is indexed by on-disk location. 250 * d) inode has an associated directory entry, all right, but 251 * it may be unhashed. 252 * e) currently entries are stored within struct inode. That should 253 * change. 254 * f) we deal with races in the following way: 255 * 1. readdir() and lookup() do FAT-dir-cache lookup. 256 * 2. rename() unhashes the F-d-c entry and rehashes it in 257 * a new place. 258 * 3. unlink() and rmdir() unhash F-d-c entry. 259 * 4. fat_write_inode() checks whether the thing is unhashed. 260 * If it is we silently return. If it isn't we do bread(), 261 * check if the location is still valid and retry if it 262 * isn't. Otherwise we do changes. 263 * 5. Spinlock is used to protect hash/unhash/location check/lookup 264 * 6. fat_evict_inode() unhashes the F-d-c entry. 265 * 7. lookup() and readdir() do igrab() if they find a F-d-c entry 266 * and consider negative result as cache miss. 267 */ 268 269 static void fat_hash_init(struct super_block *sb) 270 { 271 struct msdos_sb_info *sbi = MSDOS_SB(sb); 272 int i; 273 274 spin_lock_init(&sbi->inode_hash_lock); 275 for (i = 0; i < FAT_HASH_SIZE; i++) 276 INIT_HLIST_HEAD(&sbi->inode_hashtable[i]); 277 } 278 279 static inline unsigned long fat_hash(loff_t i_pos) 280 { 281 return hash_32(i_pos, FAT_HASH_BITS); 282 } 283 284 static void dir_hash_init(struct super_block *sb) 285 { 286 struct msdos_sb_info *sbi = MSDOS_SB(sb); 287 int i; 288 289 spin_lock_init(&sbi->dir_hash_lock); 290 for (i = 0; i < FAT_HASH_SIZE; i++) 291 INIT_HLIST_HEAD(&sbi->dir_hashtable[i]); 292 } 293 294 void fat_attach(struct inode *inode, loff_t i_pos) 295 { 296 struct msdos_sb_info *sbi = MSDOS_SB(inode->i_sb); 297 298 if (inode->i_ino != MSDOS_ROOT_INO) { 299 struct hlist_head *head = sbi->inode_hashtable 300 + fat_hash(i_pos); 301 302 spin_lock(&sbi->inode_hash_lock); 303 MSDOS_I(inode)->i_pos = i_pos; 304 hlist_add_head(&MSDOS_I(inode)->i_fat_hash, head); 305 spin_unlock(&sbi->inode_hash_lock); 306 } 307 308 /* If NFS support is enabled, cache the mapping of start cluster 309 * to directory inode. This is used during reconnection of 310 * dentries to the filesystem root. 311 */ 312 if (S_ISDIR(inode->i_mode) && sbi->options.nfs) { 313 struct hlist_head *d_head = sbi->dir_hashtable; 314 d_head += fat_dir_hash(MSDOS_I(inode)->i_logstart); 315 316 spin_lock(&sbi->dir_hash_lock); 317 hlist_add_head(&MSDOS_I(inode)->i_dir_hash, d_head); 318 spin_unlock(&sbi->dir_hash_lock); 319 } 320 } 321 EXPORT_SYMBOL_GPL(fat_attach); 322 323 void fat_detach(struct inode *inode) 324 { 325 struct msdos_sb_info *sbi = MSDOS_SB(inode->i_sb); 326 spin_lock(&sbi->inode_hash_lock); 327 MSDOS_I(inode)->i_pos = 0; 328 hlist_del_init(&MSDOS_I(inode)->i_fat_hash); 329 spin_unlock(&sbi->inode_hash_lock); 330 331 if (S_ISDIR(inode->i_mode) && sbi->options.nfs) { 332 spin_lock(&sbi->dir_hash_lock); 333 hlist_del_init(&MSDOS_I(inode)->i_dir_hash); 334 spin_unlock(&sbi->dir_hash_lock); 335 } 336 } 337 EXPORT_SYMBOL_GPL(fat_detach); 338 339 struct inode *fat_iget(struct super_block *sb, loff_t i_pos) 340 { 341 struct msdos_sb_info *sbi = MSDOS_SB(sb); 342 struct hlist_head *head = sbi->inode_hashtable + fat_hash(i_pos); 343 struct hlist_node *_p; 344 struct msdos_inode_info *i; 345 struct inode *inode = NULL; 346 347 spin_lock(&sbi->inode_hash_lock); 348 hlist_for_each_entry(i, _p, head, i_fat_hash) { 349 BUG_ON(i->vfs_inode.i_sb != sb); 350 if (i->i_pos != i_pos) 351 continue; 352 inode = igrab(&i->vfs_inode); 353 if (inode) 354 break; 355 } 356 spin_unlock(&sbi->inode_hash_lock); 357 return inode; 358 } 359 360 static int is_exec(unsigned char *extension) 361 { 362 unsigned char *exe_extensions = "EXECOMBAT", *walk; 363 364 for (walk = exe_extensions; *walk; walk += 3) 365 if (!strncmp(extension, walk, 3)) 366 return 1; 367 return 0; 368 } 369 370 static int fat_calc_dir_size(struct inode *inode) 371 { 372 struct msdos_sb_info *sbi = MSDOS_SB(inode->i_sb); 373 int ret, fclus, dclus; 374 375 inode->i_size = 0; 376 if (MSDOS_I(inode)->i_start == 0) 377 return 0; 378 379 ret = fat_get_cluster(inode, FAT_ENT_EOF, &fclus, &dclus); 380 if (ret < 0) 381 return ret; 382 inode->i_size = (fclus + 1) << sbi->cluster_bits; 383 384 return 0; 385 } 386 387 /* doesn't deal with root inode */ 388 static int fat_fill_inode(struct inode *inode, struct msdos_dir_entry *de) 389 { 390 struct msdos_sb_info *sbi = MSDOS_SB(inode->i_sb); 391 int error; 392 393 MSDOS_I(inode)->i_pos = 0; 394 inode->i_uid = sbi->options.fs_uid; 395 inode->i_gid = sbi->options.fs_gid; 396 inode->i_version++; 397 inode->i_generation = get_seconds(); 398 399 if ((de->attr & ATTR_DIR) && !IS_FREE(de->name)) { 400 inode->i_generation &= ~1; 401 inode->i_mode = fat_make_mode(sbi, de->attr, S_IRWXUGO); 402 inode->i_op = sbi->dir_ops; 403 inode->i_fop = &fat_dir_operations; 404 405 MSDOS_I(inode)->i_start = fat_get_start(sbi, de); 406 MSDOS_I(inode)->i_logstart = MSDOS_I(inode)->i_start; 407 error = fat_calc_dir_size(inode); 408 if (error < 0) 409 return error; 410 MSDOS_I(inode)->mmu_private = inode->i_size; 411 412 set_nlink(inode, fat_subdirs(inode)); 413 } else { /* not a directory */ 414 inode->i_generation |= 1; 415 inode->i_mode = fat_make_mode(sbi, de->attr, 416 ((sbi->options.showexec && !is_exec(de->name + 8)) 417 ? S_IRUGO|S_IWUGO : S_IRWXUGO)); 418 MSDOS_I(inode)->i_start = fat_get_start(sbi, de); 419 420 MSDOS_I(inode)->i_logstart = MSDOS_I(inode)->i_start; 421 inode->i_size = le32_to_cpu(de->size); 422 inode->i_op = &fat_file_inode_operations; 423 inode->i_fop = &fat_file_operations; 424 inode->i_mapping->a_ops = &fat_aops; 425 MSDOS_I(inode)->mmu_private = inode->i_size; 426 } 427 if (de->attr & ATTR_SYS) { 428 if (sbi->options.sys_immutable) 429 inode->i_flags |= S_IMMUTABLE; 430 } 431 fat_save_attrs(inode, de->attr); 432 433 inode->i_blocks = ((inode->i_size + (sbi->cluster_size - 1)) 434 & ~((loff_t)sbi->cluster_size - 1)) >> 9; 435 436 fat_time_fat2unix(sbi, &inode->i_mtime, de->time, de->date, 0); 437 if (sbi->options.isvfat) { 438 fat_time_fat2unix(sbi, &inode->i_ctime, de->ctime, 439 de->cdate, de->ctime_cs); 440 fat_time_fat2unix(sbi, &inode->i_atime, 0, de->adate, 0); 441 } else 442 inode->i_ctime = inode->i_atime = inode->i_mtime; 443 444 return 0; 445 } 446 447 struct inode *fat_build_inode(struct super_block *sb, 448 struct msdos_dir_entry *de, loff_t i_pos) 449 { 450 struct inode *inode; 451 int err; 452 453 inode = fat_iget(sb, i_pos); 454 if (inode) 455 goto out; 456 inode = new_inode(sb); 457 if (!inode) { 458 inode = ERR_PTR(-ENOMEM); 459 goto out; 460 } 461 inode->i_ino = iunique(sb, MSDOS_ROOT_INO); 462 inode->i_version = 1; 463 err = fat_fill_inode(inode, de); 464 if (err) { 465 iput(inode); 466 inode = ERR_PTR(err); 467 goto out; 468 } 469 fat_attach(inode, i_pos); 470 insert_inode_hash(inode); 471 out: 472 return inode; 473 } 474 475 EXPORT_SYMBOL_GPL(fat_build_inode); 476 477 static void fat_evict_inode(struct inode *inode) 478 { 479 truncate_inode_pages(&inode->i_data, 0); 480 if (!inode->i_nlink) { 481 inode->i_size = 0; 482 fat_truncate_blocks(inode, 0); 483 } 484 invalidate_inode_buffers(inode); 485 clear_inode(inode); 486 fat_cache_inval_inode(inode); 487 fat_detach(inode); 488 } 489 490 static void fat_put_super(struct super_block *sb) 491 { 492 struct msdos_sb_info *sbi = MSDOS_SB(sb); 493 494 iput(sbi->fsinfo_inode); 495 iput(sbi->fat_inode); 496 497 unload_nls(sbi->nls_disk); 498 unload_nls(sbi->nls_io); 499 500 if (sbi->options.iocharset != fat_default_iocharset) 501 kfree(sbi->options.iocharset); 502 503 sb->s_fs_info = NULL; 504 kfree(sbi); 505 } 506 507 static struct kmem_cache *fat_inode_cachep; 508 509 static struct inode *fat_alloc_inode(struct super_block *sb) 510 { 511 struct msdos_inode_info *ei; 512 ei = kmem_cache_alloc(fat_inode_cachep, GFP_NOFS); 513 if (!ei) 514 return NULL; 515 516 init_rwsem(&ei->truncate_lock); 517 return &ei->vfs_inode; 518 } 519 520 static void fat_i_callback(struct rcu_head *head) 521 { 522 struct inode *inode = container_of(head, struct inode, i_rcu); 523 kmem_cache_free(fat_inode_cachep, MSDOS_I(inode)); 524 } 525 526 static void fat_destroy_inode(struct inode *inode) 527 { 528 call_rcu(&inode->i_rcu, fat_i_callback); 529 } 530 531 static void init_once(void *foo) 532 { 533 struct msdos_inode_info *ei = (struct msdos_inode_info *)foo; 534 535 spin_lock_init(&ei->cache_lru_lock); 536 ei->nr_caches = 0; 537 ei->cache_valid_id = FAT_CACHE_VALID + 1; 538 INIT_LIST_HEAD(&ei->cache_lru); 539 INIT_HLIST_NODE(&ei->i_fat_hash); 540 INIT_HLIST_NODE(&ei->i_dir_hash); 541 inode_init_once(&ei->vfs_inode); 542 } 543 544 static int __init fat_init_inodecache(void) 545 { 546 fat_inode_cachep = kmem_cache_create("fat_inode_cache", 547 sizeof(struct msdos_inode_info), 548 0, (SLAB_RECLAIM_ACCOUNT| 549 SLAB_MEM_SPREAD), 550 init_once); 551 if (fat_inode_cachep == NULL) 552 return -ENOMEM; 553 return 0; 554 } 555 556 static void __exit fat_destroy_inodecache(void) 557 { 558 /* 559 * Make sure all delayed rcu free inodes are flushed before we 560 * destroy cache. 561 */ 562 rcu_barrier(); 563 kmem_cache_destroy(fat_inode_cachep); 564 } 565 566 static int fat_remount(struct super_block *sb, int *flags, char *data) 567 { 568 struct msdos_sb_info *sbi = MSDOS_SB(sb); 569 *flags |= MS_NODIRATIME | (sbi->options.isvfat ? 0 : MS_NOATIME); 570 return 0; 571 } 572 573 static int fat_statfs(struct dentry *dentry, struct kstatfs *buf) 574 { 575 struct super_block *sb = dentry->d_sb; 576 struct msdos_sb_info *sbi = MSDOS_SB(sb); 577 u64 id = huge_encode_dev(sb->s_bdev->bd_dev); 578 579 /* If the count of free cluster is still unknown, counts it here. */ 580 if (sbi->free_clusters == -1 || !sbi->free_clus_valid) { 581 int err = fat_count_free_clusters(dentry->d_sb); 582 if (err) 583 return err; 584 } 585 586 buf->f_type = dentry->d_sb->s_magic; 587 buf->f_bsize = sbi->cluster_size; 588 buf->f_blocks = sbi->max_cluster - FAT_START_ENT; 589 buf->f_bfree = sbi->free_clusters; 590 buf->f_bavail = sbi->free_clusters; 591 buf->f_fsid.val[0] = (u32)id; 592 buf->f_fsid.val[1] = (u32)(id >> 32); 593 buf->f_namelen = 594 (sbi->options.isvfat ? FAT_LFN_LEN : 12) * NLS_MAX_CHARSET_SIZE; 595 596 return 0; 597 } 598 599 static inline loff_t fat_i_pos_read(struct msdos_sb_info *sbi, 600 struct inode *inode) 601 { 602 loff_t i_pos; 603 #if BITS_PER_LONG == 32 604 spin_lock(&sbi->inode_hash_lock); 605 #endif 606 i_pos = MSDOS_I(inode)->i_pos; 607 #if BITS_PER_LONG == 32 608 spin_unlock(&sbi->inode_hash_lock); 609 #endif 610 return i_pos; 611 } 612 613 static int __fat_write_inode(struct inode *inode, int wait) 614 { 615 struct super_block *sb = inode->i_sb; 616 struct msdos_sb_info *sbi = MSDOS_SB(sb); 617 struct buffer_head *bh; 618 struct msdos_dir_entry *raw_entry; 619 loff_t i_pos; 620 int err; 621 622 if (inode->i_ino == MSDOS_ROOT_INO) 623 return 0; 624 625 retry: 626 i_pos = fat_i_pos_read(sbi, inode); 627 if (!i_pos) 628 return 0; 629 630 bh = sb_bread(sb, i_pos >> sbi->dir_per_block_bits); 631 if (!bh) { 632 fat_msg(sb, KERN_ERR, "unable to read inode block " 633 "for updating (i_pos %lld)", i_pos); 634 return -EIO; 635 } 636 spin_lock(&sbi->inode_hash_lock); 637 if (i_pos != MSDOS_I(inode)->i_pos) { 638 spin_unlock(&sbi->inode_hash_lock); 639 brelse(bh); 640 goto retry; 641 } 642 643 raw_entry = &((struct msdos_dir_entry *) (bh->b_data)) 644 [i_pos & (sbi->dir_per_block - 1)]; 645 if (S_ISDIR(inode->i_mode)) 646 raw_entry->size = 0; 647 else 648 raw_entry->size = cpu_to_le32(inode->i_size); 649 raw_entry->attr = fat_make_attrs(inode); 650 fat_set_start(raw_entry, MSDOS_I(inode)->i_logstart); 651 fat_time_unix2fat(sbi, &inode->i_mtime, &raw_entry->time, 652 &raw_entry->date, NULL); 653 if (sbi->options.isvfat) { 654 __le16 atime; 655 fat_time_unix2fat(sbi, &inode->i_ctime, &raw_entry->ctime, 656 &raw_entry->cdate, &raw_entry->ctime_cs); 657 fat_time_unix2fat(sbi, &inode->i_atime, &atime, 658 &raw_entry->adate, NULL); 659 } 660 spin_unlock(&sbi->inode_hash_lock); 661 mark_buffer_dirty(bh); 662 err = 0; 663 if (wait) 664 err = sync_dirty_buffer(bh); 665 brelse(bh); 666 return err; 667 } 668 669 static int fat_write_inode(struct inode *inode, struct writeback_control *wbc) 670 { 671 int err; 672 673 if (inode->i_ino == MSDOS_FSINFO_INO) { 674 struct super_block *sb = inode->i_sb; 675 676 mutex_lock(&MSDOS_SB(sb)->s_lock); 677 err = fat_clusters_flush(sb); 678 mutex_unlock(&MSDOS_SB(sb)->s_lock); 679 } else 680 err = __fat_write_inode(inode, wbc->sync_mode == WB_SYNC_ALL); 681 682 return err; 683 } 684 685 int fat_sync_inode(struct inode *inode) 686 { 687 return __fat_write_inode(inode, 1); 688 } 689 690 EXPORT_SYMBOL_GPL(fat_sync_inode); 691 692 static int fat_show_options(struct seq_file *m, struct dentry *root); 693 static const struct super_operations fat_sops = { 694 .alloc_inode = fat_alloc_inode, 695 .destroy_inode = fat_destroy_inode, 696 .write_inode = fat_write_inode, 697 .evict_inode = fat_evict_inode, 698 .put_super = fat_put_super, 699 .statfs = fat_statfs, 700 .remount_fs = fat_remount, 701 702 .show_options = fat_show_options, 703 }; 704 705 static const struct export_operations fat_export_ops = { 706 .fh_to_dentry = fat_fh_to_dentry, 707 .fh_to_parent = fat_fh_to_parent, 708 .get_parent = fat_get_parent, 709 }; 710 711 static int fat_show_options(struct seq_file *m, struct dentry *root) 712 { 713 struct msdos_sb_info *sbi = MSDOS_SB(root->d_sb); 714 struct fat_mount_options *opts = &sbi->options; 715 int isvfat = opts->isvfat; 716 717 if (!uid_eq(opts->fs_uid, GLOBAL_ROOT_UID)) 718 seq_printf(m, ",uid=%u", 719 from_kuid_munged(&init_user_ns, opts->fs_uid)); 720 if (!gid_eq(opts->fs_gid, GLOBAL_ROOT_GID)) 721 seq_printf(m, ",gid=%u", 722 from_kgid_munged(&init_user_ns, opts->fs_gid)); 723 seq_printf(m, ",fmask=%04o", opts->fs_fmask); 724 seq_printf(m, ",dmask=%04o", opts->fs_dmask); 725 if (opts->allow_utime) 726 seq_printf(m, ",allow_utime=%04o", opts->allow_utime); 727 if (sbi->nls_disk) 728 seq_printf(m, ",codepage=%s", sbi->nls_disk->charset); 729 if (isvfat) { 730 if (sbi->nls_io) 731 seq_printf(m, ",iocharset=%s", sbi->nls_io->charset); 732 733 switch (opts->shortname) { 734 case VFAT_SFN_DISPLAY_WIN95 | VFAT_SFN_CREATE_WIN95: 735 seq_puts(m, ",shortname=win95"); 736 break; 737 case VFAT_SFN_DISPLAY_WINNT | VFAT_SFN_CREATE_WINNT: 738 seq_puts(m, ",shortname=winnt"); 739 break; 740 case VFAT_SFN_DISPLAY_WINNT | VFAT_SFN_CREATE_WIN95: 741 seq_puts(m, ",shortname=mixed"); 742 break; 743 case VFAT_SFN_DISPLAY_LOWER | VFAT_SFN_CREATE_WIN95: 744 seq_puts(m, ",shortname=lower"); 745 break; 746 default: 747 seq_puts(m, ",shortname=unknown"); 748 break; 749 } 750 } 751 if (opts->name_check != 'n') 752 seq_printf(m, ",check=%c", opts->name_check); 753 if (opts->usefree) 754 seq_puts(m, ",usefree"); 755 if (opts->quiet) 756 seq_puts(m, ",quiet"); 757 if (opts->nfs) 758 seq_puts(m, ",nfs"); 759 if (opts->showexec) 760 seq_puts(m, ",showexec"); 761 if (opts->sys_immutable) 762 seq_puts(m, ",sys_immutable"); 763 if (!isvfat) { 764 if (opts->dotsOK) 765 seq_puts(m, ",dotsOK=yes"); 766 if (opts->nocase) 767 seq_puts(m, ",nocase"); 768 } else { 769 if (opts->utf8) 770 seq_puts(m, ",utf8"); 771 if (opts->unicode_xlate) 772 seq_puts(m, ",uni_xlate"); 773 if (!opts->numtail) 774 seq_puts(m, ",nonumtail"); 775 if (opts->rodir) 776 seq_puts(m, ",rodir"); 777 } 778 if (opts->flush) 779 seq_puts(m, ",flush"); 780 if (opts->tz_utc) 781 seq_puts(m, ",tz=UTC"); 782 if (opts->errors == FAT_ERRORS_CONT) 783 seq_puts(m, ",errors=continue"); 784 else if (opts->errors == FAT_ERRORS_PANIC) 785 seq_puts(m, ",errors=panic"); 786 else 787 seq_puts(m, ",errors=remount-ro"); 788 if (opts->discard) 789 seq_puts(m, ",discard"); 790 791 return 0; 792 } 793 794 enum { 795 Opt_check_n, Opt_check_r, Opt_check_s, Opt_uid, Opt_gid, 796 Opt_umask, Opt_dmask, Opt_fmask, Opt_allow_utime, Opt_codepage, 797 Opt_usefree, Opt_nocase, Opt_quiet, Opt_showexec, Opt_debug, 798 Opt_immutable, Opt_dots, Opt_nodots, 799 Opt_charset, Opt_shortname_lower, Opt_shortname_win95, 800 Opt_shortname_winnt, Opt_shortname_mixed, Opt_utf8_no, Opt_utf8_yes, 801 Opt_uni_xl_no, Opt_uni_xl_yes, Opt_nonumtail_no, Opt_nonumtail_yes, 802 Opt_obsolete, Opt_flush, Opt_tz_utc, Opt_rodir, Opt_err_cont, 803 Opt_err_panic, Opt_err_ro, Opt_discard, Opt_nfs, Opt_err, 804 }; 805 806 static const match_table_t fat_tokens = { 807 {Opt_check_r, "check=relaxed"}, 808 {Opt_check_s, "check=strict"}, 809 {Opt_check_n, "check=normal"}, 810 {Opt_check_r, "check=r"}, 811 {Opt_check_s, "check=s"}, 812 {Opt_check_n, "check=n"}, 813 {Opt_uid, "uid=%u"}, 814 {Opt_gid, "gid=%u"}, 815 {Opt_umask, "umask=%o"}, 816 {Opt_dmask, "dmask=%o"}, 817 {Opt_fmask, "fmask=%o"}, 818 {Opt_allow_utime, "allow_utime=%o"}, 819 {Opt_codepage, "codepage=%u"}, 820 {Opt_usefree, "usefree"}, 821 {Opt_nocase, "nocase"}, 822 {Opt_quiet, "quiet"}, 823 {Opt_showexec, "showexec"}, 824 {Opt_debug, "debug"}, 825 {Opt_immutable, "sys_immutable"}, 826 {Opt_flush, "flush"}, 827 {Opt_tz_utc, "tz=UTC"}, 828 {Opt_err_cont, "errors=continue"}, 829 {Opt_err_panic, "errors=panic"}, 830 {Opt_err_ro, "errors=remount-ro"}, 831 {Opt_discard, "discard"}, 832 {Opt_nfs, "nfs"}, 833 {Opt_obsolete, "conv=binary"}, 834 {Opt_obsolete, "conv=text"}, 835 {Opt_obsolete, "conv=auto"}, 836 {Opt_obsolete, "conv=b"}, 837 {Opt_obsolete, "conv=t"}, 838 {Opt_obsolete, "conv=a"}, 839 {Opt_obsolete, "fat=%u"}, 840 {Opt_obsolete, "blocksize=%u"}, 841 {Opt_obsolete, "cvf_format=%20s"}, 842 {Opt_obsolete, "cvf_options=%100s"}, 843 {Opt_obsolete, "posix"}, 844 {Opt_err, NULL}, 845 }; 846 static const match_table_t msdos_tokens = { 847 {Opt_nodots, "nodots"}, 848 {Opt_nodots, "dotsOK=no"}, 849 {Opt_dots, "dots"}, 850 {Opt_dots, "dotsOK=yes"}, 851 {Opt_err, NULL} 852 }; 853 static const match_table_t vfat_tokens = { 854 {Opt_charset, "iocharset=%s"}, 855 {Opt_shortname_lower, "shortname=lower"}, 856 {Opt_shortname_win95, "shortname=win95"}, 857 {Opt_shortname_winnt, "shortname=winnt"}, 858 {Opt_shortname_mixed, "shortname=mixed"}, 859 {Opt_utf8_no, "utf8=0"}, /* 0 or no or false */ 860 {Opt_utf8_no, "utf8=no"}, 861 {Opt_utf8_no, "utf8=false"}, 862 {Opt_utf8_yes, "utf8=1"}, /* empty or 1 or yes or true */ 863 {Opt_utf8_yes, "utf8=yes"}, 864 {Opt_utf8_yes, "utf8=true"}, 865 {Opt_utf8_yes, "utf8"}, 866 {Opt_uni_xl_no, "uni_xlate=0"}, /* 0 or no or false */ 867 {Opt_uni_xl_no, "uni_xlate=no"}, 868 {Opt_uni_xl_no, "uni_xlate=false"}, 869 {Opt_uni_xl_yes, "uni_xlate=1"}, /* empty or 1 or yes or true */ 870 {Opt_uni_xl_yes, "uni_xlate=yes"}, 871 {Opt_uni_xl_yes, "uni_xlate=true"}, 872 {Opt_uni_xl_yes, "uni_xlate"}, 873 {Opt_nonumtail_no, "nonumtail=0"}, /* 0 or no or false */ 874 {Opt_nonumtail_no, "nonumtail=no"}, 875 {Opt_nonumtail_no, "nonumtail=false"}, 876 {Opt_nonumtail_yes, "nonumtail=1"}, /* empty or 1 or yes or true */ 877 {Opt_nonumtail_yes, "nonumtail=yes"}, 878 {Opt_nonumtail_yes, "nonumtail=true"}, 879 {Opt_nonumtail_yes, "nonumtail"}, 880 {Opt_rodir, "rodir"}, 881 {Opt_err, NULL} 882 }; 883 884 static int parse_options(struct super_block *sb, char *options, int is_vfat, 885 int silent, int *debug, struct fat_mount_options *opts) 886 { 887 char *p; 888 substring_t args[MAX_OPT_ARGS]; 889 int option; 890 char *iocharset; 891 892 opts->isvfat = is_vfat; 893 894 opts->fs_uid = current_uid(); 895 opts->fs_gid = current_gid(); 896 opts->fs_fmask = opts->fs_dmask = current_umask(); 897 opts->allow_utime = -1; 898 opts->codepage = fat_default_codepage; 899 opts->iocharset = fat_default_iocharset; 900 if (is_vfat) { 901 opts->shortname = VFAT_SFN_DISPLAY_WINNT|VFAT_SFN_CREATE_WIN95; 902 opts->rodir = 0; 903 } else { 904 opts->shortname = 0; 905 opts->rodir = 1; 906 } 907 opts->name_check = 'n'; 908 opts->quiet = opts->showexec = opts->sys_immutable = opts->dotsOK = 0; 909 opts->utf8 = opts->unicode_xlate = 0; 910 opts->numtail = 1; 911 opts->usefree = opts->nocase = 0; 912 opts->tz_utc = 0; 913 opts->nfs = 0; 914 opts->errors = FAT_ERRORS_RO; 915 *debug = 0; 916 917 if (!options) 918 goto out; 919 920 while ((p = strsep(&options, ",")) != NULL) { 921 int token; 922 if (!*p) 923 continue; 924 925 token = match_token(p, fat_tokens, args); 926 if (token == Opt_err) { 927 if (is_vfat) 928 token = match_token(p, vfat_tokens, args); 929 else 930 token = match_token(p, msdos_tokens, args); 931 } 932 switch (token) { 933 case Opt_check_s: 934 opts->name_check = 's'; 935 break; 936 case Opt_check_r: 937 opts->name_check = 'r'; 938 break; 939 case Opt_check_n: 940 opts->name_check = 'n'; 941 break; 942 case Opt_usefree: 943 opts->usefree = 1; 944 break; 945 case Opt_nocase: 946 if (!is_vfat) 947 opts->nocase = 1; 948 else { 949 /* for backward compatibility */ 950 opts->shortname = VFAT_SFN_DISPLAY_WIN95 951 | VFAT_SFN_CREATE_WIN95; 952 } 953 break; 954 case Opt_quiet: 955 opts->quiet = 1; 956 break; 957 case Opt_showexec: 958 opts->showexec = 1; 959 break; 960 case Opt_debug: 961 *debug = 1; 962 break; 963 case Opt_immutable: 964 opts->sys_immutable = 1; 965 break; 966 case Opt_uid: 967 if (match_int(&args[0], &option)) 968 return 0; 969 opts->fs_uid = make_kuid(current_user_ns(), option); 970 if (!uid_valid(opts->fs_uid)) 971 return 0; 972 break; 973 case Opt_gid: 974 if (match_int(&args[0], &option)) 975 return 0; 976 opts->fs_gid = make_kgid(current_user_ns(), option); 977 if (!gid_valid(opts->fs_gid)) 978 return 0; 979 break; 980 case Opt_umask: 981 if (match_octal(&args[0], &option)) 982 return 0; 983 opts->fs_fmask = opts->fs_dmask = option; 984 break; 985 case Opt_dmask: 986 if (match_octal(&args[0], &option)) 987 return 0; 988 opts->fs_dmask = option; 989 break; 990 case Opt_fmask: 991 if (match_octal(&args[0], &option)) 992 return 0; 993 opts->fs_fmask = option; 994 break; 995 case Opt_allow_utime: 996 if (match_octal(&args[0], &option)) 997 return 0; 998 opts->allow_utime = option & (S_IWGRP | S_IWOTH); 999 break; 1000 case Opt_codepage: 1001 if (match_int(&args[0], &option)) 1002 return 0; 1003 opts->codepage = option; 1004 break; 1005 case Opt_flush: 1006 opts->flush = 1; 1007 break; 1008 case Opt_tz_utc: 1009 opts->tz_utc = 1; 1010 break; 1011 case Opt_err_cont: 1012 opts->errors = FAT_ERRORS_CONT; 1013 break; 1014 case Opt_err_panic: 1015 opts->errors = FAT_ERRORS_PANIC; 1016 break; 1017 case Opt_err_ro: 1018 opts->errors = FAT_ERRORS_RO; 1019 break; 1020 1021 /* msdos specific */ 1022 case Opt_dots: 1023 opts->dotsOK = 1; 1024 break; 1025 case Opt_nodots: 1026 opts->dotsOK = 0; 1027 break; 1028 1029 /* vfat specific */ 1030 case Opt_charset: 1031 if (opts->iocharset != fat_default_iocharset) 1032 kfree(opts->iocharset); 1033 iocharset = match_strdup(&args[0]); 1034 if (!iocharset) 1035 return -ENOMEM; 1036 opts->iocharset = iocharset; 1037 break; 1038 case Opt_shortname_lower: 1039 opts->shortname = VFAT_SFN_DISPLAY_LOWER 1040 | VFAT_SFN_CREATE_WIN95; 1041 break; 1042 case Opt_shortname_win95: 1043 opts->shortname = VFAT_SFN_DISPLAY_WIN95 1044 | VFAT_SFN_CREATE_WIN95; 1045 break; 1046 case Opt_shortname_winnt: 1047 opts->shortname = VFAT_SFN_DISPLAY_WINNT 1048 | VFAT_SFN_CREATE_WINNT; 1049 break; 1050 case Opt_shortname_mixed: 1051 opts->shortname = VFAT_SFN_DISPLAY_WINNT 1052 | VFAT_SFN_CREATE_WIN95; 1053 break; 1054 case Opt_utf8_no: /* 0 or no or false */ 1055 opts->utf8 = 0; 1056 break; 1057 case Opt_utf8_yes: /* empty or 1 or yes or true */ 1058 opts->utf8 = 1; 1059 break; 1060 case Opt_uni_xl_no: /* 0 or no or false */ 1061 opts->unicode_xlate = 0; 1062 break; 1063 case Opt_uni_xl_yes: /* empty or 1 or yes or true */ 1064 opts->unicode_xlate = 1; 1065 break; 1066 case Opt_nonumtail_no: /* 0 or no or false */ 1067 opts->numtail = 1; /* negated option */ 1068 break; 1069 case Opt_nonumtail_yes: /* empty or 1 or yes or true */ 1070 opts->numtail = 0; /* negated option */ 1071 break; 1072 case Opt_rodir: 1073 opts->rodir = 1; 1074 break; 1075 case Opt_discard: 1076 opts->discard = 1; 1077 break; 1078 case Opt_nfs: 1079 opts->nfs = 1; 1080 break; 1081 1082 /* obsolete mount options */ 1083 case Opt_obsolete: 1084 fat_msg(sb, KERN_INFO, "\"%s\" option is obsolete, " 1085 "not supported now", p); 1086 break; 1087 /* unknown option */ 1088 default: 1089 if (!silent) { 1090 fat_msg(sb, KERN_ERR, 1091 "Unrecognized mount option \"%s\" " 1092 "or missing value", p); 1093 } 1094 return -EINVAL; 1095 } 1096 } 1097 1098 out: 1099 /* UTF-8 doesn't provide FAT semantics */ 1100 if (!strcmp(opts->iocharset, "utf8")) { 1101 fat_msg(sb, KERN_WARNING, "utf8 is not a recommended IO charset" 1102 " for FAT filesystems, filesystem will be " 1103 "case sensitive!"); 1104 } 1105 1106 /* If user doesn't specify allow_utime, it's initialized from dmask. */ 1107 if (opts->allow_utime == (unsigned short)-1) 1108 opts->allow_utime = ~opts->fs_dmask & (S_IWGRP | S_IWOTH); 1109 if (opts->unicode_xlate) 1110 opts->utf8 = 0; 1111 1112 return 0; 1113 } 1114 1115 static int fat_read_root(struct inode *inode) 1116 { 1117 struct super_block *sb = inode->i_sb; 1118 struct msdos_sb_info *sbi = MSDOS_SB(sb); 1119 int error; 1120 1121 MSDOS_I(inode)->i_pos = 0; 1122 inode->i_uid = sbi->options.fs_uid; 1123 inode->i_gid = sbi->options.fs_gid; 1124 inode->i_version++; 1125 inode->i_generation = 0; 1126 inode->i_mode = fat_make_mode(sbi, ATTR_DIR, S_IRWXUGO); 1127 inode->i_op = sbi->dir_ops; 1128 inode->i_fop = &fat_dir_operations; 1129 if (sbi->fat_bits == 32) { 1130 MSDOS_I(inode)->i_start = sbi->root_cluster; 1131 error = fat_calc_dir_size(inode); 1132 if (error < 0) 1133 return error; 1134 } else { 1135 MSDOS_I(inode)->i_start = 0; 1136 inode->i_size = sbi->dir_entries * sizeof(struct msdos_dir_entry); 1137 } 1138 inode->i_blocks = ((inode->i_size + (sbi->cluster_size - 1)) 1139 & ~((loff_t)sbi->cluster_size - 1)) >> 9; 1140 MSDOS_I(inode)->i_logstart = 0; 1141 MSDOS_I(inode)->mmu_private = inode->i_size; 1142 1143 fat_save_attrs(inode, ATTR_DIR); 1144 inode->i_mtime.tv_sec = inode->i_atime.tv_sec = inode->i_ctime.tv_sec = 0; 1145 inode->i_mtime.tv_nsec = inode->i_atime.tv_nsec = inode->i_ctime.tv_nsec = 0; 1146 set_nlink(inode, fat_subdirs(inode)+2); 1147 1148 return 0; 1149 } 1150 1151 /* 1152 * Read the super block of an MS-DOS FS. 1153 */ 1154 int fat_fill_super(struct super_block *sb, void *data, int silent, int isvfat, 1155 void (*setup)(struct super_block *)) 1156 { 1157 struct inode *root_inode = NULL, *fat_inode = NULL; 1158 struct inode *fsinfo_inode = NULL; 1159 struct buffer_head *bh; 1160 struct fat_boot_sector *b; 1161 struct msdos_sb_info *sbi; 1162 u16 logical_sector_size; 1163 u32 total_sectors, total_clusters, fat_clusters, rootdir_sectors; 1164 int debug; 1165 unsigned int media; 1166 long error; 1167 char buf[50]; 1168 1169 /* 1170 * GFP_KERNEL is ok here, because while we do hold the 1171 * supeblock lock, memory pressure can't call back into 1172 * the filesystem, since we're only just about to mount 1173 * it and have no inodes etc active! 1174 */ 1175 sbi = kzalloc(sizeof(struct msdos_sb_info), GFP_KERNEL); 1176 if (!sbi) 1177 return -ENOMEM; 1178 sb->s_fs_info = sbi; 1179 1180 sb->s_flags |= MS_NODIRATIME; 1181 sb->s_magic = MSDOS_SUPER_MAGIC; 1182 sb->s_op = &fat_sops; 1183 sb->s_export_op = &fat_export_ops; 1184 ratelimit_state_init(&sbi->ratelimit, DEFAULT_RATELIMIT_INTERVAL, 1185 DEFAULT_RATELIMIT_BURST); 1186 1187 error = parse_options(sb, data, isvfat, silent, &debug, &sbi->options); 1188 if (error) 1189 goto out_fail; 1190 1191 setup(sb); /* flavour-specific stuff that needs options */ 1192 1193 error = -EIO; 1194 sb_min_blocksize(sb, 512); 1195 bh = sb_bread(sb, 0); 1196 if (bh == NULL) { 1197 fat_msg(sb, KERN_ERR, "unable to read boot sector"); 1198 goto out_fail; 1199 } 1200 1201 b = (struct fat_boot_sector *) bh->b_data; 1202 if (!b->reserved) { 1203 if (!silent) 1204 fat_msg(sb, KERN_ERR, "bogus number of reserved sectors"); 1205 brelse(bh); 1206 goto out_invalid; 1207 } 1208 if (!b->fats) { 1209 if (!silent) 1210 fat_msg(sb, KERN_ERR, "bogus number of FAT structure"); 1211 brelse(bh); 1212 goto out_invalid; 1213 } 1214 1215 /* 1216 * Earlier we checked here that b->secs_track and b->head are nonzero, 1217 * but it turns out valid FAT filesystems can have zero there. 1218 */ 1219 1220 media = b->media; 1221 if (!fat_valid_media(media)) { 1222 if (!silent) 1223 fat_msg(sb, KERN_ERR, "invalid media value (0x%02x)", 1224 media); 1225 brelse(bh); 1226 goto out_invalid; 1227 } 1228 logical_sector_size = get_unaligned_le16(&b->sector_size); 1229 if (!is_power_of_2(logical_sector_size) 1230 || (logical_sector_size < 512) 1231 || (logical_sector_size > 4096)) { 1232 if (!silent) 1233 fat_msg(sb, KERN_ERR, "bogus logical sector size %u", 1234 logical_sector_size); 1235 brelse(bh); 1236 goto out_invalid; 1237 } 1238 sbi->sec_per_clus = b->sec_per_clus; 1239 if (!is_power_of_2(sbi->sec_per_clus)) { 1240 if (!silent) 1241 fat_msg(sb, KERN_ERR, "bogus sectors per cluster %u", 1242 sbi->sec_per_clus); 1243 brelse(bh); 1244 goto out_invalid; 1245 } 1246 1247 if (logical_sector_size < sb->s_blocksize) { 1248 fat_msg(sb, KERN_ERR, "logical sector size too small for device" 1249 " (logical sector size = %u)", logical_sector_size); 1250 brelse(bh); 1251 goto out_fail; 1252 } 1253 if (logical_sector_size > sb->s_blocksize) { 1254 brelse(bh); 1255 1256 if (!sb_set_blocksize(sb, logical_sector_size)) { 1257 fat_msg(sb, KERN_ERR, "unable to set blocksize %u", 1258 logical_sector_size); 1259 goto out_fail; 1260 } 1261 bh = sb_bread(sb, 0); 1262 if (bh == NULL) { 1263 fat_msg(sb, KERN_ERR, "unable to read boot sector" 1264 " (logical sector size = %lu)", 1265 sb->s_blocksize); 1266 goto out_fail; 1267 } 1268 b = (struct fat_boot_sector *) bh->b_data; 1269 } 1270 1271 mutex_init(&sbi->s_lock); 1272 sbi->cluster_size = sb->s_blocksize * sbi->sec_per_clus; 1273 sbi->cluster_bits = ffs(sbi->cluster_size) - 1; 1274 sbi->fats = b->fats; 1275 sbi->fat_bits = 0; /* Don't know yet */ 1276 sbi->fat_start = le16_to_cpu(b->reserved); 1277 sbi->fat_length = le16_to_cpu(b->fat_length); 1278 sbi->root_cluster = 0; 1279 sbi->free_clusters = -1; /* Don't know yet */ 1280 sbi->free_clus_valid = 0; 1281 sbi->prev_free = FAT_START_ENT; 1282 sb->s_maxbytes = 0xffffffff; 1283 1284 if (!sbi->fat_length && b->fat32_length) { 1285 struct fat_boot_fsinfo *fsinfo; 1286 struct buffer_head *fsinfo_bh; 1287 1288 /* Must be FAT32 */ 1289 sbi->fat_bits = 32; 1290 sbi->fat_length = le32_to_cpu(b->fat32_length); 1291 sbi->root_cluster = le32_to_cpu(b->root_cluster); 1292 1293 /* MC - if info_sector is 0, don't multiply by 0 */ 1294 sbi->fsinfo_sector = le16_to_cpu(b->info_sector); 1295 if (sbi->fsinfo_sector == 0) 1296 sbi->fsinfo_sector = 1; 1297 1298 fsinfo_bh = sb_bread(sb, sbi->fsinfo_sector); 1299 if (fsinfo_bh == NULL) { 1300 fat_msg(sb, KERN_ERR, "bread failed, FSINFO block" 1301 " (sector = %lu)", sbi->fsinfo_sector); 1302 brelse(bh); 1303 goto out_fail; 1304 } 1305 1306 fsinfo = (struct fat_boot_fsinfo *)fsinfo_bh->b_data; 1307 if (!IS_FSINFO(fsinfo)) { 1308 fat_msg(sb, KERN_WARNING, "Invalid FSINFO signature: " 1309 "0x%08x, 0x%08x (sector = %lu)", 1310 le32_to_cpu(fsinfo->signature1), 1311 le32_to_cpu(fsinfo->signature2), 1312 sbi->fsinfo_sector); 1313 } else { 1314 if (sbi->options.usefree) 1315 sbi->free_clus_valid = 1; 1316 sbi->free_clusters = le32_to_cpu(fsinfo->free_clusters); 1317 sbi->prev_free = le32_to_cpu(fsinfo->next_cluster); 1318 } 1319 1320 brelse(fsinfo_bh); 1321 } 1322 1323 sbi->dir_per_block = sb->s_blocksize / sizeof(struct msdos_dir_entry); 1324 sbi->dir_per_block_bits = ffs(sbi->dir_per_block) - 1; 1325 1326 sbi->dir_start = sbi->fat_start + sbi->fats * sbi->fat_length; 1327 sbi->dir_entries = get_unaligned_le16(&b->dir_entries); 1328 if (sbi->dir_entries & (sbi->dir_per_block - 1)) { 1329 if (!silent) 1330 fat_msg(sb, KERN_ERR, "bogus directroy-entries per block" 1331 " (%u)", sbi->dir_entries); 1332 brelse(bh); 1333 goto out_invalid; 1334 } 1335 1336 rootdir_sectors = sbi->dir_entries 1337 * sizeof(struct msdos_dir_entry) / sb->s_blocksize; 1338 sbi->data_start = sbi->dir_start + rootdir_sectors; 1339 total_sectors = get_unaligned_le16(&b->sectors); 1340 if (total_sectors == 0) 1341 total_sectors = le32_to_cpu(b->total_sect); 1342 1343 total_clusters = (total_sectors - sbi->data_start) / sbi->sec_per_clus; 1344 1345 if (sbi->fat_bits != 32) 1346 sbi->fat_bits = (total_clusters > MAX_FAT12) ? 16 : 12; 1347 1348 /* check that FAT table does not overflow */ 1349 fat_clusters = sbi->fat_length * sb->s_blocksize * 8 / sbi->fat_bits; 1350 total_clusters = min(total_clusters, fat_clusters - FAT_START_ENT); 1351 if (total_clusters > MAX_FAT(sb)) { 1352 if (!silent) 1353 fat_msg(sb, KERN_ERR, "count of clusters too big (%u)", 1354 total_clusters); 1355 brelse(bh); 1356 goto out_invalid; 1357 } 1358 1359 sbi->max_cluster = total_clusters + FAT_START_ENT; 1360 /* check the free_clusters, it's not necessarily correct */ 1361 if (sbi->free_clusters != -1 && sbi->free_clusters > total_clusters) 1362 sbi->free_clusters = -1; 1363 /* check the prev_free, it's not necessarily correct */ 1364 sbi->prev_free %= sbi->max_cluster; 1365 if (sbi->prev_free < FAT_START_ENT) 1366 sbi->prev_free = FAT_START_ENT; 1367 1368 brelse(bh); 1369 1370 /* set up enough so that it can read an inode */ 1371 fat_hash_init(sb); 1372 dir_hash_init(sb); 1373 fat_ent_access_init(sb); 1374 1375 /* 1376 * The low byte of FAT's first entry must have same value with 1377 * media-field. But in real world, too many devices is 1378 * writing wrong value. So, removed that validity check. 1379 * 1380 * if (FAT_FIRST_ENT(sb, media) != first) 1381 */ 1382 1383 error = -EINVAL; 1384 sprintf(buf, "cp%d", sbi->options.codepage); 1385 sbi->nls_disk = load_nls(buf); 1386 if (!sbi->nls_disk) { 1387 fat_msg(sb, KERN_ERR, "codepage %s not found", buf); 1388 goto out_fail; 1389 } 1390 1391 /* FIXME: utf8 is using iocharset for upper/lower conversion */ 1392 if (sbi->options.isvfat) { 1393 sbi->nls_io = load_nls(sbi->options.iocharset); 1394 if (!sbi->nls_io) { 1395 fat_msg(sb, KERN_ERR, "IO charset %s not found", 1396 sbi->options.iocharset); 1397 goto out_fail; 1398 } 1399 } 1400 1401 error = -ENOMEM; 1402 fat_inode = new_inode(sb); 1403 if (!fat_inode) 1404 goto out_fail; 1405 MSDOS_I(fat_inode)->i_pos = 0; 1406 sbi->fat_inode = fat_inode; 1407 1408 fsinfo_inode = new_inode(sb); 1409 if (!fsinfo_inode) 1410 goto out_fail; 1411 fsinfo_inode->i_ino = MSDOS_FSINFO_INO; 1412 sbi->fsinfo_inode = fsinfo_inode; 1413 insert_inode_hash(fsinfo_inode); 1414 1415 root_inode = new_inode(sb); 1416 if (!root_inode) 1417 goto out_fail; 1418 root_inode->i_ino = MSDOS_ROOT_INO; 1419 root_inode->i_version = 1; 1420 error = fat_read_root(root_inode); 1421 if (error < 0) { 1422 iput(root_inode); 1423 goto out_fail; 1424 } 1425 error = -ENOMEM; 1426 insert_inode_hash(root_inode); 1427 fat_attach(root_inode, 0); 1428 sb->s_root = d_make_root(root_inode); 1429 if (!sb->s_root) { 1430 fat_msg(sb, KERN_ERR, "get root inode failed"); 1431 goto out_fail; 1432 } 1433 1434 return 0; 1435 1436 out_invalid: 1437 error = -EINVAL; 1438 if (!silent) 1439 fat_msg(sb, KERN_INFO, "Can't find a valid FAT filesystem"); 1440 1441 out_fail: 1442 if (fsinfo_inode) 1443 iput(fsinfo_inode); 1444 if (fat_inode) 1445 iput(fat_inode); 1446 unload_nls(sbi->nls_io); 1447 unload_nls(sbi->nls_disk); 1448 if (sbi->options.iocharset != fat_default_iocharset) 1449 kfree(sbi->options.iocharset); 1450 sb->s_fs_info = NULL; 1451 kfree(sbi); 1452 return error; 1453 } 1454 1455 EXPORT_SYMBOL_GPL(fat_fill_super); 1456 1457 /* 1458 * helper function for fat_flush_inodes. This writes both the inode 1459 * and the file data blocks, waiting for in flight data blocks before 1460 * the start of the call. It does not wait for any io started 1461 * during the call 1462 */ 1463 static int writeback_inode(struct inode *inode) 1464 { 1465 1466 int ret; 1467 1468 /* if we used wait=1, sync_inode_metadata waits for the io for the 1469 * inode to finish. So wait=0 is sent down to sync_inode_metadata 1470 * and filemap_fdatawrite is used for the data blocks 1471 */ 1472 ret = sync_inode_metadata(inode, 0); 1473 if (!ret) 1474 ret = filemap_fdatawrite(inode->i_mapping); 1475 return ret; 1476 } 1477 1478 /* 1479 * write data and metadata corresponding to i1 and i2. The io is 1480 * started but we do not wait for any of it to finish. 1481 * 1482 * filemap_flush is used for the block device, so if there is a dirty 1483 * page for a block already in flight, we will not wait and start the 1484 * io over again 1485 */ 1486 int fat_flush_inodes(struct super_block *sb, struct inode *i1, struct inode *i2) 1487 { 1488 int ret = 0; 1489 if (!MSDOS_SB(sb)->options.flush) 1490 return 0; 1491 if (i1) 1492 ret = writeback_inode(i1); 1493 if (!ret && i2) 1494 ret = writeback_inode(i2); 1495 if (!ret) { 1496 struct address_space *mapping = sb->s_bdev->bd_inode->i_mapping; 1497 ret = filemap_flush(mapping); 1498 } 1499 return ret; 1500 } 1501 EXPORT_SYMBOL_GPL(fat_flush_inodes); 1502 1503 static int __init init_fat_fs(void) 1504 { 1505 int err; 1506 1507 err = fat_cache_init(); 1508 if (err) 1509 return err; 1510 1511 err = fat_init_inodecache(); 1512 if (err) 1513 goto failed; 1514 1515 return 0; 1516 1517 failed: 1518 fat_cache_destroy(); 1519 return err; 1520 } 1521 1522 static void __exit exit_fat_fs(void) 1523 { 1524 fat_cache_destroy(); 1525 fat_destroy_inodecache(); 1526 } 1527 1528 module_init(init_fat_fs) 1529 module_exit(exit_fat_fs) 1530 1531 MODULE_LICENSE("GPL"); 1532