Commit e22a444275d1e7c80db5d8bec08fb8d0d79617ad
Committed by
Linus Torvalds
1 parent
f21735d587
fat: introduce a helper fat_get_blknr_offset()
Introduce helper function to get the block number and offset for a given i_pos value. Use it in __fat_write_inode() now and later on in nfs.c Signed-off-by: Namjae Jeon <namjae.jeon@samsung.com> Signed-off-by: Ravishankar N <ravi.n1@samsung.com> Signed-off-by: Amit Sahrawat <a.sahrawat@samsung.com> Acked-by: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Showing 2 changed files with 12 additions and 4 deletions Side-by-side Diff
fs/fat/fat.h
... | ... | @@ -218,6 +218,13 @@ |
218 | 218 | + sbi->data_start; |
219 | 219 | } |
220 | 220 | |
221 | +static inline void fat_get_blknr_offset(struct msdos_sb_info *sbi, | |
222 | + loff_t i_pos, sector_t *blknr, int *offset) | |
223 | +{ | |
224 | + *blknr = i_pos >> sbi->dir_per_block_bits; | |
225 | + *offset = i_pos & (sbi->dir_per_block - 1); | |
226 | +} | |
227 | + | |
221 | 228 | static inline loff_t fat_i_pos_read(struct msdos_sb_info *sbi, |
222 | 229 | struct inode *inode) |
223 | 230 | { |
fs/fat/inode.c
... | ... | @@ -662,7 +662,8 @@ |
662 | 662 | struct buffer_head *bh; |
663 | 663 | struct msdos_dir_entry *raw_entry; |
664 | 664 | loff_t i_pos; |
665 | - int err; | |
665 | + sector_t blocknr; | |
666 | + int err, offset; | |
666 | 667 | |
667 | 668 | if (inode->i_ino == MSDOS_ROOT_INO) |
668 | 669 | return 0; |
... | ... | @@ -672,7 +673,8 @@ |
672 | 673 | if (!i_pos) |
673 | 674 | return 0; |
674 | 675 | |
675 | - bh = sb_bread(sb, i_pos >> sbi->dir_per_block_bits); | |
676 | + fat_get_blknr_offset(sbi, i_pos, &blocknr, &offset); | |
677 | + bh = sb_bread(sb, blocknr); | |
676 | 678 | if (!bh) { |
677 | 679 | fat_msg(sb, KERN_ERR, "unable to read inode block " |
678 | 680 | "for updating (i_pos %lld)", i_pos); |
... | ... | @@ -685,8 +687,7 @@ |
685 | 687 | goto retry; |
686 | 688 | } |
687 | 689 | |
688 | - raw_entry = &((struct msdos_dir_entry *) (bh->b_data)) | |
689 | - [i_pos & (sbi->dir_per_block - 1)]; | |
690 | + raw_entry = &((struct msdos_dir_entry *) (bh->b_data))[offset]; | |
690 | 691 | if (S_ISDIR(inode->i_mode)) |
691 | 692 | raw_entry->size = 0; |
692 | 693 | else |