2
* linux/fs/ext4/namei.c
4
* Copyright (C) 1992, 1993, 1994, 1995
5
* Remy Card (card@masi.ibp.fr)
6
* Laboratoire MASI - Institut Blaise Pascal
7
* Universite Pierre et Marie Curie (Paris VI)
11
* linux/fs/minix/namei.c
13
* Copyright (C) 1991, 1992 Linus Torvalds
15
* Big-endian to little-endian byte-swapping/bitmaps by
16
* David S. Miller (davem@caip.rutgers.edu), 1995
17
* Directory entry file type support and forward compatibility hooks
18
* for B-tree directories by Theodore Ts'o (tytso@mit.edu), 1998
19
* Hash Tree Directory indexing (c)
20
* Daniel Phillips, 2001
21
* Hash Tree Directory indexing porting
22
* Christopher Li, 2002
23
* Hash Tree Directory indexing cleanup
28
#include <linux/pagemap.h>
29
#include <linux/jbd2.h>
30
#include <linux/time.h>
31
#include <linux/fcntl.h>
32
#include <linux/stat.h>
33
#include <linux/string.h>
34
#include <linux/quotaops.h>
35
#include <linux/buffer_head.h>
36
#include <linux/bio.h>
38
#include "ext4_jbd2.h"
43
#include <trace/events/ext4.h>
45
* define how far ahead to read directories while searching them.
47
#define NAMEI_RA_CHUNKS 2
48
#define NAMEI_RA_BLOCKS 4
49
#define NAMEI_RA_SIZE (NAMEI_RA_CHUNKS * NAMEI_RA_BLOCKS)
50
#define NAMEI_RA_INDEX(c,b) (((c) * NAMEI_RA_BLOCKS) + (b))
52
static struct buffer_head *ext4_append(handle_t *handle,
54
ext4_lblk_t *block, int *err)
56
struct buffer_head *bh;
58
*block = inode->i_size >> inode->i_sb->s_blocksize_bits;
60
bh = ext4_bread(handle, inode, *block, 1, err);
62
inode->i_size += inode->i_sb->s_blocksize;
63
EXT4_I(inode)->i_disksize = inode->i_size;
64
*err = ext4_journal_get_write_access(handle, bh);
74
#define assert(test) J_ASSERT(test)
78
#define dxtrace(command) command
80
#define dxtrace(command)
104
* dx_root_info is laid out so that if it should somehow get overlaid by a
105
* dirent the two low bits of the hash version will be zero. Therefore, the
106
* hash version mod 4 should never be 0. Sincerely, the paranoia department.
111
struct fake_dirent dot;
113
struct fake_dirent dotdot;
117
__le32 reserved_zero;
119
u8 info_length; /* 8 */
124
struct dx_entry entries[0];
129
struct fake_dirent fake;
130
struct dx_entry entries[0];
136
struct buffer_head *bh;
137
struct dx_entry *entries;
148
static inline ext4_lblk_t dx_get_block(struct dx_entry *entry);
149
static void dx_set_block(struct dx_entry *entry, ext4_lblk_t value);
150
static inline unsigned dx_get_hash(struct dx_entry *entry);
151
static void dx_set_hash(struct dx_entry *entry, unsigned value);
152
static unsigned dx_get_count(struct dx_entry *entries);
153
static unsigned dx_get_limit(struct dx_entry *entries);
154
static void dx_set_count(struct dx_entry *entries, unsigned value);
155
static void dx_set_limit(struct dx_entry *entries, unsigned value);
156
static unsigned dx_root_limit(struct inode *dir, unsigned infosize);
157
static unsigned dx_node_limit(struct inode *dir);
158
static struct dx_frame *dx_probe(const struct qstr *d_name,
160
struct dx_hash_info *hinfo,
161
struct dx_frame *frame,
163
static void dx_release(struct dx_frame *frames);
164
static int dx_make_map(struct ext4_dir_entry_2 *de, unsigned blocksize,
165
struct dx_hash_info *hinfo, struct dx_map_entry map[]);
166
static void dx_sort_map(struct dx_map_entry *map, unsigned count);
167
static struct ext4_dir_entry_2 *dx_move_dirents(char *from, char *to,
168
struct dx_map_entry *offsets, int count, unsigned blocksize);
169
static struct ext4_dir_entry_2* dx_pack_dirents(char *base, unsigned blocksize);
170
static void dx_insert_block(struct dx_frame *frame,
171
u32 hash, ext4_lblk_t block);
172
static int ext4_htree_next_block(struct inode *dir, __u32 hash,
173
struct dx_frame *frame,
174
struct dx_frame *frames,
176
static struct buffer_head * ext4_dx_find_entry(struct inode *dir,
177
const struct qstr *d_name,
178
struct ext4_dir_entry_2 **res_dir,
180
static int ext4_dx_add_entry(handle_t *handle, struct dentry *dentry,
181
struct inode *inode);
184
* p is at least 6 bytes before the end of page
186
static inline struct ext4_dir_entry_2 *
187
ext4_next_entry(struct ext4_dir_entry_2 *p, unsigned long blocksize)
189
return (struct ext4_dir_entry_2 *)((char *)p +
190
ext4_rec_len_from_disk(p->rec_len, blocksize));
194
* Future: use high four bits of block for coalesce-on-delete flags
195
* Mask them off for now.
198
static inline ext4_lblk_t dx_get_block(struct dx_entry *entry)
200
return le32_to_cpu(entry->block) & 0x00ffffff;
203
static inline void dx_set_block(struct dx_entry *entry, ext4_lblk_t value)
205
entry->block = cpu_to_le32(value);
208
static inline unsigned dx_get_hash(struct dx_entry *entry)
210
return le32_to_cpu(entry->hash);
213
static inline void dx_set_hash(struct dx_entry *entry, unsigned value)
215
entry->hash = cpu_to_le32(value);
218
static inline unsigned dx_get_count(struct dx_entry *entries)
220
return le16_to_cpu(((struct dx_countlimit *) entries)->count);
223
static inline unsigned dx_get_limit(struct dx_entry *entries)
225
return le16_to_cpu(((struct dx_countlimit *) entries)->limit);
228
static inline void dx_set_count(struct dx_entry *entries, unsigned value)
230
((struct dx_countlimit *) entries)->count = cpu_to_le16(value);
233
static inline void dx_set_limit(struct dx_entry *entries, unsigned value)
235
((struct dx_countlimit *) entries)->limit = cpu_to_le16(value);
238
static inline unsigned dx_root_limit(struct inode *dir, unsigned infosize)
240
unsigned entry_space = dir->i_sb->s_blocksize - EXT4_DIR_REC_LEN(1) -
241
EXT4_DIR_REC_LEN(2) - infosize;
242
return entry_space / sizeof(struct dx_entry);
245
static inline unsigned dx_node_limit(struct inode *dir)
247
unsigned entry_space = dir->i_sb->s_blocksize - EXT4_DIR_REC_LEN(0);
248
return entry_space / sizeof(struct dx_entry);
255
static void dx_show_index(char * label, struct dx_entry *entries)
257
int i, n = dx_get_count (entries);
258
printk(KERN_DEBUG "%s index ", label);
259
for (i = 0; i < n; i++) {
260
printk("%x->%lu ", i ? dx_get_hash(entries + i) :
261
0, (unsigned long)dx_get_block(entries + i));
273
static struct stats dx_show_leaf(struct dx_hash_info *hinfo, struct ext4_dir_entry_2 *de,
274
int size, int show_names)
276
unsigned names = 0, space = 0;
277
char *base = (char *) de;
278
struct dx_hash_info h = *hinfo;
281
while ((char *) de < base + size)
287
int len = de->name_len;
288
char *name = de->name;
289
while (len--) printk("%c", *name++);
290
ext4fs_dirhash(de->name, de->name_len, &h);
291
printk(":%x.%u ", h.hash,
292
(unsigned) ((char *) de - base));
294
space += EXT4_DIR_REC_LEN(de->name_len);
297
de = ext4_next_entry(de, size);
299
printk("(%i)\n", names);
300
return (struct stats) { names, space, 1 };
303
struct stats dx_show_entries(struct dx_hash_info *hinfo, struct inode *dir,
304
struct dx_entry *entries, int levels)
306
unsigned blocksize = dir->i_sb->s_blocksize;
307
unsigned count = dx_get_count(entries), names = 0, space = 0, i;
309
struct buffer_head *bh;
311
printk("%i indexed blocks...\n", count);
312
for (i = 0; i < count; i++, entries++)
314
ext4_lblk_t block = dx_get_block(entries);
315
ext4_lblk_t hash = i ? dx_get_hash(entries): 0;
316
u32 range = i < count - 1? (dx_get_hash(entries + 1) - hash): ~hash;
318
printk("%s%3u:%03u hash %8x/%8x ",levels?"":" ", i, block, hash, range);
319
if (!(bh = ext4_bread (NULL,dir, block, 0,&err))) continue;
321
dx_show_entries(hinfo, dir, ((struct dx_node *) bh->b_data)->entries, levels - 1):
322
dx_show_leaf(hinfo, (struct ext4_dir_entry_2 *) bh->b_data, blocksize, 0);
323
names += stats.names;
324
space += stats.space;
325
bcount += stats.bcount;
329
printk(KERN_DEBUG "%snames %u, fullness %u (%u%%)\n",
330
levels ? "" : " ", names, space/bcount,
331
(space/bcount)*100/blocksize);
332
return (struct stats) { names, space, bcount};
334
#endif /* DX_DEBUG */
337
* Probe for a directory leaf block to search.
339
* dx_probe can return ERR_BAD_DX_DIR, which means there was a format
340
* error in the directory index, and the caller should fall back to
341
* searching the directory normally. The callers of dx_probe **MUST**
342
* check for this error code, and make sure it never gets reflected
345
static struct dx_frame *
346
dx_probe(const struct qstr *d_name, struct inode *dir,
347
struct dx_hash_info *hinfo, struct dx_frame *frame_in, int *err)
349
unsigned count, indirect;
350
struct dx_entry *at, *entries, *p, *q, *m;
351
struct dx_root *root;
352
struct buffer_head *bh;
353
struct dx_frame *frame = frame_in;
357
if (!(bh = ext4_bread (NULL,dir, 0, 0, err)))
359
root = (struct dx_root *) bh->b_data;
360
if (root->info.hash_version != DX_HASH_TEA &&
361
root->info.hash_version != DX_HASH_HALF_MD4 &&
362
root->info.hash_version != DX_HASH_LEGACY) {
363
ext4_warning(dir->i_sb, "Unrecognised inode hash code %d",
364
root->info.hash_version);
366
*err = ERR_BAD_DX_DIR;
369
hinfo->hash_version = root->info.hash_version;
370
if (hinfo->hash_version <= DX_HASH_TEA)
371
hinfo->hash_version += EXT4_SB(dir->i_sb)->s_hash_unsigned;
372
hinfo->seed = EXT4_SB(dir->i_sb)->s_hash_seed;
374
ext4fs_dirhash(d_name->name, d_name->len, hinfo);
377
if (root->info.unused_flags & 1) {
378
ext4_warning(dir->i_sb, "Unimplemented inode hash flags: %#06x",
379
root->info.unused_flags);
381
*err = ERR_BAD_DX_DIR;
385
if ((indirect = root->info.indirect_levels) > 1) {
386
ext4_warning(dir->i_sb, "Unimplemented inode hash depth: %#06x",
387
root->info.indirect_levels);
389
*err = ERR_BAD_DX_DIR;
393
entries = (struct dx_entry *) (((char *)&root->info) +
394
root->info.info_length);
396
if (dx_get_limit(entries) != dx_root_limit(dir,
397
root->info.info_length)) {
398
ext4_warning(dir->i_sb, "dx entry: limit != root limit");
400
*err = ERR_BAD_DX_DIR;
404
dxtrace(printk("Look up %x", hash));
407
count = dx_get_count(entries);
408
if (!count || count > dx_get_limit(entries)) {
409
ext4_warning(dir->i_sb,
410
"dx entry: no count or count > limit");
412
*err = ERR_BAD_DX_DIR;
417
q = entries + count - 1;
421
dxtrace(printk("."));
422
if (dx_get_hash(m) > hash)
428
if (0) // linear search cross check
430
unsigned n = count - 1;
434
dxtrace(printk(","));
435
if (dx_get_hash(++at) > hash)
441
assert (at == p - 1);
445
dxtrace(printk(" %x->%u\n", at == entries? 0: dx_get_hash(at), dx_get_block(at)));
447
frame->entries = entries;
449
if (!indirect--) return frame;
450
if (!(bh = ext4_bread (NULL,dir, dx_get_block(at), 0, err)))
452
at = entries = ((struct dx_node *) bh->b_data)->entries;
453
if (dx_get_limit(entries) != dx_node_limit (dir)) {
454
ext4_warning(dir->i_sb,
455
"dx entry: limit != node limit");
457
*err = ERR_BAD_DX_DIR;
464
while (frame >= frame_in) {
469
if (*err == ERR_BAD_DX_DIR)
470
ext4_warning(dir->i_sb,
471
"Corrupt dir inode %ld, running e2fsck is "
472
"recommended.", dir->i_ino);
476
static void dx_release (struct dx_frame *frames)
478
if (frames[0].bh == NULL)
481
if (((struct dx_root *) frames[0].bh->b_data)->info.indirect_levels)
482
brelse(frames[1].bh);
483
brelse(frames[0].bh);
487
* This function increments the frame pointer to search the next leaf
488
* block, and reads in the necessary intervening nodes if the search
489
* should be necessary. Whether or not the search is necessary is
490
* controlled by the hash parameter. If the hash value is even, then
491
* the search is only continued if the next block starts with that
492
* hash value. This is used if we are searching for a specific file.
494
* If the hash value is HASH_NB_ALWAYS, then always go to the next block.
496
* This function returns 1 if the caller should continue to search,
497
* or 0 if it should not. If there is an error reading one of the
498
* index blocks, it will a negative error code.
500
* If start_hash is non-null, it will be filled in with the starting
501
* hash of the next page.
503
static int ext4_htree_next_block(struct inode *dir, __u32 hash,
504
struct dx_frame *frame,
505
struct dx_frame *frames,
509
struct buffer_head *bh;
510
int err, num_frames = 0;
515
* Find the next leaf page by incrementing the frame pointer.
516
* If we run out of entries in the interior node, loop around and
517
* increment pointer in the parent node. When we break out of
518
* this loop, num_frames indicates the number of interior
519
* nodes need to be read.
522
if (++(p->at) < p->entries + dx_get_count(p->entries))
531
* If the hash is 1, then continue only if the next page has a
532
* continuation hash of any value. This is used for readdir
533
* handling. Otherwise, check to see if the hash matches the
534
* desired contiuation hash. If it doesn't, return since
535
* there's no point to read in the successive index pages.
537
bhash = dx_get_hash(p->at);
540
if ((hash & 1) == 0) {
541
if ((bhash & ~1) != hash)
545
* If the hash is HASH_NB_ALWAYS, we always go to the next
546
* block so no check is necessary
548
while (num_frames--) {
549
if (!(bh = ext4_bread(NULL, dir, dx_get_block(p->at),
551
return err; /* Failure */
555
p->at = p->entries = ((struct dx_node *) bh->b_data)->entries;
562
* This function fills a red-black tree with information from a
563
* directory block. It returns the number directory entries loaded
564
* into the tree. If there is an error it is returned in err.
566
static int htree_dirblock_to_tree(struct file *dir_file,
567
struct inode *dir, ext4_lblk_t block,
568
struct dx_hash_info *hinfo,
569
__u32 start_hash, __u32 start_minor_hash)
571
struct buffer_head *bh;
572
struct ext4_dir_entry_2 *de, *top;
575
dxtrace(printk(KERN_INFO "In htree dirblock_to_tree: block %lu\n",
576
(unsigned long)block));
577
if (!(bh = ext4_bread (NULL, dir, block, 0, &err)))
580
de = (struct ext4_dir_entry_2 *) bh->b_data;
581
top = (struct ext4_dir_entry_2 *) ((char *) de +
582
dir->i_sb->s_blocksize -
583
EXT4_DIR_REC_LEN(0));
584
for (; de < top; de = ext4_next_entry(de, dir->i_sb->s_blocksize)) {
585
if (ext4_check_dir_entry(dir, NULL, de, bh,
586
(block<<EXT4_BLOCK_SIZE_BITS(dir->i_sb))
587
+ ((char *)de - bh->b_data))) {
588
/* On error, skip the f_pos to the next block. */
589
dir_file->f_pos = (dir_file->f_pos |
590
(dir->i_sb->s_blocksize - 1)) + 1;
594
ext4fs_dirhash(de->name, de->name_len, hinfo);
595
if ((hinfo->hash < start_hash) ||
596
((hinfo->hash == start_hash) &&
597
(hinfo->minor_hash < start_minor_hash)))
601
if ((err = ext4_htree_store_dirent(dir_file,
602
hinfo->hash, hinfo->minor_hash, de)) != 0) {
614
* This function fills a red-black tree with information from a
615
* directory. We start scanning the directory in hash order, starting
616
* at start_hash and start_minor_hash.
618
* This function returns the number of entries inserted into the tree,
619
* or a negative error code.
621
int ext4_htree_fill_tree(struct file *dir_file, __u32 start_hash,
622
__u32 start_minor_hash, __u32 *next_hash)
624
struct dx_hash_info hinfo;
625
struct ext4_dir_entry_2 *de;
626
struct dx_frame frames[2], *frame;
633
dxtrace(printk(KERN_DEBUG "In htree_fill_tree, start hash: %x:%x\n",
634
start_hash, start_minor_hash));
635
dir = dir_file->f_path.dentry->d_inode;
636
if (!(ext4_test_inode_flag(dir, EXT4_INODE_INDEX))) {
637
hinfo.hash_version = EXT4_SB(dir->i_sb)->s_def_hash_version;
638
if (hinfo.hash_version <= DX_HASH_TEA)
639
hinfo.hash_version +=
640
EXT4_SB(dir->i_sb)->s_hash_unsigned;
641
hinfo.seed = EXT4_SB(dir->i_sb)->s_hash_seed;
642
count = htree_dirblock_to_tree(dir_file, dir, 0, &hinfo,
643
start_hash, start_minor_hash);
647
hinfo.hash = start_hash;
648
hinfo.minor_hash = 0;
649
frame = dx_probe(NULL, dir, &hinfo, frames, &err);
653
/* Add '.' and '..' from the htree header */
654
if (!start_hash && !start_minor_hash) {
655
de = (struct ext4_dir_entry_2 *) frames[0].bh->b_data;
656
if ((err = ext4_htree_store_dirent(dir_file, 0, 0, de)) != 0)
660
if (start_hash < 2 || (start_hash ==2 && start_minor_hash==0)) {
661
de = (struct ext4_dir_entry_2 *) frames[0].bh->b_data;
662
de = ext4_next_entry(de, dir->i_sb->s_blocksize);
663
if ((err = ext4_htree_store_dirent(dir_file, 2, 0, de)) != 0)
669
block = dx_get_block(frame->at);
670
ret = htree_dirblock_to_tree(dir_file, dir, block, &hinfo,
671
start_hash, start_minor_hash);
678
ret = ext4_htree_next_block(dir, HASH_NB_ALWAYS,
679
frame, frames, &hashval);
680
*next_hash = hashval;
686
* Stop if: (a) there are no more entries, or
687
* (b) we have inserted at least one entry and the
688
* next hash value is not a continuation
691
(count && ((hashval & 1) == 0)))
695
dxtrace(printk(KERN_DEBUG "Fill tree: returned %d entries, "
696
"next hash: %x\n", count, *next_hash));
705
* Directory block splitting, compacting
709
* Create map of hash values, offsets, and sizes, stored at end of block.
710
* Returns number of entries mapped.
712
static int dx_make_map(struct ext4_dir_entry_2 *de, unsigned blocksize,
713
struct dx_hash_info *hinfo,
714
struct dx_map_entry *map_tail)
717
char *base = (char *) de;
718
struct dx_hash_info h = *hinfo;
720
while ((char *) de < base + blocksize) {
721
if (de->name_len && de->inode) {
722
ext4fs_dirhash(de->name, de->name_len, &h);
724
map_tail->hash = h.hash;
725
map_tail->offs = ((char *) de - base)>>2;
726
map_tail->size = le16_to_cpu(de->rec_len);
730
/* XXX: do we need to check rec_len == 0 case? -Chris */
731
de = ext4_next_entry(de, blocksize);
736
/* Sort map by hash value */
737
static void dx_sort_map (struct dx_map_entry *map, unsigned count)
739
struct dx_map_entry *p, *q, *top = map + count - 1;
741
/* Combsort until bubble sort doesn't suck */
744
if (count - 9 < 2) /* 9, 10 -> 11 */
746
for (p = top, q = p - count; q >= map; p--, q--)
747
if (p->hash < q->hash)
750
/* Garden variety bubble sort */
755
if (q[1].hash >= q[0].hash)
763
static void dx_insert_block(struct dx_frame *frame, u32 hash, ext4_lblk_t block)
765
struct dx_entry *entries = frame->entries;
766
struct dx_entry *old = frame->at, *new = old + 1;
767
int count = dx_get_count(entries);
769
assert(count < dx_get_limit(entries));
770
assert(old < entries + count);
771
memmove(new + 1, new, (char *)(entries + count) - (char *)(new));
772
dx_set_hash(new, hash);
773
dx_set_block(new, block);
774
dx_set_count(entries, count + 1);
777
static void ext4_update_dx_flag(struct inode *inode)
779
if (!EXT4_HAS_COMPAT_FEATURE(inode->i_sb,
780
EXT4_FEATURE_COMPAT_DIR_INDEX))
781
ext4_clear_inode_flag(inode, EXT4_INODE_INDEX);
785
* NOTE! unlike strncmp, ext4_match returns 1 for success, 0 for failure.
787
* `len <= EXT4_NAME_LEN' is guaranteed by caller.
788
* `de != NULL' is guaranteed by caller.
790
static inline int ext4_match (int len, const char * const name,
791
struct ext4_dir_entry_2 * de)
793
if (len != de->name_len)
797
return !memcmp(name, de->name, len);
801
* Returns 0 if not found, -1 on failure, and 1 on success
803
static inline int search_dirblock(struct buffer_head *bh,
805
const struct qstr *d_name,
807
struct ext4_dir_entry_2 ** res_dir)
809
struct ext4_dir_entry_2 * de;
812
const char *name = d_name->name;
813
int namelen = d_name->len;
815
de = (struct ext4_dir_entry_2 *) bh->b_data;
816
dlimit = bh->b_data + dir->i_sb->s_blocksize;
817
while ((char *) de < dlimit) {
818
/* this code is executed quadratically often */
819
/* do minimal checking `by hand' */
821
if ((char *) de + namelen <= dlimit &&
822
ext4_match (namelen, name, de)) {
823
/* found a match - just to be sure, do a full check */
824
if (ext4_check_dir_entry(dir, NULL, de, bh, offset))
829
/* prevent looping on a bad block */
830
de_len = ext4_rec_len_from_disk(de->rec_len,
831
dir->i_sb->s_blocksize);
835
de = (struct ext4_dir_entry_2 *) ((char *) de + de_len);
844
* finds an entry in the specified directory with the wanted name. It
845
* returns the cache buffer in which the entry was found, and the entry
846
* itself (as a parameter - res_dir). It does NOT read the inode of the
847
* entry - you'll have to do that yourself if you want to.
849
* The returned buffer_head has ->b_count elevated. The caller is expected
850
* to brelse() it when appropriate.
852
static struct buffer_head * ext4_find_entry (struct inode *dir,
853
const struct qstr *d_name,
854
struct ext4_dir_entry_2 ** res_dir)
856
struct super_block *sb;
857
struct buffer_head *bh_use[NAMEI_RA_SIZE];
858
struct buffer_head *bh, *ret = NULL;
859
ext4_lblk_t start, block, b;
860
const u8 *name = d_name->name;
861
int ra_max = 0; /* Number of bh's in the readahead
863
int ra_ptr = 0; /* Current index into readahead
872
namelen = d_name->len;
873
if (namelen > EXT4_NAME_LEN)
875
if ((namelen <= 2) && (name[0] == '.') &&
876
(name[1] == '.' || name[1] == '\0')) {
878
* "." or ".." will only be in the first block
879
* NFS may look up ".."; "." should be handled by the VFS
886
bh = ext4_dx_find_entry(dir, d_name, res_dir, &err);
888
* On success, or if the error was file not found,
889
* return. Otherwise, fall back to doing a search the
892
if (bh || (err != ERR_BAD_DX_DIR))
894
dxtrace(printk(KERN_DEBUG "ext4_find_entry: dx failed, "
897
nblocks = dir->i_size >> EXT4_BLOCK_SIZE_BITS(sb);
898
start = EXT4_I(dir)->i_dir_start_lookup;
899
if (start >= nblocks)
905
* We deal with the read-ahead logic here.
907
if (ra_ptr >= ra_max) {
908
/* Refill the readahead buffer */
911
for (ra_max = 0; ra_max < NAMEI_RA_SIZE; ra_max++) {
913
* Terminate if we reach the end of the
914
* directory and must wrap, or if our
915
* search has finished at this block.
917
if (b >= nblocks || (num && block == start)) {
918
bh_use[ra_max] = NULL;
922
bh = ext4_getblk(NULL, dir, b++, 0, &err);
925
ll_rw_block(READ | REQ_META | REQ_PRIO,
929
if ((bh = bh_use[ra_ptr++]) == NULL)
932
if (!buffer_uptodate(bh)) {
933
/* read error, skip block & hope for the best */
934
EXT4_ERROR_INODE(dir, "reading directory lblock %lu",
935
(unsigned long) block);
939
i = search_dirblock(bh, dir, d_name,
940
block << EXT4_BLOCK_SIZE_BITS(sb), res_dir);
942
EXT4_I(dir)->i_dir_start_lookup = block;
944
goto cleanup_and_exit;
948
goto cleanup_and_exit;
951
if (++block >= nblocks)
953
} while (block != start);
956
* If the directory has grown while we were searching, then
957
* search the last part of the directory before giving up.
960
nblocks = dir->i_size >> EXT4_BLOCK_SIZE_BITS(sb);
961
if (block < nblocks) {
967
/* Clean up the read-ahead blocks */
968
for (; ra_ptr < ra_max; ra_ptr++)
969
brelse(bh_use[ra_ptr]);
973
static struct buffer_head * ext4_dx_find_entry(struct inode *dir, const struct qstr *d_name,
974
struct ext4_dir_entry_2 **res_dir, int *err)
976
struct super_block * sb = dir->i_sb;
977
struct dx_hash_info hinfo;
978
struct dx_frame frames[2], *frame;
979
struct buffer_head *bh;
983
if (!(frame = dx_probe(d_name, dir, &hinfo, frames, err)))
986
block = dx_get_block(frame->at);
987
if (!(bh = ext4_bread(NULL, dir, block, 0, err)))
990
retval = search_dirblock(bh, dir, d_name,
991
block << EXT4_BLOCK_SIZE_BITS(sb),
993
if (retval == 1) { /* Success! */
999
*err = ERR_BAD_DX_DIR;
1003
/* Check to see if we should continue to search */
1004
retval = ext4_htree_next_block(dir, hinfo.hash, frame,
1008
"error reading index page in directory #%lu",
1013
} while (retval == 1);
1017
dxtrace(printk(KERN_DEBUG "%s not found\n", d_name->name));
1018
dx_release (frames);
1022
static struct dentry *ext4_lookup(struct inode *dir, struct dentry *dentry, struct nameidata *nd)
1024
struct inode *inode;
1025
struct ext4_dir_entry_2 *de;
1026
struct buffer_head *bh;
1028
if (dentry->d_name.len > EXT4_NAME_LEN)
1029
return ERR_PTR(-ENAMETOOLONG);
1031
bh = ext4_find_entry(dir, &dentry->d_name, &de);
1034
__u32 ino = le32_to_cpu(de->inode);
1036
if (!ext4_valid_inum(dir->i_sb, ino)) {
1037
EXT4_ERROR_INODE(dir, "bad inode number: %u", ino);
1038
return ERR_PTR(-EIO);
1040
inode = ext4_iget(dir->i_sb, ino);
1041
if (inode == ERR_PTR(-ESTALE)) {
1042
EXT4_ERROR_INODE(dir,
1043
"deleted inode referenced: %u",
1045
return ERR_PTR(-EIO);
1048
return d_splice_alias(inode, dentry);
1052
struct dentry *ext4_get_parent(struct dentry *child)
1055
static const struct qstr dotdot = {
1059
struct ext4_dir_entry_2 * de;
1060
struct buffer_head *bh;
1062
bh = ext4_find_entry(child->d_inode, &dotdot, &de);
1064
return ERR_PTR(-ENOENT);
1065
ino = le32_to_cpu(de->inode);
1068
if (!ext4_valid_inum(child->d_inode->i_sb, ino)) {
1069
EXT4_ERROR_INODE(child->d_inode,
1070
"bad parent inode number: %u", ino);
1071
return ERR_PTR(-EIO);
1074
return d_obtain_alias(ext4_iget(child->d_inode->i_sb, ino));
1078
static unsigned char ext4_type_by_mode[S_IFMT >> S_SHIFT] = {
1079
[S_IFREG >> S_SHIFT] = EXT4_FT_REG_FILE,
1080
[S_IFDIR >> S_SHIFT] = EXT4_FT_DIR,
1081
[S_IFCHR >> S_SHIFT] = EXT4_FT_CHRDEV,
1082
[S_IFBLK >> S_SHIFT] = EXT4_FT_BLKDEV,
1083
[S_IFIFO >> S_SHIFT] = EXT4_FT_FIFO,
1084
[S_IFSOCK >> S_SHIFT] = EXT4_FT_SOCK,
1085
[S_IFLNK >> S_SHIFT] = EXT4_FT_SYMLINK,
1088
static inline void ext4_set_de_type(struct super_block *sb,
1089
struct ext4_dir_entry_2 *de,
1091
if (EXT4_HAS_INCOMPAT_FEATURE(sb, EXT4_FEATURE_INCOMPAT_FILETYPE))
1092
de->file_type = ext4_type_by_mode[(mode & S_IFMT)>>S_SHIFT];
1096
* Move count entries from end of map between two memory locations.
1097
* Returns pointer to last entry moved.
1099
static struct ext4_dir_entry_2 *
1100
dx_move_dirents(char *from, char *to, struct dx_map_entry *map, int count,
1103
unsigned rec_len = 0;
1106
struct ext4_dir_entry_2 *de = (struct ext4_dir_entry_2 *)
1107
(from + (map->offs<<2));
1108
rec_len = EXT4_DIR_REC_LEN(de->name_len);
1109
memcpy (to, de, rec_len);
1110
((struct ext4_dir_entry_2 *) to)->rec_len =
1111
ext4_rec_len_to_disk(rec_len, blocksize);
1116
return (struct ext4_dir_entry_2 *) (to - rec_len);
1120
* Compact each dir entry in the range to the minimal rec_len.
1121
* Returns pointer to last entry in range.
1123
static struct ext4_dir_entry_2* dx_pack_dirents(char *base, unsigned blocksize)
1125
struct ext4_dir_entry_2 *next, *to, *prev, *de = (struct ext4_dir_entry_2 *) base;
1126
unsigned rec_len = 0;
1129
while ((char*)de < base + blocksize) {
1130
next = ext4_next_entry(de, blocksize);
1131
if (de->inode && de->name_len) {
1132
rec_len = EXT4_DIR_REC_LEN(de->name_len);
1134
memmove(to, de, rec_len);
1135
to->rec_len = ext4_rec_len_to_disk(rec_len, blocksize);
1137
to = (struct ext4_dir_entry_2 *) (((char *) to) + rec_len);
1145
* Split a full leaf block to make room for a new dir entry.
1146
* Allocate a new block, and move entries so that they are approx. equally full.
1147
* Returns pointer to de in block into which the new entry will be inserted.
1149
static struct ext4_dir_entry_2 *do_split(handle_t *handle, struct inode *dir,
1150
struct buffer_head **bh,struct dx_frame *frame,
1151
struct dx_hash_info *hinfo, int *error)
1153
unsigned blocksize = dir->i_sb->s_blocksize;
1154
unsigned count, continued;
1155
struct buffer_head *bh2;
1156
ext4_lblk_t newblock;
1158
struct dx_map_entry *map;
1159
char *data1 = (*bh)->b_data, *data2;
1160
unsigned split, move, size;
1161
struct ext4_dir_entry_2 *de = NULL, *de2;
1164
bh2 = ext4_append (handle, dir, &newblock, &err);
1171
BUFFER_TRACE(*bh, "get_write_access");
1172
err = ext4_journal_get_write_access(handle, *bh);
1176
BUFFER_TRACE(frame->bh, "get_write_access");
1177
err = ext4_journal_get_write_access(handle, frame->bh);
1181
data2 = bh2->b_data;
1183
/* create map in the end of data2 block */
1184
map = (struct dx_map_entry *) (data2 + blocksize);
1185
count = dx_make_map((struct ext4_dir_entry_2 *) data1,
1186
blocksize, hinfo, map);
1188
dx_sort_map(map, count);
1189
/* Split the existing block in the middle, size-wise */
1192
for (i = count-1; i >= 0; i--) {
1193
/* is more than half of this entry in 2nd half of the block? */
1194
if (size + map[i].size/2 > blocksize/2)
1196
size += map[i].size;
1199
/* map index at which we will split */
1200
split = count - move;
1201
hash2 = map[split].hash;
1202
continued = hash2 == map[split - 1].hash;
1203
dxtrace(printk(KERN_INFO "Split block %lu at %x, %i/%i\n",
1204
(unsigned long)dx_get_block(frame->at),
1205
hash2, split, count-split));
1207
/* Fancy dance to stay within two buffers */
1208
de2 = dx_move_dirents(data1, data2, map + split, count - split, blocksize);
1209
de = dx_pack_dirents(data1, blocksize);
1210
de->rec_len = ext4_rec_len_to_disk(data1 + blocksize - (char *) de,
1212
de2->rec_len = ext4_rec_len_to_disk(data2 + blocksize - (char *) de2,
1214
dxtrace(dx_show_leaf (hinfo, (struct ext4_dir_entry_2 *) data1, blocksize, 1));
1215
dxtrace(dx_show_leaf (hinfo, (struct ext4_dir_entry_2 *) data2, blocksize, 1));
1217
/* Which block gets the new entry? */
1218
if (hinfo->hash >= hash2)
1223
dx_insert_block(frame, hash2 + continued, newblock);
1224
err = ext4_handle_dirty_metadata(handle, dir, bh2);
1227
err = ext4_handle_dirty_metadata(handle, dir, frame->bh);
1231
dxtrace(dx_show_index("frame", frame->entries));
1238
ext4_std_error(dir->i_sb, err);
1245
* Add a new entry into a directory (leaf) block. If de is non-NULL,
1246
* it points to a directory entry which is guaranteed to be large
1247
* enough for new directory entry. If de is NULL, then
1248
* add_dirent_to_buf will attempt search the directory block for
1249
* space. It will return -ENOSPC if no space is available, and -EIO
1250
* and -EEXIST if directory entry already exists.
1252
static int add_dirent_to_buf(handle_t *handle, struct dentry *dentry,
1253
struct inode *inode, struct ext4_dir_entry_2 *de,
1254
struct buffer_head *bh)
1256
struct inode *dir = dentry->d_parent->d_inode;
1257
const char *name = dentry->d_name.name;
1258
int namelen = dentry->d_name.len;
1259
unsigned int offset = 0;
1260
unsigned int blocksize = dir->i_sb->s_blocksize;
1261
unsigned short reclen;
1262
int nlen, rlen, err;
1265
reclen = EXT4_DIR_REC_LEN(namelen);
1267
de = (struct ext4_dir_entry_2 *)bh->b_data;
1268
top = bh->b_data + blocksize - reclen;
1269
while ((char *) de <= top) {
1270
if (ext4_check_dir_entry(dir, NULL, de, bh, offset))
1272
if (ext4_match(namelen, name, de))
1274
nlen = EXT4_DIR_REC_LEN(de->name_len);
1275
rlen = ext4_rec_len_from_disk(de->rec_len, blocksize);
1276
if ((de->inode? rlen - nlen: rlen) >= reclen)
1278
de = (struct ext4_dir_entry_2 *)((char *)de + rlen);
1281
if ((char *) de > top)
1284
BUFFER_TRACE(bh, "get_write_access");
1285
err = ext4_journal_get_write_access(handle, bh);
1287
ext4_std_error(dir->i_sb, err);
1291
/* By now the buffer is marked for journaling */
1292
nlen = EXT4_DIR_REC_LEN(de->name_len);
1293
rlen = ext4_rec_len_from_disk(de->rec_len, blocksize);
1295
struct ext4_dir_entry_2 *de1 = (struct ext4_dir_entry_2 *)((char *)de + nlen);
1296
de1->rec_len = ext4_rec_len_to_disk(rlen - nlen, blocksize);
1297
de->rec_len = ext4_rec_len_to_disk(nlen, blocksize);
1300
de->file_type = EXT4_FT_UNKNOWN;
1302
de->inode = cpu_to_le32(inode->i_ino);
1303
ext4_set_de_type(dir->i_sb, de, inode->i_mode);
1306
de->name_len = namelen;
1307
memcpy(de->name, name, namelen);
1309
* XXX shouldn't update any times until successful
1310
* completion of syscall, but too many callers depend
1313
* XXX similarly, too many callers depend on
1314
* ext4_new_inode() setting the times, but error
1315
* recovery deletes the inode, so the worst that can
1316
* happen is that the times are slightly out of date
1317
* and/or different from the directory change time.
1319
dir->i_mtime = dir->i_ctime = ext4_current_time(dir);
1320
ext4_update_dx_flag(dir);
1322
ext4_mark_inode_dirty(handle, dir);
1323
BUFFER_TRACE(bh, "call ext4_handle_dirty_metadata");
1324
err = ext4_handle_dirty_metadata(handle, dir, bh);
1326
ext4_std_error(dir->i_sb, err);
1331
* This converts a one block unindexed directory to a 3 block indexed
1332
* directory, and adds the dentry to the indexed directory.
1334
static int make_indexed_dir(handle_t *handle, struct dentry *dentry,
1335
struct inode *inode, struct buffer_head *bh)
1337
struct inode *dir = dentry->d_parent->d_inode;
1338
const char *name = dentry->d_name.name;
1339
int namelen = dentry->d_name.len;
1340
struct buffer_head *bh2;
1341
struct dx_root *root;
1342
struct dx_frame frames[2], *frame;
1343
struct dx_entry *entries;
1344
struct ext4_dir_entry_2 *de, *de2;
1349
struct dx_hash_info hinfo;
1351
struct fake_dirent *fde;
1353
blocksize = dir->i_sb->s_blocksize;
1354
dxtrace(printk(KERN_DEBUG "Creating index: inode %lu\n", dir->i_ino));
1355
retval = ext4_journal_get_write_access(handle, bh);
1357
ext4_std_error(dir->i_sb, retval);
1361
root = (struct dx_root *) bh->b_data;
1363
/* The 0th block becomes the root, move the dirents out */
1364
fde = &root->dotdot;
1365
de = (struct ext4_dir_entry_2 *)((char *)fde +
1366
ext4_rec_len_from_disk(fde->rec_len, blocksize));
1367
if ((char *) de >= (((char *) root) + blocksize)) {
1368
EXT4_ERROR_INODE(dir, "invalid rec_len for '..'");
1372
len = ((char *) root) + blocksize - (char *) de;
1374
/* Allocate new block for the 0th block's dirents */
1375
bh2 = ext4_append(handle, dir, &block, &retval);
1380
ext4_set_inode_flag(dir, EXT4_INODE_INDEX);
1381
data1 = bh2->b_data;
1383
memcpy (data1, de, len);
1384
de = (struct ext4_dir_entry_2 *) data1;
1386
while ((char *)(de2 = ext4_next_entry(de, blocksize)) < top)
1388
de->rec_len = ext4_rec_len_to_disk(data1 + blocksize - (char *) de,
1390
/* Initialize the root; the dot dirents already exist */
1391
de = (struct ext4_dir_entry_2 *) (&root->dotdot);
1392
de->rec_len = ext4_rec_len_to_disk(blocksize - EXT4_DIR_REC_LEN(2),
1394
memset (&root->info, 0, sizeof(root->info));
1395
root->info.info_length = sizeof(root->info);
1396
root->info.hash_version = EXT4_SB(dir->i_sb)->s_def_hash_version;
1397
entries = root->entries;
1398
dx_set_block(entries, 1);
1399
dx_set_count(entries, 1);
1400
dx_set_limit(entries, dx_root_limit(dir, sizeof(root->info)));
1402
/* Initialize as for dx_probe */
1403
hinfo.hash_version = root->info.hash_version;
1404
if (hinfo.hash_version <= DX_HASH_TEA)
1405
hinfo.hash_version += EXT4_SB(dir->i_sb)->s_hash_unsigned;
1406
hinfo.seed = EXT4_SB(dir->i_sb)->s_hash_seed;
1407
ext4fs_dirhash(name, namelen, &hinfo);
1409
frame->entries = entries;
1410
frame->at = entries;
1414
ext4_handle_dirty_metadata(handle, dir, frame->bh);
1415
ext4_handle_dirty_metadata(handle, dir, bh);
1417
de = do_split(handle,dir, &bh, frame, &hinfo, &retval);
1420
* Even if the block split failed, we have to properly write
1421
* out all the changes we did so far. Otherwise we can end up
1422
* with corrupted filesystem.
1424
ext4_mark_inode_dirty(handle, dir);
1430
retval = add_dirent_to_buf(handle, dentry, inode, de, bh);
1438
* adds a file entry to the specified directory, using the same
1439
* semantics as ext4_find_entry(). It returns NULL if it failed.
1441
* NOTE!! The inode part of 'de' is left at 0 - which means you
1442
* may not sleep between calling this and putting something into
1443
* the entry, as someone else might have used it while you slept.
1445
static int ext4_add_entry(handle_t *handle, struct dentry *dentry,
1446
struct inode *inode)
1448
struct inode *dir = dentry->d_parent->d_inode;
1449
struct buffer_head *bh;
1450
struct ext4_dir_entry_2 *de;
1451
struct super_block *sb;
1455
ext4_lblk_t block, blocks;
1458
blocksize = sb->s_blocksize;
1459
if (!dentry->d_name.len)
1462
retval = ext4_dx_add_entry(handle, dentry, inode);
1463
if (!retval || (retval != ERR_BAD_DX_DIR))
1465
ext4_clear_inode_flag(dir, EXT4_INODE_INDEX);
1467
ext4_mark_inode_dirty(handle, dir);
1469
blocks = dir->i_size >> sb->s_blocksize_bits;
1470
for (block = 0; block < blocks; block++) {
1471
bh = ext4_bread(handle, dir, block, 0, &retval);
1474
retval = add_dirent_to_buf(handle, dentry, inode, NULL, bh);
1475
if (retval != -ENOSPC) {
1480
if (blocks == 1 && !dx_fallback &&
1481
EXT4_HAS_COMPAT_FEATURE(sb, EXT4_FEATURE_COMPAT_DIR_INDEX))
1482
return make_indexed_dir(handle, dentry, inode, bh);
1485
bh = ext4_append(handle, dir, &block, &retval);
1488
de = (struct ext4_dir_entry_2 *) bh->b_data;
1490
de->rec_len = ext4_rec_len_to_disk(blocksize, blocksize);
1491
retval = add_dirent_to_buf(handle, dentry, inode, de, bh);
1494
ext4_set_inode_state(inode, EXT4_STATE_NEWENTRY);
1499
* Returns 0 for success, or a negative error value
1501
static int ext4_dx_add_entry(handle_t *handle, struct dentry *dentry,
1502
struct inode *inode)
1504
struct dx_frame frames[2], *frame;
1505
struct dx_entry *entries, *at;
1506
struct dx_hash_info hinfo;
1507
struct buffer_head *bh;
1508
struct inode *dir = dentry->d_parent->d_inode;
1509
struct super_block *sb = dir->i_sb;
1510
struct ext4_dir_entry_2 *de;
1513
frame = dx_probe(&dentry->d_name, dir, &hinfo, frames, &err);
1516
entries = frame->entries;
1519
if (!(bh = ext4_bread(handle,dir, dx_get_block(frame->at), 0, &err)))
1522
BUFFER_TRACE(bh, "get_write_access");
1523
err = ext4_journal_get_write_access(handle, bh);
1527
err = add_dirent_to_buf(handle, dentry, inode, NULL, bh);
1531
/* Block full, should compress but for now just split */
1532
dxtrace(printk(KERN_DEBUG "using %u of %u node entries\n",
1533
dx_get_count(entries), dx_get_limit(entries)));
1534
/* Need to split index? */
1535
if (dx_get_count(entries) == dx_get_limit(entries)) {
1536
ext4_lblk_t newblock;
1537
unsigned icount = dx_get_count(entries);
1538
int levels = frame - frames;
1539
struct dx_entry *entries2;
1540
struct dx_node *node2;
1541
struct buffer_head *bh2;
1543
if (levels && (dx_get_count(frames->entries) ==
1544
dx_get_limit(frames->entries))) {
1545
ext4_warning(sb, "Directory index full!");
1549
bh2 = ext4_append (handle, dir, &newblock, &err);
1552
node2 = (struct dx_node *)(bh2->b_data);
1553
entries2 = node2->entries;
1554
memset(&node2->fake, 0, sizeof(struct fake_dirent));
1555
node2->fake.rec_len = ext4_rec_len_to_disk(sb->s_blocksize,
1557
BUFFER_TRACE(frame->bh, "get_write_access");
1558
err = ext4_journal_get_write_access(handle, frame->bh);
1562
unsigned icount1 = icount/2, icount2 = icount - icount1;
1563
unsigned hash2 = dx_get_hash(entries + icount1);
1564
dxtrace(printk(KERN_DEBUG "Split index %i/%i\n",
1567
BUFFER_TRACE(frame->bh, "get_write_access"); /* index root */
1568
err = ext4_journal_get_write_access(handle,
1573
memcpy((char *) entries2, (char *) (entries + icount1),
1574
icount2 * sizeof(struct dx_entry));
1575
dx_set_count(entries, icount1);
1576
dx_set_count(entries2, icount2);
1577
dx_set_limit(entries2, dx_node_limit(dir));
1579
/* Which index block gets the new entry? */
1580
if (at - entries >= icount1) {
1581
frame->at = at = at - entries - icount1 + entries2;
1582
frame->entries = entries = entries2;
1583
swap(frame->bh, bh2);
1585
dx_insert_block(frames + 0, hash2, newblock);
1586
dxtrace(dx_show_index("node", frames[1].entries));
1587
dxtrace(dx_show_index("node",
1588
((struct dx_node *) bh2->b_data)->entries));
1589
err = ext4_handle_dirty_metadata(handle, dir, bh2);
1594
dxtrace(printk(KERN_DEBUG
1595
"Creating second level index...\n"));
1596
memcpy((char *) entries2, (char *) entries,
1597
icount * sizeof(struct dx_entry));
1598
dx_set_limit(entries2, dx_node_limit(dir));
1601
dx_set_count(entries, 1);
1602
dx_set_block(entries + 0, newblock);
1603
((struct dx_root *) frames[0].bh->b_data)->info.indirect_levels = 1;
1605
/* Add new access path frame */
1607
frame->at = at = at - entries + entries2;
1608
frame->entries = entries = entries2;
1610
err = ext4_journal_get_write_access(handle,
1615
err = ext4_handle_dirty_metadata(handle, dir, frames[0].bh);
1617
ext4_std_error(inode->i_sb, err);
1621
de = do_split(handle, dir, &bh, frame, &hinfo, &err);
1624
err = add_dirent_to_buf(handle, dentry, inode, de, bh);
1628
ext4_std_error(dir->i_sb, err);
1637
* ext4_delete_entry deletes a directory entry by merging it with the
1640
static int ext4_delete_entry(handle_t *handle,
1642
struct ext4_dir_entry_2 *de_del,
1643
struct buffer_head *bh)
1645
struct ext4_dir_entry_2 *de, *pde;
1646
unsigned int blocksize = dir->i_sb->s_blocksize;
1651
de = (struct ext4_dir_entry_2 *) bh->b_data;
1652
while (i < bh->b_size) {
1653
if (ext4_check_dir_entry(dir, NULL, de, bh, i))
1656
BUFFER_TRACE(bh, "get_write_access");
1657
err = ext4_journal_get_write_access(handle, bh);
1658
if (unlikely(err)) {
1659
ext4_std_error(dir->i_sb, err);
1663
pde->rec_len = ext4_rec_len_to_disk(
1664
ext4_rec_len_from_disk(pde->rec_len,
1666
ext4_rec_len_from_disk(de->rec_len,
1672
BUFFER_TRACE(bh, "call ext4_handle_dirty_metadata");
1673
err = ext4_handle_dirty_metadata(handle, dir, bh);
1674
if (unlikely(err)) {
1675
ext4_std_error(dir->i_sb, err);
1680
i += ext4_rec_len_from_disk(de->rec_len, blocksize);
1682
de = ext4_next_entry(de, blocksize);
1688
* DIR_NLINK feature is set if 1) nlinks > EXT4_LINK_MAX or 2) nlinks == 2,
1689
* since this indicates that nlinks count was previously 1.
1691
static void ext4_inc_count(handle_t *handle, struct inode *inode)
1694
if (is_dx(inode) && inode->i_nlink > 1) {
1695
/* limit is 16-bit i_links_count */
1696
if (inode->i_nlink >= EXT4_LINK_MAX || inode->i_nlink == 2) {
1697
set_nlink(inode, 1);
1698
EXT4_SET_RO_COMPAT_FEATURE(inode->i_sb,
1699
EXT4_FEATURE_RO_COMPAT_DIR_NLINK);
1705
* If a directory had nlink == 1, then we should let it be 1. This indicates
1706
* directory has >EXT4_LINK_MAX subdirs.
1708
static void ext4_dec_count(handle_t *handle, struct inode *inode)
1710
if (!S_ISDIR(inode->i_mode) || inode->i_nlink > 2)
1715
static int ext4_add_nondir(handle_t *handle,
1716
struct dentry *dentry, struct inode *inode)
1718
int err = ext4_add_entry(handle, dentry, inode);
1720
ext4_mark_inode_dirty(handle, inode);
1721
d_instantiate(dentry, inode);
1722
unlock_new_inode(inode);
1726
unlock_new_inode(inode);
1732
* By the time this is called, we already have created
1733
* the directory cache entry for the new file, but it
1734
* is so far negative - it has no inode.
1736
* If the create succeeds, we fill in the inode information
1737
* with d_instantiate().
1739
static int ext4_create(struct inode *dir, struct dentry *dentry, int mode,
1740
struct nameidata *nd)
1743
struct inode *inode;
1744
int err, retries = 0;
1746
dquot_initialize(dir);
1749
handle = ext4_journal_start(dir, EXT4_DATA_TRANS_BLOCKS(dir->i_sb) +
1750
EXT4_INDEX_EXTRA_TRANS_BLOCKS + 3 +
1751
EXT4_MAXQUOTAS_INIT_BLOCKS(dir->i_sb));
1753
return PTR_ERR(handle);
1755
if (IS_DIRSYNC(dir))
1756
ext4_handle_sync(handle);
1758
inode = ext4_new_inode(handle, dir, mode, &dentry->d_name, 0, NULL);
1759
err = PTR_ERR(inode);
1760
if (!IS_ERR(inode)) {
1761
inode->i_op = &ext4_file_inode_operations;
1762
inode->i_fop = &ext4_file_operations;
1763
ext4_set_aops(inode);
1764
err = ext4_add_nondir(handle, dentry, inode);
1766
ext4_journal_stop(handle);
1767
if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries))
1772
static int ext4_mknod(struct inode *dir, struct dentry *dentry,
1773
int mode, dev_t rdev)
1776
struct inode *inode;
1777
int err, retries = 0;
1779
if (!new_valid_dev(rdev))
1782
dquot_initialize(dir);
1785
handle = ext4_journal_start(dir, EXT4_DATA_TRANS_BLOCKS(dir->i_sb) +
1786
EXT4_INDEX_EXTRA_TRANS_BLOCKS + 3 +
1787
EXT4_MAXQUOTAS_INIT_BLOCKS(dir->i_sb));
1789
return PTR_ERR(handle);
1791
if (IS_DIRSYNC(dir))
1792
ext4_handle_sync(handle);
1794
inode = ext4_new_inode(handle, dir, mode, &dentry->d_name, 0, NULL);
1795
err = PTR_ERR(inode);
1796
if (!IS_ERR(inode)) {
1797
init_special_inode(inode, inode->i_mode, rdev);
1798
#ifdef CONFIG_EXT4_FS_XATTR
1799
inode->i_op = &ext4_special_inode_operations;
1801
err = ext4_add_nondir(handle, dentry, inode);
1803
ext4_journal_stop(handle);
1804
if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries))
1809
static int ext4_mkdir(struct inode *dir, struct dentry *dentry, int mode)
1812
struct inode *inode;
1813
struct buffer_head *dir_block = NULL;
1814
struct ext4_dir_entry_2 *de;
1815
unsigned int blocksize = dir->i_sb->s_blocksize;
1816
int err, retries = 0;
1818
if (EXT4_DIR_LINK_MAX(dir))
1821
dquot_initialize(dir);
1824
handle = ext4_journal_start(dir, EXT4_DATA_TRANS_BLOCKS(dir->i_sb) +
1825
EXT4_INDEX_EXTRA_TRANS_BLOCKS + 3 +
1826
EXT4_MAXQUOTAS_INIT_BLOCKS(dir->i_sb));
1828
return PTR_ERR(handle);
1830
if (IS_DIRSYNC(dir))
1831
ext4_handle_sync(handle);
1833
inode = ext4_new_inode(handle, dir, S_IFDIR | mode,
1834
&dentry->d_name, 0, NULL);
1835
err = PTR_ERR(inode);
1839
inode->i_op = &ext4_dir_inode_operations;
1840
inode->i_fop = &ext4_dir_operations;
1841
inode->i_size = EXT4_I(inode)->i_disksize = inode->i_sb->s_blocksize;
1842
dir_block = ext4_bread(handle, inode, 0, 1, &err);
1844
goto out_clear_inode;
1845
BUFFER_TRACE(dir_block, "get_write_access");
1846
err = ext4_journal_get_write_access(handle, dir_block);
1848
goto out_clear_inode;
1849
de = (struct ext4_dir_entry_2 *) dir_block->b_data;
1850
de->inode = cpu_to_le32(inode->i_ino);
1852
de->rec_len = ext4_rec_len_to_disk(EXT4_DIR_REC_LEN(de->name_len),
1854
strcpy(de->name, ".");
1855
ext4_set_de_type(dir->i_sb, de, S_IFDIR);
1856
de = ext4_next_entry(de, blocksize);
1857
de->inode = cpu_to_le32(dir->i_ino);
1858
de->rec_len = ext4_rec_len_to_disk(blocksize - EXT4_DIR_REC_LEN(1),
1861
strcpy(de->name, "..");
1862
ext4_set_de_type(dir->i_sb, de, S_IFDIR);
1863
set_nlink(inode, 2);
1864
BUFFER_TRACE(dir_block, "call ext4_handle_dirty_metadata");
1865
err = ext4_handle_dirty_metadata(handle, inode, dir_block);
1867
goto out_clear_inode;
1868
err = ext4_mark_inode_dirty(handle, inode);
1870
err = ext4_add_entry(handle, dentry, inode);
1874
unlock_new_inode(inode);
1875
ext4_mark_inode_dirty(handle, inode);
1879
ext4_inc_count(handle, dir);
1880
ext4_update_dx_flag(dir);
1881
err = ext4_mark_inode_dirty(handle, dir);
1883
goto out_clear_inode;
1884
d_instantiate(dentry, inode);
1885
unlock_new_inode(inode);
1888
ext4_journal_stop(handle);
1889
if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries))
1895
* routine to check that the specified directory is empty (for rmdir)
1897
static int empty_dir(struct inode *inode)
1899
unsigned int offset;
1900
struct buffer_head *bh;
1901
struct ext4_dir_entry_2 *de, *de1;
1902
struct super_block *sb;
1906
if (inode->i_size < EXT4_DIR_REC_LEN(1) + EXT4_DIR_REC_LEN(2) ||
1907
!(bh = ext4_bread(NULL, inode, 0, 0, &err))) {
1909
EXT4_ERROR_INODE(inode,
1910
"error %d reading directory lblock 0", err);
1912
ext4_warning(inode->i_sb,
1913
"bad directory (dir #%lu) - no data block",
1917
de = (struct ext4_dir_entry_2 *) bh->b_data;
1918
de1 = ext4_next_entry(de, sb->s_blocksize);
1919
if (le32_to_cpu(de->inode) != inode->i_ino ||
1920
!le32_to_cpu(de1->inode) ||
1921
strcmp(".", de->name) ||
1922
strcmp("..", de1->name)) {
1923
ext4_warning(inode->i_sb,
1924
"bad directory (dir #%lu) - no `.' or `..'",
1929
offset = ext4_rec_len_from_disk(de->rec_len, sb->s_blocksize) +
1930
ext4_rec_len_from_disk(de1->rec_len, sb->s_blocksize);
1931
de = ext4_next_entry(de1, sb->s_blocksize);
1932
while (offset < inode->i_size) {
1934
(void *) de >= (void *) (bh->b_data+sb->s_blocksize)) {
1935
unsigned int lblock;
1938
lblock = offset >> EXT4_BLOCK_SIZE_BITS(sb);
1939
bh = ext4_bread(NULL, inode, lblock, 0, &err);
1942
EXT4_ERROR_INODE(inode,
1943
"error %d reading directory "
1944
"lblock %u", err, lblock);
1945
offset += sb->s_blocksize;
1948
de = (struct ext4_dir_entry_2 *) bh->b_data;
1950
if (ext4_check_dir_entry(inode, NULL, de, bh, offset)) {
1951
de = (struct ext4_dir_entry_2 *)(bh->b_data +
1953
offset = (offset | (sb->s_blocksize - 1)) + 1;
1956
if (le32_to_cpu(de->inode)) {
1960
offset += ext4_rec_len_from_disk(de->rec_len, sb->s_blocksize);
1961
de = ext4_next_entry(de, sb->s_blocksize);
1967
/* ext4_orphan_add() links an unlinked or truncated inode into a list of
1968
* such inodes, starting at the superblock, in case we crash before the
1969
* file is closed/deleted, or in case the inode truncate spans multiple
1970
* transactions and the last transaction is not recovered after a crash.
1972
* At filesystem recovery time, we walk this list deleting unlinked
1973
* inodes and truncating linked inodes in ext4_orphan_cleanup().
1975
int ext4_orphan_add(handle_t *handle, struct inode *inode)
1977
struct super_block *sb = inode->i_sb;
1978
struct ext4_iloc iloc;
1981
if (!ext4_handle_valid(handle))
1984
mutex_lock(&EXT4_SB(sb)->s_orphan_lock);
1985
if (!list_empty(&EXT4_I(inode)->i_orphan))
1989
* Orphan handling is only valid for files with data blocks
1990
* being truncated, or files being unlinked. Note that we either
1991
* hold i_mutex, or the inode can not be referenced from outside,
1992
* so i_nlink should not be bumped due to race
1994
J_ASSERT((S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
1995
S_ISLNK(inode->i_mode)) || inode->i_nlink == 0);
1997
BUFFER_TRACE(EXT4_SB(sb)->s_sbh, "get_write_access");
1998
err = ext4_journal_get_write_access(handle, EXT4_SB(sb)->s_sbh);
2002
err = ext4_reserve_inode_write(handle, inode, &iloc);
2006
* Due to previous errors inode may be already a part of on-disk
2007
* orphan list. If so skip on-disk list modification.
2009
if (NEXT_ORPHAN(inode) && NEXT_ORPHAN(inode) <=
2010
(le32_to_cpu(EXT4_SB(sb)->s_es->s_inodes_count)))
2013
/* Insert this inode at the head of the on-disk orphan list... */
2014
NEXT_ORPHAN(inode) = le32_to_cpu(EXT4_SB(sb)->s_es->s_last_orphan);
2015
EXT4_SB(sb)->s_es->s_last_orphan = cpu_to_le32(inode->i_ino);
2016
err = ext4_handle_dirty_metadata(handle, NULL, EXT4_SB(sb)->s_sbh);
2017
rc = ext4_mark_iloc_dirty(handle, inode, &iloc);
2021
/* Only add to the head of the in-memory list if all the
2022
* previous operations succeeded. If the orphan_add is going to
2023
* fail (possibly taking the journal offline), we can't risk
2024
* leaving the inode on the orphan list: stray orphan-list
2025
* entries can cause panics at unmount time.
2027
* This is safe: on error we're going to ignore the orphan list
2028
* anyway on the next recovery. */
2031
list_add(&EXT4_I(inode)->i_orphan, &EXT4_SB(sb)->s_orphan);
2033
jbd_debug(4, "superblock will point to %lu\n", inode->i_ino);
2034
jbd_debug(4, "orphan inode %lu will point to %d\n",
2035
inode->i_ino, NEXT_ORPHAN(inode));
2037
mutex_unlock(&EXT4_SB(sb)->s_orphan_lock);
2038
ext4_std_error(inode->i_sb, err);
2043
* ext4_orphan_del() removes an unlinked or truncated inode from the list
2044
* of such inodes stored on disk, because it is finally being cleaned up.
2046
int ext4_orphan_del(handle_t *handle, struct inode *inode)
2048
struct list_head *prev;
2049
struct ext4_inode_info *ei = EXT4_I(inode);
2050
struct ext4_sb_info *sbi;
2052
struct ext4_iloc iloc;
2055
/* ext4_handle_valid() assumes a valid handle_t pointer */
2056
if (handle && !ext4_handle_valid(handle))
2059
mutex_lock(&EXT4_SB(inode->i_sb)->s_orphan_lock);
2060
if (list_empty(&ei->i_orphan))
2063
ino_next = NEXT_ORPHAN(inode);
2064
prev = ei->i_orphan.prev;
2065
sbi = EXT4_SB(inode->i_sb);
2067
jbd_debug(4, "remove inode %lu from orphan list\n", inode->i_ino);
2069
list_del_init(&ei->i_orphan);
2071
/* If we're on an error path, we may not have a valid
2072
* transaction handle with which to update the orphan list on
2073
* disk, but we still need to remove the inode from the linked
2074
* list in memory. */
2075
if (sbi->s_journal && !handle)
2078
err = ext4_reserve_inode_write(handle, inode, &iloc);
2082
if (prev == &sbi->s_orphan) {
2083
jbd_debug(4, "superblock will point to %u\n", ino_next);
2084
BUFFER_TRACE(sbi->s_sbh, "get_write_access");
2085
err = ext4_journal_get_write_access(handle, sbi->s_sbh);
2088
sbi->s_es->s_last_orphan = cpu_to_le32(ino_next);
2089
err = ext4_handle_dirty_metadata(handle, NULL, sbi->s_sbh);
2091
struct ext4_iloc iloc2;
2092
struct inode *i_prev =
2093
&list_entry(prev, struct ext4_inode_info, i_orphan)->vfs_inode;
2095
jbd_debug(4, "orphan inode %lu will point to %u\n",
2096
i_prev->i_ino, ino_next);
2097
err = ext4_reserve_inode_write(handle, i_prev, &iloc2);
2100
NEXT_ORPHAN(i_prev) = ino_next;
2101
err = ext4_mark_iloc_dirty(handle, i_prev, &iloc2);
2105
NEXT_ORPHAN(inode) = 0;
2106
err = ext4_mark_iloc_dirty(handle, inode, &iloc);
2109
ext4_std_error(inode->i_sb, err);
2111
mutex_unlock(&EXT4_SB(inode->i_sb)->s_orphan_lock);
2119
static int ext4_rmdir(struct inode *dir, struct dentry *dentry)
2122
struct inode *inode;
2123
struct buffer_head *bh;
2124
struct ext4_dir_entry_2 *de;
2127
/* Initialize quotas before so that eventual writes go in
2128
* separate transaction */
2129
dquot_initialize(dir);
2130
dquot_initialize(dentry->d_inode);
2132
handle = ext4_journal_start(dir, EXT4_DELETE_TRANS_BLOCKS(dir->i_sb));
2134
return PTR_ERR(handle);
2137
bh = ext4_find_entry(dir, &dentry->d_name, &de);
2141
if (IS_DIRSYNC(dir))
2142
ext4_handle_sync(handle);
2144
inode = dentry->d_inode;
2147
if (le32_to_cpu(de->inode) != inode->i_ino)
2150
retval = -ENOTEMPTY;
2151
if (!empty_dir(inode))
2154
retval = ext4_delete_entry(handle, dir, de, bh);
2157
if (!EXT4_DIR_LINK_EMPTY(inode))
2158
ext4_warning(inode->i_sb,
2159
"empty directory has too many links (%d)",
2163
/* There's no need to set i_disksize: the fact that i_nlink is
2164
* zero will ensure that the right thing happens during any
2167
ext4_orphan_add(handle, inode);
2168
inode->i_ctime = dir->i_ctime = dir->i_mtime = ext4_current_time(inode);
2169
ext4_mark_inode_dirty(handle, inode);
2170
ext4_dec_count(handle, dir);
2171
ext4_update_dx_flag(dir);
2172
ext4_mark_inode_dirty(handle, dir);
2175
ext4_journal_stop(handle);
2180
static int ext4_unlink(struct inode *dir, struct dentry *dentry)
2183
struct inode *inode;
2184
struct buffer_head *bh;
2185
struct ext4_dir_entry_2 *de;
2188
trace_ext4_unlink_enter(dir, dentry);
2189
/* Initialize quotas before so that eventual writes go
2190
* in separate transaction */
2191
dquot_initialize(dir);
2192
dquot_initialize(dentry->d_inode);
2194
handle = ext4_journal_start(dir, EXT4_DELETE_TRANS_BLOCKS(dir->i_sb));
2196
return PTR_ERR(handle);
2198
if (IS_DIRSYNC(dir))
2199
ext4_handle_sync(handle);
2202
bh = ext4_find_entry(dir, &dentry->d_name, &de);
2206
inode = dentry->d_inode;
2209
if (le32_to_cpu(de->inode) != inode->i_ino)
2212
if (!inode->i_nlink) {
2213
ext4_warning(inode->i_sb,
2214
"Deleting nonexistent file (%lu), %d",
2215
inode->i_ino, inode->i_nlink);
2216
set_nlink(inode, 1);
2218
retval = ext4_delete_entry(handle, dir, de, bh);
2221
dir->i_ctime = dir->i_mtime = ext4_current_time(dir);
2222
ext4_update_dx_flag(dir);
2223
ext4_mark_inode_dirty(handle, dir);
2225
if (!inode->i_nlink)
2226
ext4_orphan_add(handle, inode);
2227
inode->i_ctime = ext4_current_time(inode);
2228
ext4_mark_inode_dirty(handle, inode);
2232
ext4_journal_stop(handle);
2234
trace_ext4_unlink_exit(dentry, retval);
2238
static int ext4_symlink(struct inode *dir,
2239
struct dentry *dentry, const char *symname)
2242
struct inode *inode;
2243
int l, err, retries = 0;
2246
l = strlen(symname)+1;
2247
if (l > dir->i_sb->s_blocksize)
2248
return -ENAMETOOLONG;
2250
dquot_initialize(dir);
2252
if (l > EXT4_N_BLOCKS * 4) {
2254
* For non-fast symlinks, we just allocate inode and put it on
2255
* orphan list in the first transaction => we need bitmap,
2256
* group descriptor, sb, inode block, quota blocks, and
2257
* possibly selinux xattr blocks.
2259
credits = 4 + EXT4_MAXQUOTAS_INIT_BLOCKS(dir->i_sb) +
2260
EXT4_XATTR_TRANS_BLOCKS;
2263
* Fast symlink. We have to add entry to directory
2264
* (EXT4_DATA_TRANS_BLOCKS + EXT4_INDEX_EXTRA_TRANS_BLOCKS),
2265
* allocate new inode (bitmap, group descriptor, inode block,
2266
* quota blocks, sb is already counted in previous macros).
2268
credits = EXT4_DATA_TRANS_BLOCKS(dir->i_sb) +
2269
EXT4_INDEX_EXTRA_TRANS_BLOCKS + 3 +
2270
EXT4_MAXQUOTAS_INIT_BLOCKS(dir->i_sb);
2273
handle = ext4_journal_start(dir, credits);
2275
return PTR_ERR(handle);
2277
if (IS_DIRSYNC(dir))
2278
ext4_handle_sync(handle);
2280
inode = ext4_new_inode(handle, dir, S_IFLNK|S_IRWXUGO,
2281
&dentry->d_name, 0, NULL);
2282
err = PTR_ERR(inode);
2286
if (l > EXT4_N_BLOCKS * 4) {
2287
inode->i_op = &ext4_symlink_inode_operations;
2288
ext4_set_aops(inode);
2290
* We cannot call page_symlink() with transaction started
2291
* because it calls into ext4_write_begin() which can wait
2292
* for transaction commit if we are running out of space
2293
* and thus we deadlock. So we have to stop transaction now
2294
* and restart it when symlink contents is written.
2296
* To keep fs consistent in case of crash, we have to put inode
2297
* to orphan list in the mean time.
2300
err = ext4_orphan_add(handle, inode);
2301
ext4_journal_stop(handle);
2303
goto err_drop_inode;
2304
err = __page_symlink(inode, symname, l, 1);
2306
goto err_drop_inode;
2308
* Now inode is being linked into dir (EXT4_DATA_TRANS_BLOCKS
2309
* + EXT4_INDEX_EXTRA_TRANS_BLOCKS), inode is also modified
2311
handle = ext4_journal_start(dir,
2312
EXT4_DATA_TRANS_BLOCKS(dir->i_sb) +
2313
EXT4_INDEX_EXTRA_TRANS_BLOCKS + 1);
2314
if (IS_ERR(handle)) {
2315
err = PTR_ERR(handle);
2316
goto err_drop_inode;
2319
err = ext4_orphan_del(handle, inode);
2321
ext4_journal_stop(handle);
2323
goto err_drop_inode;
2326
/* clear the extent format for fast symlink */
2327
ext4_clear_inode_flag(inode, EXT4_INODE_EXTENTS);
2328
inode->i_op = &ext4_fast_symlink_inode_operations;
2329
memcpy((char *)&EXT4_I(inode)->i_data, symname, l);
2330
inode->i_size = l-1;
2332
EXT4_I(inode)->i_disksize = inode->i_size;
2333
err = ext4_add_nondir(handle, dentry, inode);
2335
ext4_journal_stop(handle);
2336
if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries))
2340
unlock_new_inode(inode);
2345
static int ext4_link(struct dentry *old_dentry,
2346
struct inode *dir, struct dentry *dentry)
2349
struct inode *inode = old_dentry->d_inode;
2350
int err, retries = 0;
2352
if (inode->i_nlink >= EXT4_LINK_MAX)
2355
dquot_initialize(dir);
2358
handle = ext4_journal_start(dir, EXT4_DATA_TRANS_BLOCKS(dir->i_sb) +
2359
EXT4_INDEX_EXTRA_TRANS_BLOCKS);
2361
return PTR_ERR(handle);
2363
if (IS_DIRSYNC(dir))
2364
ext4_handle_sync(handle);
2366
inode->i_ctime = ext4_current_time(inode);
2367
ext4_inc_count(handle, inode);
2370
err = ext4_add_entry(handle, dentry, inode);
2372
ext4_mark_inode_dirty(handle, inode);
2373
d_instantiate(dentry, inode);
2378
ext4_journal_stop(handle);
2379
if (err == -ENOSPC && ext4_should_retry_alloc(dir->i_sb, &retries))
2384
#define PARENT_INO(buffer, size) \
2385
(ext4_next_entry((struct ext4_dir_entry_2 *)(buffer), size)->inode)
2388
* Anybody can rename anything with this: the permission checks are left to the
2389
* higher-level routines.
2391
static int ext4_rename(struct inode *old_dir, struct dentry *old_dentry,
2392
struct inode *new_dir, struct dentry *new_dentry)
2395
struct inode *old_inode, *new_inode;
2396
struct buffer_head *old_bh, *new_bh, *dir_bh;
2397
struct ext4_dir_entry_2 *old_de, *new_de;
2398
int retval, force_da_alloc = 0;
2400
dquot_initialize(old_dir);
2401
dquot_initialize(new_dir);
2403
old_bh = new_bh = dir_bh = NULL;
2405
/* Initialize quotas before so that eventual writes go
2406
* in separate transaction */
2407
if (new_dentry->d_inode)
2408
dquot_initialize(new_dentry->d_inode);
2409
handle = ext4_journal_start(old_dir, 2 *
2410
EXT4_DATA_TRANS_BLOCKS(old_dir->i_sb) +
2411
EXT4_INDEX_EXTRA_TRANS_BLOCKS + 2);
2413
return PTR_ERR(handle);
2415
if (IS_DIRSYNC(old_dir) || IS_DIRSYNC(new_dir))
2416
ext4_handle_sync(handle);
2418
old_bh = ext4_find_entry(old_dir, &old_dentry->d_name, &old_de);
2420
* Check for inode number is _not_ due to possible IO errors.
2421
* We might rmdir the source, keep it as pwd of some process
2422
* and merrily kill the link to whatever was created under the
2423
* same name. Goodbye sticky bit ;-<
2425
old_inode = old_dentry->d_inode;
2427
if (!old_bh || le32_to_cpu(old_de->inode) != old_inode->i_ino)
2430
new_inode = new_dentry->d_inode;
2431
new_bh = ext4_find_entry(new_dir, &new_dentry->d_name, &new_de);
2438
if (S_ISDIR(old_inode->i_mode)) {
2440
retval = -ENOTEMPTY;
2441
if (!empty_dir(new_inode))
2445
dir_bh = ext4_bread(handle, old_inode, 0, 0, &retval);
2448
if (le32_to_cpu(PARENT_INO(dir_bh->b_data,
2449
old_dir->i_sb->s_blocksize)) != old_dir->i_ino)
2452
if (!new_inode && new_dir != old_dir &&
2453
EXT4_DIR_LINK_MAX(new_dir))
2455
BUFFER_TRACE(dir_bh, "get_write_access");
2456
retval = ext4_journal_get_write_access(handle, dir_bh);
2461
retval = ext4_add_entry(handle, new_dentry, old_inode);
2465
BUFFER_TRACE(new_bh, "get write access");
2466
retval = ext4_journal_get_write_access(handle, new_bh);
2469
new_de->inode = cpu_to_le32(old_inode->i_ino);
2470
if (EXT4_HAS_INCOMPAT_FEATURE(new_dir->i_sb,
2471
EXT4_FEATURE_INCOMPAT_FILETYPE))
2472
new_de->file_type = old_de->file_type;
2473
new_dir->i_version++;
2474
new_dir->i_ctime = new_dir->i_mtime =
2475
ext4_current_time(new_dir);
2476
ext4_mark_inode_dirty(handle, new_dir);
2477
BUFFER_TRACE(new_bh, "call ext4_handle_dirty_metadata");
2478
retval = ext4_handle_dirty_metadata(handle, new_dir, new_bh);
2479
if (unlikely(retval)) {
2480
ext4_std_error(new_dir->i_sb, retval);
2488
* Like most other Unix systems, set the ctime for inodes on a
2491
old_inode->i_ctime = ext4_current_time(old_inode);
2492
ext4_mark_inode_dirty(handle, old_inode);
2497
if (le32_to_cpu(old_de->inode) != old_inode->i_ino ||
2498
old_de->name_len != old_dentry->d_name.len ||
2499
strncmp(old_de->name, old_dentry->d_name.name, old_de->name_len) ||
2500
(retval = ext4_delete_entry(handle, old_dir,
2501
old_de, old_bh)) == -ENOENT) {
2502
/* old_de could have moved from under us during htree split, so
2503
* make sure that we are deleting the right entry. We might
2504
* also be pointing to a stale entry in the unused part of
2505
* old_bh so just checking inum and the name isn't enough. */
2506
struct buffer_head *old_bh2;
2507
struct ext4_dir_entry_2 *old_de2;
2509
old_bh2 = ext4_find_entry(old_dir, &old_dentry->d_name, &old_de2);
2511
retval = ext4_delete_entry(handle, old_dir,
2517
ext4_warning(old_dir->i_sb,
2518
"Deleting old file (%lu), %d, error=%d",
2519
old_dir->i_ino, old_dir->i_nlink, retval);
2523
ext4_dec_count(handle, new_inode);
2524
new_inode->i_ctime = ext4_current_time(new_inode);
2526
old_dir->i_ctime = old_dir->i_mtime = ext4_current_time(old_dir);
2527
ext4_update_dx_flag(old_dir);
2529
PARENT_INO(dir_bh->b_data, new_dir->i_sb->s_blocksize) =
2530
cpu_to_le32(new_dir->i_ino);
2531
BUFFER_TRACE(dir_bh, "call ext4_handle_dirty_metadata");
2532
retval = ext4_handle_dirty_metadata(handle, old_inode, dir_bh);
2534
ext4_std_error(old_dir->i_sb, retval);
2537
ext4_dec_count(handle, old_dir);
2539
/* checked empty_dir above, can't have another parent,
2540
* ext4_dec_count() won't work for many-linked dirs */
2541
clear_nlink(new_inode);
2543
ext4_inc_count(handle, new_dir);
2544
ext4_update_dx_flag(new_dir);
2545
ext4_mark_inode_dirty(handle, new_dir);
2548
ext4_mark_inode_dirty(handle, old_dir);
2550
ext4_mark_inode_dirty(handle, new_inode);
2551
if (!new_inode->i_nlink)
2552
ext4_orphan_add(handle, new_inode);
2553
if (!test_opt(new_dir->i_sb, NO_AUTO_DA_ALLOC))
2562
ext4_journal_stop(handle);
2563
if (retval == 0 && force_da_alloc)
2564
ext4_alloc_da_blocks(old_inode);
2569
* directories can handle most operations...
2571
const struct inode_operations ext4_dir_inode_operations = {
2572
.create = ext4_create,
2573
.lookup = ext4_lookup,
2575
.unlink = ext4_unlink,
2576
.symlink = ext4_symlink,
2577
.mkdir = ext4_mkdir,
2578
.rmdir = ext4_rmdir,
2579
.mknod = ext4_mknod,
2580
.rename = ext4_rename,
2581
.setattr = ext4_setattr,
2582
#ifdef CONFIG_EXT4_FS_XATTR
2583
.setxattr = generic_setxattr,
2584
.getxattr = generic_getxattr,
2585
.listxattr = ext4_listxattr,
2586
.removexattr = generic_removexattr,
2588
.get_acl = ext4_get_acl,
2589
.fiemap = ext4_fiemap,
2592
const struct inode_operations ext4_special_inode_operations = {
2593
.setattr = ext4_setattr,
2594
#ifdef CONFIG_EXT4_FS_XATTR
2595
.setxattr = generic_setxattr,
2596
.getxattr = generic_getxattr,
2597
.listxattr = ext4_listxattr,
2598
.removexattr = generic_removexattr,
2600
.get_acl = ext4_get_acl,