diff options
Diffstat (limited to 'fs/fat/inode.c')
-rw-r--r-- | fs/fat/inode.c | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/fs/fat/inode.c b/fs/fat/inode.c index 8e1b75c63c7f..7aaa21cf019a 100644 --- a/fs/fat/inode.c +++ b/fs/fat/inode.c | |||
@@ -337,8 +337,7 @@ static int fat_fill_inode(struct inode *inode, struct msdos_dir_entry *de) | |||
337 | 337 | ||
338 | if ((de->attr & ATTR_DIR) && !IS_FREE(de->name)) { | 338 | if ((de->attr & ATTR_DIR) && !IS_FREE(de->name)) { |
339 | inode->i_generation &= ~1; | 339 | inode->i_generation &= ~1; |
340 | inode->i_mode = MSDOS_MKMODE(de->attr, | 340 | inode->i_mode = fat_make_mode(sbi, de->attr, S_IRWXUGO); |
341 | S_IRWXUGO & ~sbi->options.fs_dmask) | S_IFDIR; | ||
342 | inode->i_op = sbi->dir_ops; | 341 | inode->i_op = sbi->dir_ops; |
343 | inode->i_fop = &fat_dir_operations; | 342 | inode->i_fop = &fat_dir_operations; |
344 | 343 | ||
@@ -355,10 +354,9 @@ static int fat_fill_inode(struct inode *inode, struct msdos_dir_entry *de) | |||
355 | inode->i_nlink = fat_subdirs(inode); | 354 | inode->i_nlink = fat_subdirs(inode); |
356 | } else { /* not a directory */ | 355 | } else { /* not a directory */ |
357 | inode->i_generation |= 1; | 356 | inode->i_generation |= 1; |
358 | inode->i_mode = MSDOS_MKMODE(de->attr, | 357 | inode->i_mode = fat_make_mode(sbi, de->attr, |
359 | ((sbi->options.showexec && !is_exec(de->name + 8)) | 358 | ((sbi->options.showexec && !is_exec(de->name + 8)) |
360 | ? S_IRUGO|S_IWUGO : S_IRWXUGO) | 359 | ? S_IRUGO|S_IWUGO : S_IRWXUGO)); |
361 | & ~sbi->options.fs_fmask) | S_IFREG; | ||
362 | MSDOS_I(inode)->i_start = le16_to_cpu(de->start); | 360 | MSDOS_I(inode)->i_start = le16_to_cpu(de->start); |
363 | if (sbi->fat_bits == 32) | 361 | if (sbi->fat_bits == 32) |
364 | MSDOS_I(inode)->i_start |= (le16_to_cpu(de->starthi) << 16); | 362 | MSDOS_I(inode)->i_start |= (le16_to_cpu(de->starthi) << 16); |
@@ -374,7 +372,8 @@ static int fat_fill_inode(struct inode *inode, struct msdos_dir_entry *de) | |||
374 | if (sbi->options.sys_immutable) | 372 | if (sbi->options.sys_immutable) |
375 | inode->i_flags |= S_IMMUTABLE; | 373 | inode->i_flags |= S_IMMUTABLE; |
376 | } | 374 | } |
377 | MSDOS_I(inode)->i_attrs = de->attr & ATTR_UNUSED; | 375 | fat_save_attrs(inode, de->attr); |
376 | |||
378 | inode->i_blocks = ((inode->i_size + (sbi->cluster_size - 1)) | 377 | inode->i_blocks = ((inode->i_size + (sbi->cluster_size - 1)) |
379 | & ~((loff_t)sbi->cluster_size - 1)) >> 9; | 378 | & ~((loff_t)sbi->cluster_size - 1)) >> 9; |
380 | 379 | ||
@@ -569,7 +568,7 @@ retry: | |||
569 | raw_entry->size = 0; | 568 | raw_entry->size = 0; |
570 | else | 569 | else |
571 | raw_entry->size = cpu_to_le32(inode->i_size); | 570 | raw_entry->size = cpu_to_le32(inode->i_size); |
572 | raw_entry->attr = fat_attr(inode); | 571 | raw_entry->attr = fat_make_attrs(inode); |
573 | raw_entry->start = cpu_to_le16(MSDOS_I(inode)->i_logstart); | 572 | raw_entry->start = cpu_to_le16(MSDOS_I(inode)->i_logstart); |
574 | raw_entry->starthi = cpu_to_le16(MSDOS_I(inode)->i_logstart >> 16); | 573 | raw_entry->starthi = cpu_to_le16(MSDOS_I(inode)->i_logstart >> 16); |
575 | fat_time_unix2fat(sbi, &inode->i_mtime, &raw_entry->time, | 574 | fat_time_unix2fat(sbi, &inode->i_mtime, &raw_entry->time, |
@@ -1105,7 +1104,7 @@ static int fat_read_root(struct inode *inode) | |||
1105 | inode->i_gid = sbi->options.fs_gid; | 1104 | inode->i_gid = sbi->options.fs_gid; |
1106 | inode->i_version++; | 1105 | inode->i_version++; |
1107 | inode->i_generation = 0; | 1106 | inode->i_generation = 0; |
1108 | inode->i_mode = (S_IRWXUGO & ~sbi->options.fs_dmask) | S_IFDIR; | 1107 | inode->i_mode = fat_make_mode(sbi, ATTR_DIR, S_IRWXUGO); |
1109 | inode->i_op = sbi->dir_ops; | 1108 | inode->i_op = sbi->dir_ops; |
1110 | inode->i_fop = &fat_dir_operations; | 1109 | inode->i_fop = &fat_dir_operations; |
1111 | if (sbi->fat_bits == 32) { | 1110 | if (sbi->fat_bits == 32) { |
@@ -1122,7 +1121,7 @@ static int fat_read_root(struct inode *inode) | |||
1122 | MSDOS_I(inode)->i_logstart = 0; | 1121 | MSDOS_I(inode)->i_logstart = 0; |
1123 | MSDOS_I(inode)->mmu_private = inode->i_size; | 1122 | MSDOS_I(inode)->mmu_private = inode->i_size; |
1124 | 1123 | ||
1125 | MSDOS_I(inode)->i_attrs = ATTR_NONE; | 1124 | fat_save_attrs(inode, ATTR_DIR); |
1126 | inode->i_mtime.tv_sec = inode->i_atime.tv_sec = inode->i_ctime.tv_sec = 0; | 1125 | inode->i_mtime.tv_sec = inode->i_atime.tv_sec = inode->i_ctime.tv_sec = 0; |
1127 | inode->i_mtime.tv_nsec = inode->i_atime.tv_nsec = inode->i_ctime.tv_nsec = 0; | 1126 | inode->i_mtime.tv_nsec = inode->i_atime.tv_nsec = inode->i_ctime.tv_nsec = 0; |
1128 | inode->i_nlink = fat_subdirs(inode)+2; | 1127 | inode->i_nlink = fat_subdirs(inode)+2; |