diff options
Diffstat (limited to 'fs/fat/inode.c')
| -rw-r--r-- | fs/fat/inode.c | 13 | 
1 files changed, 6 insertions, 7 deletions
diff --git a/fs/fat/inode.c b/fs/fat/inode.c index a3d81ebf6d8..0038b32cb36 100644 --- a/fs/fat/inode.c +++ b/fs/fat/inode.c @@ -738,22 +738,21 @@ static int  fat_encode_fh(struct inode *inode, __u32 *fh, int *lenp, struct inode *parent)  {  	int len = *lenp; -	u32 ipos_h, ipos_m, ipos_l; +	struct msdos_sb_info *sbi = MSDOS_SB(inode->i_sb); +	loff_t i_pos;  	if (len < 5) {  		*lenp = 5;  		return 255; /* no room */  	} -	ipos_h = MSDOS_I(inode)->i_pos >> 8; -	ipos_m = (MSDOS_I(inode)->i_pos & 0xf0) << 24; -	ipos_l = (MSDOS_I(inode)->i_pos & 0x0f) << 28; +	i_pos = fat_i_pos_read(sbi, inode);  	*lenp = 5;  	fh[0] = inode->i_ino;  	fh[1] = inode->i_generation; -	fh[2] = ipos_h; -	fh[3] = ipos_m | MSDOS_I(inode)->i_logstart; -	fh[4] = ipos_l; +	fh[2] = i_pos >> 8; +	fh[3] = ((i_pos & 0xf0) << 24) | MSDOS_I(inode)->i_logstart; +	fh[4] = (i_pos & 0x0f) << 28;  	if (parent)  		fh[4] |= MSDOS_I(parent)->i_logstart;  	return 3;  |