| .. | .. | 
|---|
| 398 | 398 |  		ei->i_size_ondisk += sbi->cluster_size; | 
|---|
| 399 | 399 |  		ei->i_size_aligned += sbi->cluster_size; | 
|---|
| 400 | 400 |  		ei->flags = p_dir->flags; | 
|---|
| 401 |  | -		inode->i_blocks += 1 << sbi->sect_per_clus_bits;  | 
|---|
 | 401 | +		inode->i_blocks += sbi->cluster_size >> 9;  | 
|---|
| 402 | 402 |  	} | 
|---|
| 403 | 403 |   | 
|---|
| 404 | 404 |  	return dentry; | 
|---|
| .. | .. | 
|---|
| 596 | 596 |  	struct exfat_inode_info *ei = EXFAT_I(dir); | 
|---|
| 597 | 597 |  	struct exfat_dentry *ep, *ep2; | 
|---|
| 598 | 598 |  	struct exfat_entry_set_cache *es; | 
|---|
 | 599 | +	/* for optimized dir & entry to prevent long traverse of cluster chain */  | 
|---|
 | 600 | +	struct exfat_hint hint_opt;  | 
|---|
| 599 | 601 |   | 
|---|
| 600 | 602 |  	if (qname->len == 0) | 
|---|
| 601 | 603 |  		return -ENOENT; | 
|---|
| .. | .. | 
|---|
| 619 | 621 |   | 
|---|
| 620 | 622 |  	/* search the file name for directories */ | 
|---|
| 621 | 623 |  	dentry = exfat_find_dir_entry(sb, ei, &cdir, &uni_name, | 
|---|
| 622 |  | -			num_entries, TYPE_ALL);  | 
|---|
 | 624 | +			num_entries, TYPE_ALL, &hint_opt);  | 
|---|
| 623 | 625 |   | 
|---|
| 624 | 626 |  	if (dentry < 0) | 
|---|
| 625 | 627 |  		return dentry; /* -error value */ | 
|---|
| .. | .. | 
|---|
| 628 | 630 |  	info->entry = dentry; | 
|---|
| 629 | 631 |  	info->num_subdirs = 0; | 
|---|
| 630 | 632 |   | 
|---|
 | 633 | +	/* adjust cdir to the optimized value */  | 
|---|
 | 634 | +	cdir.dir = hint_opt.clu;  | 
|---|
 | 635 | +	if (cdir.flags & ALLOC_NO_FAT_CHAIN)  | 
|---|
 | 636 | +		cdir.size -= dentry / sbi->dentries_per_clu;  | 
|---|
 | 637 | +	dentry = hint_opt.eidx;  | 
|---|
| 631 | 638 |  	es = exfat_get_dentry_set(sb, &cdir, dentry, ES_2_ENTRIES); | 
|---|
| 632 | 639 |  	if (!es) | 
|---|
| 633 | 640 |  		return -EIO; | 
|---|