1355 int namelen = dentry->d_name.len;
1356 struct buffer_head *bh2;
1357 struct dx_root *root;
1358 struct dx_frame frames[2], *frame;
1359 struct dx_entry *entries;
1360 struct ext4_dir_entry_2 *de, *de2;
1361 char *data1, *top;
1362 unsigned len;
1363 int retval;
1364 unsigned blocksize;
1365 struct dx_hash_info hinfo;
1366 ext4_lblk_t block;
1367 struct fake_dirent *fde;
1368
1369 blocksize = dir->i_sb->s_blocksize;
1370 dxtrace(printk(KERN_DEBUG "Creating index\n"));
1371 retval = ext4_journal_get_write_access(handle, bh);
1372 if (retval) {
1373 ext4_std_error(dir->i_sb, retval);
1374 brelse(bh);
1375 return retval;
1376 }
1377 root = (struct dx_root *) bh->b_data;
1378
1379 bh2 = ext4_append(handle, dir, &block, &retval);
1380 if (!(bh2)) {
1381 brelse(bh);
1382 return retval;
1383 }
1384 EXT4_I(dir)->i_flags |= EXT4_INDEX_FL;
1385 data1 = bh2->b_data;
1386
1387
1388 fde = &root->dotdot;
1389 de = (struct ext4_dir_entry_2 *)((char *)fde +
1390 ext4_rec_len_from_disk(fde->rec_len));
1391 len = ((char *) root) + blocksize - (char *) de;
1392 memcpy (data1, de, len);
1393 de = (struct ext4_dir_entry_2 *) data1;
1394 top = data1 + len;
1395 while ((char *)(de2 = ext4_next_entry(de)) < top)