netfilter: remove unnecessary goto statement for error recovery
[cascardo/linux.git] / fs / xfs / xfs_dir2_node.c
1 /*
2  * Copyright (c) 2000-2005 Silicon Graphics, Inc.
3  * All Rights Reserved.
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License as
7  * published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it would be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write the Free Software Foundation,
16  * Inc.,  51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
17  */
18 #include "xfs.h"
19 #include "xfs_fs.h"
20 #include "xfs_types.h"
21 #include "xfs_log.h"
22 #include "xfs_trans.h"
23 #include "xfs_sb.h"
24 #include "xfs_ag.h"
25 #include "xfs_mount.h"
26 #include "xfs_da_btree.h"
27 #include "xfs_bmap_btree.h"
28 #include "xfs_dinode.h"
29 #include "xfs_inode.h"
30 #include "xfs_bmap.h"
31 #include "xfs_dir2_format.h"
32 #include "xfs_dir2_priv.h"
33 #include "xfs_error.h"
34 #include "xfs_trace.h"
35
36 /*
37  * Function declarations.
38  */
39 static void xfs_dir2_free_log_header(xfs_trans_t *tp, xfs_dabuf_t *bp);
40 static int xfs_dir2_leafn_add(xfs_dabuf_t *bp, xfs_da_args_t *args, int index);
41 #ifdef DEBUG
42 static void xfs_dir2_leafn_check(xfs_inode_t *dp, xfs_dabuf_t *bp);
43 #else
44 #define xfs_dir2_leafn_check(dp, bp)
45 #endif
46 static void xfs_dir2_leafn_moveents(xfs_da_args_t *args, xfs_dabuf_t *bp_s,
47                                     int start_s, xfs_dabuf_t *bp_d, int start_d,
48                                     int count);
49 static void xfs_dir2_leafn_rebalance(xfs_da_state_t *state,
50                                      xfs_da_state_blk_t *blk1,
51                                      xfs_da_state_blk_t *blk2);
52 static int xfs_dir2_leafn_remove(xfs_da_args_t *args, xfs_dabuf_t *bp,
53                                  int index, xfs_da_state_blk_t *dblk,
54                                  int *rval);
55 static int xfs_dir2_node_addname_int(xfs_da_args_t *args,
56                                      xfs_da_state_blk_t *fblk);
57
58 /*
59  * Log entries from a freespace block.
60  */
61 STATIC void
62 xfs_dir2_free_log_bests(
63         xfs_trans_t             *tp,            /* transaction pointer */
64         xfs_dabuf_t             *bp,            /* freespace buffer */
65         int                     first,          /* first entry to log */
66         int                     last)           /* last entry to log */
67 {
68         xfs_dir2_free_t         *free;          /* freespace structure */
69
70         free = bp->data;
71         ASSERT(free->hdr.magic == cpu_to_be32(XFS_DIR2_FREE_MAGIC));
72         xfs_da_log_buf(tp, bp,
73                 (uint)((char *)&free->bests[first] - (char *)free),
74                 (uint)((char *)&free->bests[last] - (char *)free +
75                        sizeof(free->bests[0]) - 1));
76 }
77
78 /*
79  * Log header from a freespace block.
80  */
81 static void
82 xfs_dir2_free_log_header(
83         xfs_trans_t             *tp,            /* transaction pointer */
84         xfs_dabuf_t             *bp)            /* freespace buffer */
85 {
86         xfs_dir2_free_t         *free;          /* freespace structure */
87
88         free = bp->data;
89         ASSERT(free->hdr.magic == cpu_to_be32(XFS_DIR2_FREE_MAGIC));
90         xfs_da_log_buf(tp, bp, (uint)((char *)&free->hdr - (char *)free),
91                 (uint)(sizeof(xfs_dir2_free_hdr_t) - 1));
92 }
93
94 /*
95  * Convert a leaf-format directory to a node-format directory.
96  * We need to change the magic number of the leaf block, and copy
97  * the freespace table out of the leaf block into its own block.
98  */
99 int                                             /* error */
100 xfs_dir2_leaf_to_node(
101         xfs_da_args_t           *args,          /* operation arguments */
102         xfs_dabuf_t             *lbp)           /* leaf buffer */
103 {
104         xfs_inode_t             *dp;            /* incore directory inode */
105         int                     error;          /* error return value */
106         xfs_dabuf_t             *fbp;           /* freespace buffer */
107         xfs_dir2_db_t           fdb;            /* freespace block number */
108         xfs_dir2_free_t         *free;          /* freespace structure */
109         __be16                  *from;          /* pointer to freespace entry */
110         int                     i;              /* leaf freespace index */
111         xfs_dir2_leaf_t         *leaf;          /* leaf structure */
112         xfs_dir2_leaf_tail_t    *ltp;           /* leaf tail structure */
113         xfs_mount_t             *mp;            /* filesystem mount point */
114         int                     n;              /* count of live freespc ents */
115         xfs_dir2_data_off_t     off;            /* freespace entry value */
116         __be16                  *to;            /* pointer to freespace entry */
117         xfs_trans_t             *tp;            /* transaction pointer */
118
119         trace_xfs_dir2_leaf_to_node(args);
120
121         dp = args->dp;
122         mp = dp->i_mount;
123         tp = args->trans;
124         /*
125          * Add a freespace block to the directory.
126          */
127         if ((error = xfs_dir2_grow_inode(args, XFS_DIR2_FREE_SPACE, &fdb))) {
128                 return error;
129         }
130         ASSERT(fdb == XFS_DIR2_FREE_FIRSTDB(mp));
131         /*
132          * Get the buffer for the new freespace block.
133          */
134         if ((error = xfs_da_get_buf(tp, dp, xfs_dir2_db_to_da(mp, fdb), -1, &fbp,
135                         XFS_DATA_FORK))) {
136                 return error;
137         }
138         ASSERT(fbp != NULL);
139         free = fbp->data;
140         leaf = lbp->data;
141         ltp = xfs_dir2_leaf_tail_p(mp, leaf);
142         /*
143          * Initialize the freespace block header.
144          */
145         free->hdr.magic = cpu_to_be32(XFS_DIR2_FREE_MAGIC);
146         free->hdr.firstdb = 0;
147         ASSERT(be32_to_cpu(ltp->bestcount) <= (uint)dp->i_d.di_size / mp->m_dirblksize);
148         free->hdr.nvalid = ltp->bestcount;
149         /*
150          * Copy freespace entries from the leaf block to the new block.
151          * Count active entries.
152          */
153         for (i = n = 0, from = xfs_dir2_leaf_bests_p(ltp), to = free->bests;
154              i < be32_to_cpu(ltp->bestcount); i++, from++, to++) {
155                 if ((off = be16_to_cpu(*from)) != NULLDATAOFF)
156                         n++;
157                 *to = cpu_to_be16(off);
158         }
159         free->hdr.nused = cpu_to_be32(n);
160         leaf->hdr.info.magic = cpu_to_be16(XFS_DIR2_LEAFN_MAGIC);
161         /*
162          * Log everything.
163          */
164         xfs_dir2_leaf_log_header(tp, lbp);
165         xfs_dir2_free_log_header(tp, fbp);
166         xfs_dir2_free_log_bests(tp, fbp, 0, be32_to_cpu(free->hdr.nvalid) - 1);
167         xfs_da_buf_done(fbp);
168         xfs_dir2_leafn_check(dp, lbp);
169         return 0;
170 }
171
172 /*
173  * Add a leaf entry to a leaf block in a node-form directory.
174  * The other work necessary is done from the caller.
175  */
176 static int                                      /* error */
177 xfs_dir2_leafn_add(
178         xfs_dabuf_t             *bp,            /* leaf buffer */
179         xfs_da_args_t           *args,          /* operation arguments */
180         int                     index)          /* insertion pt for new entry */
181 {
182         int                     compact;        /* compacting stale leaves */
183         xfs_inode_t             *dp;            /* incore directory inode */
184         int                     highstale;      /* next stale entry */
185         xfs_dir2_leaf_t         *leaf;          /* leaf structure */
186         xfs_dir2_leaf_entry_t   *lep;           /* leaf entry */
187         int                     lfloghigh;      /* high leaf entry logging */
188         int                     lfloglow;       /* low leaf entry logging */
189         int                     lowstale;       /* previous stale entry */
190         xfs_mount_t             *mp;            /* filesystem mount point */
191         xfs_trans_t             *tp;            /* transaction pointer */
192
193         trace_xfs_dir2_leafn_add(args, index);
194
195         dp = args->dp;
196         mp = dp->i_mount;
197         tp = args->trans;
198         leaf = bp->data;
199
200         /*
201          * Quick check just to make sure we are not going to index
202          * into other peoples memory
203          */
204         if (index < 0)
205                 return XFS_ERROR(EFSCORRUPTED);
206
207         /*
208          * If there are already the maximum number of leaf entries in
209          * the block, if there are no stale entries it won't fit.
210          * Caller will do a split.  If there are stale entries we'll do
211          * a compact.
212          */
213
214         if (be16_to_cpu(leaf->hdr.count) == xfs_dir2_max_leaf_ents(mp)) {
215                 if (!leaf->hdr.stale)
216                         return XFS_ERROR(ENOSPC);
217                 compact = be16_to_cpu(leaf->hdr.stale) > 1;
218         } else
219                 compact = 0;
220         ASSERT(index == 0 || be32_to_cpu(leaf->ents[index - 1].hashval) <= args->hashval);
221         ASSERT(index == be16_to_cpu(leaf->hdr.count) ||
222                be32_to_cpu(leaf->ents[index].hashval) >= args->hashval);
223
224         if (args->op_flags & XFS_DA_OP_JUSTCHECK)
225                 return 0;
226
227         /*
228          * Compact out all but one stale leaf entry.  Leaves behind
229          * the entry closest to index.
230          */
231         if (compact) {
232                 xfs_dir2_leaf_compact_x1(bp, &index, &lowstale, &highstale,
233                         &lfloglow, &lfloghigh);
234         }
235         /*
236          * Set impossible logging indices for this case.
237          */
238         else if (leaf->hdr.stale) {
239                 lfloglow = be16_to_cpu(leaf->hdr.count);
240                 lfloghigh = -1;
241         }
242
243         /*
244          * Insert the new entry, log everything.
245          */
246         lep = xfs_dir2_leaf_find_entry(leaf, index, compact, lowstale,
247                                        highstale, &lfloglow, &lfloghigh);
248
249         lep->hashval = cpu_to_be32(args->hashval);
250         lep->address = cpu_to_be32(xfs_dir2_db_off_to_dataptr(mp,
251                                 args->blkno, args->index));
252         xfs_dir2_leaf_log_header(tp, bp);
253         xfs_dir2_leaf_log_ents(tp, bp, lfloglow, lfloghigh);
254         xfs_dir2_leafn_check(dp, bp);
255         return 0;
256 }
257
258 #ifdef DEBUG
259 /*
260  * Check internal consistency of a leafn block.
261  */
262 void
263 xfs_dir2_leafn_check(
264         xfs_inode_t     *dp,                    /* incore directory inode */
265         xfs_dabuf_t     *bp)                    /* leaf buffer */
266 {
267         int             i;                      /* leaf index */
268         xfs_dir2_leaf_t *leaf;                  /* leaf structure */
269         xfs_mount_t     *mp;                    /* filesystem mount point */
270         int             stale;                  /* count of stale leaves */
271
272         leaf = bp->data;
273         mp = dp->i_mount;
274         ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC));
275         ASSERT(be16_to_cpu(leaf->hdr.count) <= xfs_dir2_max_leaf_ents(mp));
276         for (i = stale = 0; i < be16_to_cpu(leaf->hdr.count); i++) {
277                 if (i + 1 < be16_to_cpu(leaf->hdr.count)) {
278                         ASSERT(be32_to_cpu(leaf->ents[i].hashval) <=
279                                be32_to_cpu(leaf->ents[i + 1].hashval));
280                 }
281                 if (leaf->ents[i].address == cpu_to_be32(XFS_DIR2_NULL_DATAPTR))
282                         stale++;
283         }
284         ASSERT(be16_to_cpu(leaf->hdr.stale) == stale);
285 }
286 #endif  /* DEBUG */
287
288 /*
289  * Return the last hash value in the leaf.
290  * Stale entries are ok.
291  */
292 xfs_dahash_t                                    /* hash value */
293 xfs_dir2_leafn_lasthash(
294         xfs_dabuf_t     *bp,                    /* leaf buffer */
295         int             *count)                 /* count of entries in leaf */
296 {
297         xfs_dir2_leaf_t *leaf;                  /* leaf structure */
298
299         leaf = bp->data;
300         ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC));
301         if (count)
302                 *count = be16_to_cpu(leaf->hdr.count);
303         if (!leaf->hdr.count)
304                 return 0;
305         return be32_to_cpu(leaf->ents[be16_to_cpu(leaf->hdr.count) - 1].hashval);
306 }
307
308 /*
309  * Look up a leaf entry for space to add a name in a node-format leaf block.
310  * The extrablk in state is a freespace block.
311  */
312 STATIC int
313 xfs_dir2_leafn_lookup_for_addname(
314         xfs_dabuf_t             *bp,            /* leaf buffer */
315         xfs_da_args_t           *args,          /* operation arguments */
316         int                     *indexp,        /* out: leaf entry index */
317         xfs_da_state_t          *state)         /* state to fill in */
318 {
319         xfs_dabuf_t             *curbp = NULL;  /* current data/free buffer */
320         xfs_dir2_db_t           curdb = -1;     /* current data block number */
321         xfs_dir2_db_t           curfdb = -1;    /* current free block number */
322         xfs_inode_t             *dp;            /* incore directory inode */
323         int                     error;          /* error return value */
324         int                     fi;             /* free entry index */
325         xfs_dir2_free_t         *free = NULL;   /* free block structure */
326         int                     index;          /* leaf entry index */
327         xfs_dir2_leaf_t         *leaf;          /* leaf structure */
328         int                     length;         /* length of new data entry */
329         xfs_dir2_leaf_entry_t   *lep;           /* leaf entry */
330         xfs_mount_t             *mp;            /* filesystem mount point */
331         xfs_dir2_db_t           newdb;          /* new data block number */
332         xfs_dir2_db_t           newfdb;         /* new free block number */
333         xfs_trans_t             *tp;            /* transaction pointer */
334
335         dp = args->dp;
336         tp = args->trans;
337         mp = dp->i_mount;
338         leaf = bp->data;
339         ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC));
340 #ifdef __KERNEL__
341         ASSERT(be16_to_cpu(leaf->hdr.count) > 0);
342 #endif
343         xfs_dir2_leafn_check(dp, bp);
344         /*
345          * Look up the hash value in the leaf entries.
346          */
347         index = xfs_dir2_leaf_search_hash(args, bp);
348         /*
349          * Do we have a buffer coming in?
350          */
351         if (state->extravalid) {
352                 /* If so, it's a free block buffer, get the block number. */
353                 curbp = state->extrablk.bp;
354                 curfdb = state->extrablk.blkno;
355                 free = curbp->data;
356                 ASSERT(free->hdr.magic == cpu_to_be32(XFS_DIR2_FREE_MAGIC));
357         }
358         length = xfs_dir2_data_entsize(args->namelen);
359         /*
360          * Loop over leaf entries with the right hash value.
361          */
362         for (lep = &leaf->ents[index]; index < be16_to_cpu(leaf->hdr.count) &&
363                                 be32_to_cpu(lep->hashval) == args->hashval;
364                                 lep++, index++) {
365                 /*
366                  * Skip stale leaf entries.
367                  */
368                 if (be32_to_cpu(lep->address) == XFS_DIR2_NULL_DATAPTR)
369                         continue;
370                 /*
371                  * Pull the data block number from the entry.
372                  */
373                 newdb = xfs_dir2_dataptr_to_db(mp, be32_to_cpu(lep->address));
374                 /*
375                  * For addname, we're looking for a place to put the new entry.
376                  * We want to use a data block with an entry of equal
377                  * hash value to ours if there is one with room.
378                  *
379                  * If this block isn't the data block we already have
380                  * in hand, take a look at it.
381                  */
382                 if (newdb != curdb) {
383                         curdb = newdb;
384                         /*
385                          * Convert the data block to the free block
386                          * holding its freespace information.
387                          */
388                         newfdb = xfs_dir2_db_to_fdb(mp, newdb);
389                         /*
390                          * If it's not the one we have in hand, read it in.
391                          */
392                         if (newfdb != curfdb) {
393                                 /*
394                                  * If we had one before, drop it.
395                                  */
396                                 if (curbp)
397                                         xfs_da_brelse(tp, curbp);
398                                 /*
399                                  * Read the free block.
400                                  */
401                                 error = xfs_da_read_buf(tp, dp,
402                                                 xfs_dir2_db_to_da(mp, newfdb),
403                                                 -1, &curbp, XFS_DATA_FORK);
404                                 if (error)
405                                         return error;
406                                 free = curbp->data;
407                                 ASSERT(be32_to_cpu(free->hdr.magic) ==
408                                         XFS_DIR2_FREE_MAGIC);
409                                 ASSERT((be32_to_cpu(free->hdr.firstdb) %
410                                         xfs_dir2_free_max_bests(mp)) == 0);
411                                 ASSERT(be32_to_cpu(free->hdr.firstdb) <= curdb);
412                                 ASSERT(curdb < be32_to_cpu(free->hdr.firstdb) +
413                                         be32_to_cpu(free->hdr.nvalid));
414                         }
415                         /*
416                          * Get the index for our entry.
417                          */
418                         fi = xfs_dir2_db_to_fdindex(mp, curdb);
419                         /*
420                          * If it has room, return it.
421                          */
422                         if (unlikely(free->bests[fi] ==
423                             cpu_to_be16(NULLDATAOFF))) {
424                                 XFS_ERROR_REPORT("xfs_dir2_leafn_lookup_int",
425                                                         XFS_ERRLEVEL_LOW, mp);
426                                 if (curfdb != newfdb)
427                                         xfs_da_brelse(tp, curbp);
428                                 return XFS_ERROR(EFSCORRUPTED);
429                         }
430                         curfdb = newfdb;
431                         if (be16_to_cpu(free->bests[fi]) >= length)
432                                 goto out;
433                 }
434         }
435         /* Didn't find any space */
436         fi = -1;
437 out:
438         ASSERT(args->op_flags & XFS_DA_OP_OKNOENT);
439         if (curbp) {
440                 /* Giving back a free block. */
441                 state->extravalid = 1;
442                 state->extrablk.bp = curbp;
443                 state->extrablk.index = fi;
444                 state->extrablk.blkno = curfdb;
445                 state->extrablk.magic = XFS_DIR2_FREE_MAGIC;
446         } else {
447                 state->extravalid = 0;
448         }
449         /*
450          * Return the index, that will be the insertion point.
451          */
452         *indexp = index;
453         return XFS_ERROR(ENOENT);
454 }
455
456 /*
457  * Look up a leaf entry in a node-format leaf block.
458  * The extrablk in state a data block.
459  */
460 STATIC int
461 xfs_dir2_leafn_lookup_for_entry(
462         xfs_dabuf_t             *bp,            /* leaf buffer */
463         xfs_da_args_t           *args,          /* operation arguments */
464         int                     *indexp,        /* out: leaf entry index */
465         xfs_da_state_t          *state)         /* state to fill in */
466 {
467         xfs_dabuf_t             *curbp = NULL;  /* current data/free buffer */
468         xfs_dir2_db_t           curdb = -1;     /* current data block number */
469         xfs_dir2_data_entry_t   *dep;           /* data block entry */
470         xfs_inode_t             *dp;            /* incore directory inode */
471         int                     error;          /* error return value */
472         int                     index;          /* leaf entry index */
473         xfs_dir2_leaf_t         *leaf;          /* leaf structure */
474         xfs_dir2_leaf_entry_t   *lep;           /* leaf entry */
475         xfs_mount_t             *mp;            /* filesystem mount point */
476         xfs_dir2_db_t           newdb;          /* new data block number */
477         xfs_trans_t             *tp;            /* transaction pointer */
478         enum xfs_dacmp          cmp;            /* comparison result */
479
480         dp = args->dp;
481         tp = args->trans;
482         mp = dp->i_mount;
483         leaf = bp->data;
484         ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC));
485 #ifdef __KERNEL__
486         ASSERT(be16_to_cpu(leaf->hdr.count) > 0);
487 #endif
488         xfs_dir2_leafn_check(dp, bp);
489         /*
490          * Look up the hash value in the leaf entries.
491          */
492         index = xfs_dir2_leaf_search_hash(args, bp);
493         /*
494          * Do we have a buffer coming in?
495          */
496         if (state->extravalid) {
497                 curbp = state->extrablk.bp;
498                 curdb = state->extrablk.blkno;
499         }
500         /*
501          * Loop over leaf entries with the right hash value.
502          */
503         for (lep = &leaf->ents[index]; index < be16_to_cpu(leaf->hdr.count) &&
504                                 be32_to_cpu(lep->hashval) == args->hashval;
505                                 lep++, index++) {
506                 /*
507                  * Skip stale leaf entries.
508                  */
509                 if (be32_to_cpu(lep->address) == XFS_DIR2_NULL_DATAPTR)
510                         continue;
511                 /*
512                  * Pull the data block number from the entry.
513                  */
514                 newdb = xfs_dir2_dataptr_to_db(mp, be32_to_cpu(lep->address));
515                 /*
516                  * Not adding a new entry, so we really want to find
517                  * the name given to us.
518                  *
519                  * If it's a different data block, go get it.
520                  */
521                 if (newdb != curdb) {
522                         /*
523                          * If we had a block before that we aren't saving
524                          * for a CI name, drop it
525                          */
526                         if (curbp && (args->cmpresult == XFS_CMP_DIFFERENT ||
527                                                 curdb != state->extrablk.blkno))
528                                 xfs_da_brelse(tp, curbp);
529                         /*
530                          * If needing the block that is saved with a CI match,
531                          * use it otherwise read in the new data block.
532                          */
533                         if (args->cmpresult != XFS_CMP_DIFFERENT &&
534                                         newdb == state->extrablk.blkno) {
535                                 ASSERT(state->extravalid);
536                                 curbp = state->extrablk.bp;
537                         } else {
538                                 error = xfs_da_read_buf(tp, dp,
539                                                 xfs_dir2_db_to_da(mp, newdb),
540                                                 -1, &curbp, XFS_DATA_FORK);
541                                 if (error)
542                                         return error;
543                         }
544                         xfs_dir2_data_check(dp, curbp);
545                         curdb = newdb;
546                 }
547                 /*
548                  * Point to the data entry.
549                  */
550                 dep = (xfs_dir2_data_entry_t *)((char *)curbp->data +
551                         xfs_dir2_dataptr_to_off(mp, be32_to_cpu(lep->address)));
552                 /*
553                  * Compare the entry and if it's an exact match, return
554                  * EEXIST immediately. If it's the first case-insensitive
555                  * match, store the block & inode number and continue looking.
556                  */
557                 cmp = mp->m_dirnameops->compname(args, dep->name, dep->namelen);
558                 if (cmp != XFS_CMP_DIFFERENT && cmp != args->cmpresult) {
559                         /* If there is a CI match block, drop it */
560                         if (args->cmpresult != XFS_CMP_DIFFERENT &&
561                                                 curdb != state->extrablk.blkno)
562                                 xfs_da_brelse(tp, state->extrablk.bp);
563                         args->cmpresult = cmp;
564                         args->inumber = be64_to_cpu(dep->inumber);
565                         *indexp = index;
566                         state->extravalid = 1;
567                         state->extrablk.bp = curbp;
568                         state->extrablk.blkno = curdb;
569                         state->extrablk.index = (int)((char *)dep -
570                                                         (char *)curbp->data);
571                         state->extrablk.magic = XFS_DIR2_DATA_MAGIC;
572                         if (cmp == XFS_CMP_EXACT)
573                                 return XFS_ERROR(EEXIST);
574                 }
575         }
576         ASSERT(index == be16_to_cpu(leaf->hdr.count) ||
577                                         (args->op_flags & XFS_DA_OP_OKNOENT));
578         if (curbp) {
579                 if (args->cmpresult == XFS_CMP_DIFFERENT) {
580                         /* Giving back last used data block. */
581                         state->extravalid = 1;
582                         state->extrablk.bp = curbp;
583                         state->extrablk.index = -1;
584                         state->extrablk.blkno = curdb;
585                         state->extrablk.magic = XFS_DIR2_DATA_MAGIC;
586                 } else {
587                         /* If the curbp is not the CI match block, drop it */
588                         if (state->extrablk.bp != curbp)
589                                 xfs_da_brelse(tp, curbp);
590                 }
591         } else {
592                 state->extravalid = 0;
593         }
594         *indexp = index;
595         return XFS_ERROR(ENOENT);
596 }
597
598 /*
599  * Look up a leaf entry in a node-format leaf block.
600  * If this is an addname then the extrablk in state is a freespace block,
601  * otherwise it's a data block.
602  */
603 int
604 xfs_dir2_leafn_lookup_int(
605         xfs_dabuf_t             *bp,            /* leaf buffer */
606         xfs_da_args_t           *args,          /* operation arguments */
607         int                     *indexp,        /* out: leaf entry index */
608         xfs_da_state_t          *state)         /* state to fill in */
609 {
610         if (args->op_flags & XFS_DA_OP_ADDNAME)
611                 return xfs_dir2_leafn_lookup_for_addname(bp, args, indexp,
612                                                         state);
613         return xfs_dir2_leafn_lookup_for_entry(bp, args, indexp, state);
614 }
615
616 /*
617  * Move count leaf entries from source to destination leaf.
618  * Log entries and headers.  Stale entries are preserved.
619  */
620 static void
621 xfs_dir2_leafn_moveents(
622         xfs_da_args_t   *args,                  /* operation arguments */
623         xfs_dabuf_t     *bp_s,                  /* source leaf buffer */
624         int             start_s,                /* source leaf index */
625         xfs_dabuf_t     *bp_d,                  /* destination leaf buffer */
626         int             start_d,                /* destination leaf index */
627         int             count)                  /* count of leaves to copy */
628 {
629         xfs_dir2_leaf_t *leaf_d;                /* destination leaf structure */
630         xfs_dir2_leaf_t *leaf_s;                /* source leaf structure */
631         int             stale;                  /* count stale leaves copied */
632         xfs_trans_t     *tp;                    /* transaction pointer */
633
634         trace_xfs_dir2_leafn_moveents(args, start_s, start_d, count);
635
636         /*
637          * Silently return if nothing to do.
638          */
639         if (count == 0) {
640                 return;
641         }
642         tp = args->trans;
643         leaf_s = bp_s->data;
644         leaf_d = bp_d->data;
645         /*
646          * If the destination index is not the end of the current
647          * destination leaf entries, open up a hole in the destination
648          * to hold the new entries.
649          */
650         if (start_d < be16_to_cpu(leaf_d->hdr.count)) {
651                 memmove(&leaf_d->ents[start_d + count], &leaf_d->ents[start_d],
652                         (be16_to_cpu(leaf_d->hdr.count) - start_d) *
653                         sizeof(xfs_dir2_leaf_entry_t));
654                 xfs_dir2_leaf_log_ents(tp, bp_d, start_d + count,
655                         count + be16_to_cpu(leaf_d->hdr.count) - 1);
656         }
657         /*
658          * If the source has stale leaves, count the ones in the copy range
659          * so we can update the header correctly.
660          */
661         if (leaf_s->hdr.stale) {
662                 int     i;                      /* temp leaf index */
663
664                 for (i = start_s, stale = 0; i < start_s + count; i++) {
665                         if (leaf_s->ents[i].address ==
666                             cpu_to_be32(XFS_DIR2_NULL_DATAPTR))
667                                 stale++;
668                 }
669         } else
670                 stale = 0;
671         /*
672          * Copy the leaf entries from source to destination.
673          */
674         memcpy(&leaf_d->ents[start_d], &leaf_s->ents[start_s],
675                 count * sizeof(xfs_dir2_leaf_entry_t));
676         xfs_dir2_leaf_log_ents(tp, bp_d, start_d, start_d + count - 1);
677         /*
678          * If there are source entries after the ones we copied,
679          * delete the ones we copied by sliding the next ones down.
680          */
681         if (start_s + count < be16_to_cpu(leaf_s->hdr.count)) {
682                 memmove(&leaf_s->ents[start_s], &leaf_s->ents[start_s + count],
683                         count * sizeof(xfs_dir2_leaf_entry_t));
684                 xfs_dir2_leaf_log_ents(tp, bp_s, start_s, start_s + count - 1);
685         }
686         /*
687          * Update the headers and log them.
688          */
689         be16_add_cpu(&leaf_s->hdr.count, -(count));
690         be16_add_cpu(&leaf_s->hdr.stale, -(stale));
691         be16_add_cpu(&leaf_d->hdr.count, count);
692         be16_add_cpu(&leaf_d->hdr.stale, stale);
693         xfs_dir2_leaf_log_header(tp, bp_s);
694         xfs_dir2_leaf_log_header(tp, bp_d);
695         xfs_dir2_leafn_check(args->dp, bp_s);
696         xfs_dir2_leafn_check(args->dp, bp_d);
697 }
698
699 /*
700  * Determine the sort order of two leaf blocks.
701  * Returns 1 if both are valid and leaf2 should be before leaf1, else 0.
702  */
703 int                                             /* sort order */
704 xfs_dir2_leafn_order(
705         xfs_dabuf_t     *leaf1_bp,              /* leaf1 buffer */
706         xfs_dabuf_t     *leaf2_bp)              /* leaf2 buffer */
707 {
708         xfs_dir2_leaf_t *leaf1;                 /* leaf1 structure */
709         xfs_dir2_leaf_t *leaf2;                 /* leaf2 structure */
710
711         leaf1 = leaf1_bp->data;
712         leaf2 = leaf2_bp->data;
713         ASSERT(leaf1->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC));
714         ASSERT(leaf2->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC));
715         if (be16_to_cpu(leaf1->hdr.count) > 0 &&
716             be16_to_cpu(leaf2->hdr.count) > 0 &&
717             (be32_to_cpu(leaf2->ents[0].hashval) < be32_to_cpu(leaf1->ents[0].hashval) ||
718              be32_to_cpu(leaf2->ents[be16_to_cpu(leaf2->hdr.count) - 1].hashval) <
719              be32_to_cpu(leaf1->ents[be16_to_cpu(leaf1->hdr.count) - 1].hashval)))
720                 return 1;
721         return 0;
722 }
723
724 /*
725  * Rebalance leaf entries between two leaf blocks.
726  * This is actually only called when the second block is new,
727  * though the code deals with the general case.
728  * A new entry will be inserted in one of the blocks, and that
729  * entry is taken into account when balancing.
730  */
731 static void
732 xfs_dir2_leafn_rebalance(
733         xfs_da_state_t          *state,         /* btree cursor */
734         xfs_da_state_blk_t      *blk1,          /* first btree block */
735         xfs_da_state_blk_t      *blk2)          /* second btree block */
736 {
737         xfs_da_args_t           *args;          /* operation arguments */
738         int                     count;          /* count (& direction) leaves */
739         int                     isleft;         /* new goes in left leaf */
740         xfs_dir2_leaf_t         *leaf1;         /* first leaf structure */
741         xfs_dir2_leaf_t         *leaf2;         /* second leaf structure */
742         int                     mid;            /* midpoint leaf index */
743 #ifdef DEBUG
744         int                     oldstale;       /* old count of stale leaves */
745 #endif
746         int                     oldsum;         /* old total leaf count */
747         int                     swap;           /* swapped leaf blocks */
748
749         args = state->args;
750         /*
751          * If the block order is wrong, swap the arguments.
752          */
753         if ((swap = xfs_dir2_leafn_order(blk1->bp, blk2->bp))) {
754                 xfs_da_state_blk_t      *tmp;   /* temp for block swap */
755
756                 tmp = blk1;
757                 blk1 = blk2;
758                 blk2 = tmp;
759         }
760         leaf1 = blk1->bp->data;
761         leaf2 = blk2->bp->data;
762         oldsum = be16_to_cpu(leaf1->hdr.count) + be16_to_cpu(leaf2->hdr.count);
763 #ifdef DEBUG
764         oldstale = be16_to_cpu(leaf1->hdr.stale) + be16_to_cpu(leaf2->hdr.stale);
765 #endif
766         mid = oldsum >> 1;
767         /*
768          * If the old leaf count was odd then the new one will be even,
769          * so we need to divide the new count evenly.
770          */
771         if (oldsum & 1) {
772                 xfs_dahash_t    midhash;        /* middle entry hash value */
773
774                 if (mid >= be16_to_cpu(leaf1->hdr.count))
775                         midhash = be32_to_cpu(leaf2->ents[mid - be16_to_cpu(leaf1->hdr.count)].hashval);
776                 else
777                         midhash = be32_to_cpu(leaf1->ents[mid].hashval);
778                 isleft = args->hashval <= midhash;
779         }
780         /*
781          * If the old count is even then the new count is odd, so there's
782          * no preferred side for the new entry.
783          * Pick the left one.
784          */
785         else
786                 isleft = 1;
787         /*
788          * Calculate moved entry count.  Positive means left-to-right,
789          * negative means right-to-left.  Then move the entries.
790          */
791         count = be16_to_cpu(leaf1->hdr.count) - mid + (isleft == 0);
792         if (count > 0)
793                 xfs_dir2_leafn_moveents(args, blk1->bp,
794                         be16_to_cpu(leaf1->hdr.count) - count, blk2->bp, 0, count);
795         else if (count < 0)
796                 xfs_dir2_leafn_moveents(args, blk2->bp, 0, blk1->bp,
797                         be16_to_cpu(leaf1->hdr.count), count);
798         ASSERT(be16_to_cpu(leaf1->hdr.count) + be16_to_cpu(leaf2->hdr.count) == oldsum);
799         ASSERT(be16_to_cpu(leaf1->hdr.stale) + be16_to_cpu(leaf2->hdr.stale) == oldstale);
800         /*
801          * Mark whether we're inserting into the old or new leaf.
802          */
803         if (be16_to_cpu(leaf1->hdr.count) < be16_to_cpu(leaf2->hdr.count))
804                 state->inleaf = swap;
805         else if (be16_to_cpu(leaf1->hdr.count) > be16_to_cpu(leaf2->hdr.count))
806                 state->inleaf = !swap;
807         else
808                 state->inleaf =
809                         swap ^ (blk1->index <= be16_to_cpu(leaf1->hdr.count));
810         /*
811          * Adjust the expected index for insertion.
812          */
813         if (!state->inleaf)
814                 blk2->index = blk1->index - be16_to_cpu(leaf1->hdr.count);
815
816         /*
817          * Finally sanity check just to make sure we are not returning a
818          * negative index
819          */
820         if(blk2->index < 0) {
821                 state->inleaf = 1;
822                 blk2->index = 0;
823                 xfs_alert(args->dp->i_mount,
824         "%s: picked the wrong leaf? reverting original leaf: blk1->index %d\n",
825                         __func__, blk1->index);
826         }
827 }
828
829 /*
830  * Remove an entry from a node directory.
831  * This removes the leaf entry and the data entry,
832  * and updates the free block if necessary.
833  */
834 static int                                      /* error */
835 xfs_dir2_leafn_remove(
836         xfs_da_args_t           *args,          /* operation arguments */
837         xfs_dabuf_t             *bp,            /* leaf buffer */
838         int                     index,          /* leaf entry index */
839         xfs_da_state_blk_t      *dblk,          /* data block */
840         int                     *rval)          /* resulting block needs join */
841 {
842         xfs_dir2_data_hdr_t     *hdr;           /* data block header */
843         xfs_dir2_db_t           db;             /* data block number */
844         xfs_dabuf_t             *dbp;           /* data block buffer */
845         xfs_dir2_data_entry_t   *dep;           /* data block entry */
846         xfs_inode_t             *dp;            /* incore directory inode */
847         xfs_dir2_leaf_t         *leaf;          /* leaf structure */
848         xfs_dir2_leaf_entry_t   *lep;           /* leaf entry */
849         int                     longest;        /* longest data free entry */
850         int                     off;            /* data block entry offset */
851         xfs_mount_t             *mp;            /* filesystem mount point */
852         int                     needlog;        /* need to log data header */
853         int                     needscan;       /* need to rescan data frees */
854         xfs_trans_t             *tp;            /* transaction pointer */
855
856         trace_xfs_dir2_leafn_remove(args, index);
857
858         dp = args->dp;
859         tp = args->trans;
860         mp = dp->i_mount;
861         leaf = bp->data;
862         ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC));
863         /*
864          * Point to the entry we're removing.
865          */
866         lep = &leaf->ents[index];
867         /*
868          * Extract the data block and offset from the entry.
869          */
870         db = xfs_dir2_dataptr_to_db(mp, be32_to_cpu(lep->address));
871         ASSERT(dblk->blkno == db);
872         off = xfs_dir2_dataptr_to_off(mp, be32_to_cpu(lep->address));
873         ASSERT(dblk->index == off);
874         /*
875          * Kill the leaf entry by marking it stale.
876          * Log the leaf block changes.
877          */
878         be16_add_cpu(&leaf->hdr.stale, 1);
879         xfs_dir2_leaf_log_header(tp, bp);
880         lep->address = cpu_to_be32(XFS_DIR2_NULL_DATAPTR);
881         xfs_dir2_leaf_log_ents(tp, bp, index, index);
882         /*
883          * Make the data entry free.  Keep track of the longest freespace
884          * in the data block in case it changes.
885          */
886         dbp = dblk->bp;
887         hdr = dbp->data;
888         dep = (xfs_dir2_data_entry_t *)((char *)hdr + off);
889         longest = be16_to_cpu(hdr->bestfree[0].length);
890         needlog = needscan = 0;
891         xfs_dir2_data_make_free(tp, dbp, off,
892                 xfs_dir2_data_entsize(dep->namelen), &needlog, &needscan);
893         /*
894          * Rescan the data block freespaces for bestfree.
895          * Log the data block header if needed.
896          */
897         if (needscan)
898                 xfs_dir2_data_freescan(mp, hdr, &needlog);
899         if (needlog)
900                 xfs_dir2_data_log_header(tp, dbp);
901         xfs_dir2_data_check(dp, dbp);
902         /*
903          * If the longest data block freespace changes, need to update
904          * the corresponding freeblock entry.
905          */
906         if (longest < be16_to_cpu(hdr->bestfree[0].length)) {
907                 int             error;          /* error return value */
908                 xfs_dabuf_t     *fbp;           /* freeblock buffer */
909                 xfs_dir2_db_t   fdb;            /* freeblock block number */
910                 int             findex;         /* index in freeblock entries */
911                 xfs_dir2_free_t *free;          /* freeblock structure */
912                 int             logfree;        /* need to log free entry */
913
914                 /*
915                  * Convert the data block number to a free block,
916                  * read in the free block.
917                  */
918                 fdb = xfs_dir2_db_to_fdb(mp, db);
919                 if ((error = xfs_da_read_buf(tp, dp, xfs_dir2_db_to_da(mp, fdb),
920                                 -1, &fbp, XFS_DATA_FORK))) {
921                         return error;
922                 }
923                 free = fbp->data;
924                 ASSERT(free->hdr.magic == cpu_to_be32(XFS_DIR2_FREE_MAGIC));
925                 ASSERT(be32_to_cpu(free->hdr.firstdb) ==
926                        xfs_dir2_free_max_bests(mp) *
927                        (fdb - XFS_DIR2_FREE_FIRSTDB(mp)));
928                 /*
929                  * Calculate which entry we need to fix.
930                  */
931                 findex = xfs_dir2_db_to_fdindex(mp, db);
932                 longest = be16_to_cpu(hdr->bestfree[0].length);
933                 /*
934                  * If the data block is now empty we can get rid of it
935                  * (usually).
936                  */
937                 if (longest == mp->m_dirblksize - (uint)sizeof(*hdr)) {
938                         /*
939                          * Try to punch out the data block.
940                          */
941                         error = xfs_dir2_shrink_inode(args, db, dbp);
942                         if (error == 0) {
943                                 dblk->bp = NULL;
944                                 hdr = NULL;
945                         }
946                         /*
947                          * We can get ENOSPC if there's no space reservation.
948                          * In this case just drop the buffer and some one else
949                          * will eventually get rid of the empty block.
950                          */
951                         else if (error == ENOSPC && args->total == 0)
952                                 xfs_da_buf_done(dbp);
953                         else
954                                 return error;
955                 }
956                 /*
957                  * If we got rid of the data block, we can eliminate that entry
958                  * in the free block.
959                  */
960                 if (hdr == NULL) {
961                         /*
962                          * One less used entry in the free table.
963                          */
964                         be32_add_cpu(&free->hdr.nused, -1);
965                         xfs_dir2_free_log_header(tp, fbp);
966                         /*
967                          * If this was the last entry in the table, we can
968                          * trim the table size back.  There might be other
969                          * entries at the end referring to non-existent
970                          * data blocks, get those too.
971                          */
972                         if (findex == be32_to_cpu(free->hdr.nvalid) - 1) {
973                                 int     i;              /* free entry index */
974
975                                 for (i = findex - 1;
976                                      i >= 0 &&
977                                      free->bests[i] == cpu_to_be16(NULLDATAOFF);
978                                      i--)
979                                         continue;
980                                 free->hdr.nvalid = cpu_to_be32(i + 1);
981                                 logfree = 0;
982                         }
983                         /*
984                          * Not the last entry, just punch it out.
985                          */
986                         else {
987                                 free->bests[findex] = cpu_to_be16(NULLDATAOFF);
988                                 logfree = 1;
989                         }
990                         /*
991                          * If there are no useful entries left in the block,
992                          * get rid of the block if we can.
993                          */
994                         if (!free->hdr.nused) {
995                                 error = xfs_dir2_shrink_inode(args, fdb, fbp);
996                                 if (error == 0) {
997                                         fbp = NULL;
998                                         logfree = 0;
999                                 } else if (error != ENOSPC || args->total != 0)
1000                                         return error;
1001                                 /*
1002                                  * It's possible to get ENOSPC if there is no
1003                                  * space reservation.  In this case some one
1004                                  * else will eventually get rid of this block.
1005                                  */
1006                         }
1007                 }
1008                 /*
1009                  * Data block is not empty, just set the free entry to
1010                  * the new value.
1011                  */
1012                 else {
1013                         free->bests[findex] = cpu_to_be16(longest);
1014                         logfree = 1;
1015                 }
1016                 /*
1017                  * Log the free entry that changed, unless we got rid of it.
1018                  */
1019                 if (logfree)
1020                         xfs_dir2_free_log_bests(tp, fbp, findex, findex);
1021                 /*
1022                  * Drop the buffer if we still have it.
1023                  */
1024                 if (fbp)
1025                         xfs_da_buf_done(fbp);
1026         }
1027         xfs_dir2_leafn_check(dp, bp);
1028         /*
1029          * Return indication of whether this leaf block is empty enough
1030          * to justify trying to join it with a neighbor.
1031          */
1032         *rval =
1033                 ((uint)sizeof(leaf->hdr) +
1034                  (uint)sizeof(leaf->ents[0]) *
1035                  (be16_to_cpu(leaf->hdr.count) - be16_to_cpu(leaf->hdr.stale))) <
1036                 mp->m_dir_magicpct;
1037         return 0;
1038 }
1039
1040 /*
1041  * Split the leaf entries in the old block into old and new blocks.
1042  */
1043 int                                             /* error */
1044 xfs_dir2_leafn_split(
1045         xfs_da_state_t          *state,         /* btree cursor */
1046         xfs_da_state_blk_t      *oldblk,        /* original block */
1047         xfs_da_state_blk_t      *newblk)        /* newly created block */
1048 {
1049         xfs_da_args_t           *args;          /* operation arguments */
1050         xfs_dablk_t             blkno;          /* new leaf block number */
1051         int                     error;          /* error return value */
1052         xfs_mount_t             *mp;            /* filesystem mount point */
1053
1054         /*
1055          * Allocate space for a new leaf node.
1056          */
1057         args = state->args;
1058         mp = args->dp->i_mount;
1059         ASSERT(args != NULL);
1060         ASSERT(oldblk->magic == XFS_DIR2_LEAFN_MAGIC);
1061         error = xfs_da_grow_inode(args, &blkno);
1062         if (error) {
1063                 return error;
1064         }
1065         /*
1066          * Initialize the new leaf block.
1067          */
1068         error = xfs_dir2_leaf_init(args, xfs_dir2_da_to_db(mp, blkno),
1069                 &newblk->bp, XFS_DIR2_LEAFN_MAGIC);
1070         if (error) {
1071                 return error;
1072         }
1073         newblk->blkno = blkno;
1074         newblk->magic = XFS_DIR2_LEAFN_MAGIC;
1075         /*
1076          * Rebalance the entries across the two leaves, link the new
1077          * block into the leaves.
1078          */
1079         xfs_dir2_leafn_rebalance(state, oldblk, newblk);
1080         error = xfs_da_blk_link(state, oldblk, newblk);
1081         if (error) {
1082                 return error;
1083         }
1084         /*
1085          * Insert the new entry in the correct block.
1086          */
1087         if (state->inleaf)
1088                 error = xfs_dir2_leafn_add(oldblk->bp, args, oldblk->index);
1089         else
1090                 error = xfs_dir2_leafn_add(newblk->bp, args, newblk->index);
1091         /*
1092          * Update last hashval in each block since we added the name.
1093          */
1094         oldblk->hashval = xfs_dir2_leafn_lasthash(oldblk->bp, NULL);
1095         newblk->hashval = xfs_dir2_leafn_lasthash(newblk->bp, NULL);
1096         xfs_dir2_leafn_check(args->dp, oldblk->bp);
1097         xfs_dir2_leafn_check(args->dp, newblk->bp);
1098         return error;
1099 }
1100
1101 /*
1102  * Check a leaf block and its neighbors to see if the block should be
1103  * collapsed into one or the other neighbor.  Always keep the block
1104  * with the smaller block number.
1105  * If the current block is over 50% full, don't try to join it, return 0.
1106  * If the block is empty, fill in the state structure and return 2.
1107  * If it can be collapsed, fill in the state structure and return 1.
1108  * If nothing can be done, return 0.
1109  */
1110 int                                             /* error */
1111 xfs_dir2_leafn_toosmall(
1112         xfs_da_state_t          *state,         /* btree cursor */
1113         int                     *action)        /* resulting action to take */
1114 {
1115         xfs_da_state_blk_t      *blk;           /* leaf block */
1116         xfs_dablk_t             blkno;          /* leaf block number */
1117         xfs_dabuf_t             *bp;            /* leaf buffer */
1118         int                     bytes;          /* bytes in use */
1119         int                     count;          /* leaf live entry count */
1120         int                     error;          /* error return value */
1121         int                     forward;        /* sibling block direction */
1122         int                     i;              /* sibling counter */
1123         xfs_da_blkinfo_t        *info;          /* leaf block header */
1124         xfs_dir2_leaf_t         *leaf;          /* leaf structure */
1125         int                     rval;           /* result from path_shift */
1126
1127         /*
1128          * Check for the degenerate case of the block being over 50% full.
1129          * If so, it's not worth even looking to see if we might be able
1130          * to coalesce with a sibling.
1131          */
1132         blk = &state->path.blk[state->path.active - 1];
1133         info = blk->bp->data;
1134         ASSERT(info->magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC));
1135         leaf = (xfs_dir2_leaf_t *)info;
1136         count = be16_to_cpu(leaf->hdr.count) - be16_to_cpu(leaf->hdr.stale);
1137         bytes = (uint)sizeof(leaf->hdr) + count * (uint)sizeof(leaf->ents[0]);
1138         if (bytes > (state->blocksize >> 1)) {
1139                 /*
1140                  * Blk over 50%, don't try to join.
1141                  */
1142                 *action = 0;
1143                 return 0;
1144         }
1145         /*
1146          * Check for the degenerate case of the block being empty.
1147          * If the block is empty, we'll simply delete it, no need to
1148          * coalesce it with a sibling block.  We choose (arbitrarily)
1149          * to merge with the forward block unless it is NULL.
1150          */
1151         if (count == 0) {
1152                 /*
1153                  * Make altpath point to the block we want to keep and
1154                  * path point to the block we want to drop (this one).
1155                  */
1156                 forward = (info->forw != 0);
1157                 memcpy(&state->altpath, &state->path, sizeof(state->path));
1158                 error = xfs_da_path_shift(state, &state->altpath, forward, 0,
1159                         &rval);
1160                 if (error)
1161                         return error;
1162                 *action = rval ? 2 : 0;
1163                 return 0;
1164         }
1165         /*
1166          * Examine each sibling block to see if we can coalesce with
1167          * at least 25% free space to spare.  We need to figure out
1168          * whether to merge with the forward or the backward block.
1169          * We prefer coalescing with the lower numbered sibling so as
1170          * to shrink a directory over time.
1171          */
1172         forward = be32_to_cpu(info->forw) < be32_to_cpu(info->back);
1173         for (i = 0, bp = NULL; i < 2; forward = !forward, i++) {
1174                 blkno = forward ? be32_to_cpu(info->forw) : be32_to_cpu(info->back);
1175                 if (blkno == 0)
1176                         continue;
1177                 /*
1178                  * Read the sibling leaf block.
1179                  */
1180                 if ((error =
1181                     xfs_da_read_buf(state->args->trans, state->args->dp, blkno,
1182                             -1, &bp, XFS_DATA_FORK))) {
1183                         return error;
1184                 }
1185                 ASSERT(bp != NULL);
1186                 /*
1187                  * Count bytes in the two blocks combined.
1188                  */
1189                 leaf = (xfs_dir2_leaf_t *)info;
1190                 count = be16_to_cpu(leaf->hdr.count) - be16_to_cpu(leaf->hdr.stale);
1191                 bytes = state->blocksize - (state->blocksize >> 2);
1192                 leaf = bp->data;
1193                 ASSERT(leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC));
1194                 count += be16_to_cpu(leaf->hdr.count) - be16_to_cpu(leaf->hdr.stale);
1195                 bytes -= count * (uint)sizeof(leaf->ents[0]);
1196                 /*
1197                  * Fits with at least 25% to spare.
1198                  */
1199                 if (bytes >= 0)
1200                         break;
1201                 xfs_da_brelse(state->args->trans, bp);
1202         }
1203         /*
1204          * Didn't like either block, give up.
1205          */
1206         if (i >= 2) {
1207                 *action = 0;
1208                 return 0;
1209         }
1210         /*
1211          * Done with the sibling leaf block here, drop the dabuf
1212          * so path_shift can get it.
1213          */
1214         xfs_da_buf_done(bp);
1215         /*
1216          * Make altpath point to the block we want to keep (the lower
1217          * numbered block) and path point to the block we want to drop.
1218          */
1219         memcpy(&state->altpath, &state->path, sizeof(state->path));
1220         if (blkno < blk->blkno)
1221                 error = xfs_da_path_shift(state, &state->altpath, forward, 0,
1222                         &rval);
1223         else
1224                 error = xfs_da_path_shift(state, &state->path, forward, 0,
1225                         &rval);
1226         if (error) {
1227                 return error;
1228         }
1229         *action = rval ? 0 : 1;
1230         return 0;
1231 }
1232
1233 /*
1234  * Move all the leaf entries from drop_blk to save_blk.
1235  * This is done as part of a join operation.
1236  */
1237 void
1238 xfs_dir2_leafn_unbalance(
1239         xfs_da_state_t          *state,         /* cursor */
1240         xfs_da_state_blk_t      *drop_blk,      /* dead block */
1241         xfs_da_state_blk_t      *save_blk)      /* surviving block */
1242 {
1243         xfs_da_args_t           *args;          /* operation arguments */
1244         xfs_dir2_leaf_t         *drop_leaf;     /* dead leaf structure */
1245         xfs_dir2_leaf_t         *save_leaf;     /* surviving leaf structure */
1246
1247         args = state->args;
1248         ASSERT(drop_blk->magic == XFS_DIR2_LEAFN_MAGIC);
1249         ASSERT(save_blk->magic == XFS_DIR2_LEAFN_MAGIC);
1250         drop_leaf = drop_blk->bp->data;
1251         save_leaf = save_blk->bp->data;
1252         ASSERT(drop_leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC));
1253         ASSERT(save_leaf->hdr.info.magic == cpu_to_be16(XFS_DIR2_LEAFN_MAGIC));
1254         /*
1255          * If there are any stale leaf entries, take this opportunity
1256          * to purge them.
1257          */
1258         if (drop_leaf->hdr.stale)
1259                 xfs_dir2_leaf_compact(args, drop_blk->bp);
1260         if (save_leaf->hdr.stale)
1261                 xfs_dir2_leaf_compact(args, save_blk->bp);
1262         /*
1263          * Move the entries from drop to the appropriate end of save.
1264          */
1265         drop_blk->hashval = be32_to_cpu(drop_leaf->ents[be16_to_cpu(drop_leaf->hdr.count) - 1].hashval);
1266         if (xfs_dir2_leafn_order(save_blk->bp, drop_blk->bp))
1267                 xfs_dir2_leafn_moveents(args, drop_blk->bp, 0, save_blk->bp, 0,
1268                         be16_to_cpu(drop_leaf->hdr.count));
1269         else
1270                 xfs_dir2_leafn_moveents(args, drop_blk->bp, 0, save_blk->bp,
1271                         be16_to_cpu(save_leaf->hdr.count), be16_to_cpu(drop_leaf->hdr.count));
1272         save_blk->hashval = be32_to_cpu(save_leaf->ents[be16_to_cpu(save_leaf->hdr.count) - 1].hashval);
1273         xfs_dir2_leafn_check(args->dp, save_blk->bp);
1274 }
1275
1276 /*
1277  * Top-level node form directory addname routine.
1278  */
1279 int                                             /* error */
1280 xfs_dir2_node_addname(
1281         xfs_da_args_t           *args)          /* operation arguments */
1282 {
1283         xfs_da_state_blk_t      *blk;           /* leaf block for insert */
1284         int                     error;          /* error return value */
1285         int                     rval;           /* sub-return value */
1286         xfs_da_state_t          *state;         /* btree cursor */
1287
1288         trace_xfs_dir2_node_addname(args);
1289
1290         /*
1291          * Allocate and initialize the state (btree cursor).
1292          */
1293         state = xfs_da_state_alloc();
1294         state->args = args;
1295         state->mp = args->dp->i_mount;
1296         state->blocksize = state->mp->m_dirblksize;
1297         state->node_ents = state->mp->m_dir_node_ents;
1298         /*
1299          * Look up the name.  We're not supposed to find it, but
1300          * this gives us the insertion point.
1301          */
1302         error = xfs_da_node_lookup_int(state, &rval);
1303         if (error)
1304                 rval = error;
1305         if (rval != ENOENT) {
1306                 goto done;
1307         }
1308         /*
1309          * Add the data entry to a data block.
1310          * Extravalid is set to a freeblock found by lookup.
1311          */
1312         rval = xfs_dir2_node_addname_int(args,
1313                 state->extravalid ? &state->extrablk : NULL);
1314         if (rval) {
1315                 goto done;
1316         }
1317         blk = &state->path.blk[state->path.active - 1];
1318         ASSERT(blk->magic == XFS_DIR2_LEAFN_MAGIC);
1319         /*
1320          * Add the new leaf entry.
1321          */
1322         rval = xfs_dir2_leafn_add(blk->bp, args, blk->index);
1323         if (rval == 0) {
1324                 /*
1325                  * It worked, fix the hash values up the btree.
1326                  */
1327                 if (!(args->op_flags & XFS_DA_OP_JUSTCHECK))
1328                         xfs_da_fixhashpath(state, &state->path);
1329         } else {
1330                 /*
1331                  * It didn't work, we need to split the leaf block.
1332                  */
1333                 if (args->total == 0) {
1334                         ASSERT(rval == ENOSPC);
1335                         goto done;
1336                 }
1337                 /*
1338                  * Split the leaf block and insert the new entry.
1339                  */
1340                 rval = xfs_da_split(state);
1341         }
1342 done:
1343         xfs_da_state_free(state);
1344         return rval;
1345 }
1346
1347 /*
1348  * Add the data entry for a node-format directory name addition.
1349  * The leaf entry is added in xfs_dir2_leafn_add.
1350  * We may enter with a freespace block that the lookup found.
1351  */
1352 static int                                      /* error */
1353 xfs_dir2_node_addname_int(
1354         xfs_da_args_t           *args,          /* operation arguments */
1355         xfs_da_state_blk_t      *fblk)          /* optional freespace block */
1356 {
1357         xfs_dir2_data_hdr_t     *hdr;           /* data block header */
1358         xfs_dir2_db_t           dbno;           /* data block number */
1359         xfs_dabuf_t             *dbp;           /* data block buffer */
1360         xfs_dir2_data_entry_t   *dep;           /* data entry pointer */
1361         xfs_inode_t             *dp;            /* incore directory inode */
1362         xfs_dir2_data_unused_t  *dup;           /* data unused entry pointer */
1363         int                     error;          /* error return value */
1364         xfs_dir2_db_t           fbno;           /* freespace block number */
1365         xfs_dabuf_t             *fbp;           /* freespace buffer */
1366         int                     findex;         /* freespace entry index */
1367         xfs_dir2_free_t         *free=NULL;     /* freespace block structure */
1368         xfs_dir2_db_t           ifbno;          /* initial freespace block no */
1369         xfs_dir2_db_t           lastfbno=0;     /* highest freespace block no */
1370         int                     length;         /* length of the new entry */
1371         int                     logfree;        /* need to log free entry */
1372         xfs_mount_t             *mp;            /* filesystem mount point */
1373         int                     needlog;        /* need to log data header */
1374         int                     needscan;       /* need to rescan data frees */
1375         __be16                  *tagp;          /* data entry tag pointer */
1376         xfs_trans_t             *tp;            /* transaction pointer */
1377
1378         dp = args->dp;
1379         mp = dp->i_mount;
1380         tp = args->trans;
1381         length = xfs_dir2_data_entsize(args->namelen);
1382         /*
1383          * If we came in with a freespace block that means that lookup
1384          * found an entry with our hash value.  This is the freespace
1385          * block for that data entry.
1386          */
1387         if (fblk) {
1388                 fbp = fblk->bp;
1389                 /*
1390                  * Remember initial freespace block number.
1391                  */
1392                 ifbno = fblk->blkno;
1393                 free = fbp->data;
1394                 ASSERT(free->hdr.magic == cpu_to_be32(XFS_DIR2_FREE_MAGIC));
1395                 findex = fblk->index;
1396                 /*
1397                  * This means the free entry showed that the data block had
1398                  * space for our entry, so we remembered it.
1399                  * Use that data block.
1400                  */
1401                 if (findex >= 0) {
1402                         ASSERT(findex < be32_to_cpu(free->hdr.nvalid));
1403                         ASSERT(be16_to_cpu(free->bests[findex]) != NULLDATAOFF);
1404                         ASSERT(be16_to_cpu(free->bests[findex]) >= length);
1405                         dbno = be32_to_cpu(free->hdr.firstdb) + findex;
1406                 }
1407                 /*
1408                  * The data block looked at didn't have enough room.
1409                  * We'll start at the beginning of the freespace entries.
1410                  */
1411                 else {
1412                         dbno = -1;
1413                         findex = 0;
1414                 }
1415         }
1416         /*
1417          * Didn't come in with a freespace block, so don't have a data block.
1418          */
1419         else {
1420                 ifbno = dbno = -1;
1421                 fbp = NULL;
1422                 findex = 0;
1423         }
1424         /*
1425          * If we don't have a data block yet, we're going to scan the
1426          * freespace blocks looking for one.  Figure out what the
1427          * highest freespace block number is.
1428          */
1429         if (dbno == -1) {
1430                 xfs_fileoff_t   fo;             /* freespace block number */
1431
1432                 if ((error = xfs_bmap_last_offset(tp, dp, &fo, XFS_DATA_FORK)))
1433                         return error;
1434                 lastfbno = xfs_dir2_da_to_db(mp, (xfs_dablk_t)fo);
1435                 fbno = ifbno;
1436         }
1437         /*
1438          * While we haven't identified a data block, search the freeblock
1439          * data for a good data block.  If we find a null freeblock entry,
1440          * indicating a hole in the data blocks, remember that.
1441          */
1442         while (dbno == -1) {
1443                 /*
1444                  * If we don't have a freeblock in hand, get the next one.
1445                  */
1446                 if (fbp == NULL) {
1447                         /*
1448                          * Happens the first time through unless lookup gave
1449                          * us a freespace block to start with.
1450                          */
1451                         if (++fbno == 0)
1452                                 fbno = XFS_DIR2_FREE_FIRSTDB(mp);
1453                         /*
1454                          * If it's ifbno we already looked at it.
1455                          */
1456                         if (fbno == ifbno)
1457                                 fbno++;
1458                         /*
1459                          * If it's off the end we're done.
1460                          */
1461                         if (fbno >= lastfbno)
1462                                 break;
1463                         /*
1464                          * Read the block.  There can be holes in the
1465                          * freespace blocks, so this might not succeed.
1466                          * This should be really rare, so there's no reason
1467                          * to avoid it.
1468                          */
1469                         if ((error = xfs_da_read_buf(tp, dp,
1470                                         xfs_dir2_db_to_da(mp, fbno), -2, &fbp,
1471                                         XFS_DATA_FORK))) {
1472                                 return error;
1473                         }
1474                         if (unlikely(fbp == NULL)) {
1475                                 continue;
1476                         }
1477                         free = fbp->data;
1478                         ASSERT(free->hdr.magic == cpu_to_be32(XFS_DIR2_FREE_MAGIC));
1479                         findex = 0;
1480                 }
1481                 /*
1482                  * Look at the current free entry.  Is it good enough?
1483                  */
1484                 if (be16_to_cpu(free->bests[findex]) != NULLDATAOFF &&
1485                     be16_to_cpu(free->bests[findex]) >= length)
1486                         dbno = be32_to_cpu(free->hdr.firstdb) + findex;
1487                 else {
1488                         /*
1489                          * Are we done with the freeblock?
1490                          */
1491                         if (++findex == be32_to_cpu(free->hdr.nvalid)) {
1492                                 /*
1493                                  * Drop the block.
1494                                  */
1495                                 xfs_da_brelse(tp, fbp);
1496                                 fbp = NULL;
1497                                 if (fblk && fblk->bp)
1498                                         fblk->bp = NULL;
1499                         }
1500                 }
1501         }
1502         /*
1503          * If we don't have a data block, we need to allocate one and make
1504          * the freespace entries refer to it.
1505          */
1506         if (unlikely(dbno == -1)) {
1507                 /*
1508                  * Not allowed to allocate, return failure.
1509                  */
1510                 if ((args->op_flags & XFS_DA_OP_JUSTCHECK) ||
1511                                                         args->total == 0) {
1512                         /*
1513                          * Drop the freespace buffer unless it came from our
1514                          * caller.
1515                          */
1516                         if ((fblk == NULL || fblk->bp == NULL) && fbp != NULL)
1517                                 xfs_da_buf_done(fbp);
1518                         return XFS_ERROR(ENOSPC);
1519                 }
1520                 /*
1521                  * Allocate and initialize the new data block.
1522                  */
1523                 if (unlikely((error = xfs_dir2_grow_inode(args,
1524                                                          XFS_DIR2_DATA_SPACE,
1525                                                          &dbno)) ||
1526                     (error = xfs_dir2_data_init(args, dbno, &dbp)))) {
1527                         /*
1528                          * Drop the freespace buffer unless it came from our
1529                          * caller.
1530                          */
1531                         if ((fblk == NULL || fblk->bp == NULL) && fbp != NULL)
1532                                 xfs_da_buf_done(fbp);
1533                         return error;
1534                 }
1535                 /*
1536                  * If (somehow) we have a freespace block, get rid of it.
1537                  */
1538                 if (fbp)
1539                         xfs_da_brelse(tp, fbp);
1540                 if (fblk && fblk->bp)
1541                         fblk->bp = NULL;
1542
1543                 /*
1544                  * Get the freespace block corresponding to the data block
1545                  * that was just allocated.
1546                  */
1547                 fbno = xfs_dir2_db_to_fdb(mp, dbno);
1548                 if (unlikely(error = xfs_da_read_buf(tp, dp,
1549                                 xfs_dir2_db_to_da(mp, fbno), -2, &fbp,
1550                                 XFS_DATA_FORK))) {
1551                         xfs_da_buf_done(dbp);
1552                         return error;
1553                 }
1554                 /*
1555                  * If there wasn't a freespace block, the read will
1556                  * return a NULL fbp.  Allocate and initialize a new one.
1557                  */
1558                 if( fbp == NULL ) {
1559                         if ((error = xfs_dir2_grow_inode(args, XFS_DIR2_FREE_SPACE,
1560                                                         &fbno))) {
1561                                 return error;
1562                         }
1563
1564                         if (unlikely(xfs_dir2_db_to_fdb(mp, dbno) != fbno)) {
1565                                 xfs_alert(mp,
1566                         "%s: dir ino %llu needed freesp block %lld for\n"
1567                         "  data block %lld, got %lld ifbno %llu lastfbno %d",
1568                                         __func__, (unsigned long long)dp->i_ino,
1569                                         (long long)xfs_dir2_db_to_fdb(mp, dbno),
1570                                         (long long)dbno, (long long)fbno,
1571                                         (unsigned long long)ifbno, lastfbno);
1572                                 if (fblk) {
1573                                         xfs_alert(mp,
1574                                 " fblk 0x%p blkno %llu index %d magic 0x%x",
1575                                                 fblk,
1576                                                 (unsigned long long)fblk->blkno,
1577                                                 fblk->index,
1578                                                 fblk->magic);
1579                                 } else {
1580                                         xfs_alert(mp, " ... fblk is NULL");
1581                                 }
1582                                 XFS_ERROR_REPORT("xfs_dir2_node_addname_int",
1583                                                  XFS_ERRLEVEL_LOW, mp);
1584                                 return XFS_ERROR(EFSCORRUPTED);
1585                         }
1586
1587                         /*
1588                          * Get a buffer for the new block.
1589                          */
1590                         if ((error = xfs_da_get_buf(tp, dp,
1591                                                    xfs_dir2_db_to_da(mp, fbno),
1592                                                    -1, &fbp, XFS_DATA_FORK))) {
1593                                 return error;
1594                         }
1595                         ASSERT(fbp != NULL);
1596
1597                         /*
1598                          * Initialize the new block to be empty, and remember
1599                          * its first slot as our empty slot.
1600                          */
1601                         free = fbp->data;
1602                         free->hdr.magic = cpu_to_be32(XFS_DIR2_FREE_MAGIC);
1603                         free->hdr.firstdb = cpu_to_be32(
1604                                 (fbno - XFS_DIR2_FREE_FIRSTDB(mp)) *
1605                                 xfs_dir2_free_max_bests(mp));
1606                         free->hdr.nvalid = 0;
1607                         free->hdr.nused = 0;
1608                 } else {
1609                         free = fbp->data;
1610                         ASSERT(free->hdr.magic == cpu_to_be32(XFS_DIR2_FREE_MAGIC));
1611                 }
1612
1613                 /*
1614                  * Set the freespace block index from the data block number.
1615                  */
1616                 findex = xfs_dir2_db_to_fdindex(mp, dbno);
1617                 /*
1618                  * If it's after the end of the current entries in the
1619                  * freespace block, extend that table.
1620                  */
1621                 if (findex >= be32_to_cpu(free->hdr.nvalid)) {
1622                         ASSERT(findex < xfs_dir2_free_max_bests(mp));
1623                         free->hdr.nvalid = cpu_to_be32(findex + 1);
1624                         /*
1625                          * Tag new entry so nused will go up.
1626                          */
1627                         free->bests[findex] = cpu_to_be16(NULLDATAOFF);
1628                 }
1629                 /*
1630                  * If this entry was for an empty data block
1631                  * (this should always be true) then update the header.
1632                  */
1633                 if (free->bests[findex] == cpu_to_be16(NULLDATAOFF)) {
1634                         be32_add_cpu(&free->hdr.nused, 1);
1635                         xfs_dir2_free_log_header(tp, fbp);
1636                 }
1637                 /*
1638                  * Update the real value in the table.
1639                  * We haven't allocated the data entry yet so this will
1640                  * change again.
1641                  */
1642                 hdr = dbp->data;
1643                 free->bests[findex] = hdr->bestfree[0].length;
1644                 logfree = 1;
1645         }
1646         /*
1647          * We had a data block so we don't have to make a new one.
1648          */
1649         else {
1650                 /*
1651                  * If just checking, we succeeded.
1652                  */
1653                 if (args->op_flags & XFS_DA_OP_JUSTCHECK) {
1654                         if ((fblk == NULL || fblk->bp == NULL) && fbp != NULL)
1655                                 xfs_da_buf_done(fbp);
1656                         return 0;
1657                 }
1658                 /*
1659                  * Read the data block in.
1660                  */
1661                 if (unlikely(
1662                     error = xfs_da_read_buf(tp, dp, xfs_dir2_db_to_da(mp, dbno),
1663                                 -1, &dbp, XFS_DATA_FORK))) {
1664                         if ((fblk == NULL || fblk->bp == NULL) && fbp != NULL)
1665                                 xfs_da_buf_done(fbp);
1666                         return error;
1667                 }
1668                 hdr = dbp->data;
1669                 logfree = 0;
1670         }
1671         ASSERT(be16_to_cpu(hdr->bestfree[0].length) >= length);
1672         /*
1673          * Point to the existing unused space.
1674          */
1675         dup = (xfs_dir2_data_unused_t *)
1676               ((char *)hdr + be16_to_cpu(hdr->bestfree[0].offset));
1677         needscan = needlog = 0;
1678         /*
1679          * Mark the first part of the unused space, inuse for us.
1680          */
1681         xfs_dir2_data_use_free(tp, dbp, dup,
1682                 (xfs_dir2_data_aoff_t)((char *)dup - (char *)hdr), length,
1683                 &needlog, &needscan);
1684         /*
1685          * Fill in the new entry and log it.
1686          */
1687         dep = (xfs_dir2_data_entry_t *)dup;
1688         dep->inumber = cpu_to_be64(args->inumber);
1689         dep->namelen = args->namelen;
1690         memcpy(dep->name, args->name, dep->namelen);
1691         tagp = xfs_dir2_data_entry_tag_p(dep);
1692         *tagp = cpu_to_be16((char *)dep - (char *)hdr);
1693         xfs_dir2_data_log_entry(tp, dbp, dep);
1694         /*
1695          * Rescan the block for bestfree if needed.
1696          */
1697         if (needscan)
1698                 xfs_dir2_data_freescan(mp, hdr, &needlog);
1699         /*
1700          * Log the data block header if needed.
1701          */
1702         if (needlog)
1703                 xfs_dir2_data_log_header(tp, dbp);
1704         /*
1705          * If the freespace entry is now wrong, update it.
1706          */
1707         if (be16_to_cpu(free->bests[findex]) != be16_to_cpu(hdr->bestfree[0].length)) {
1708                 free->bests[findex] = hdr->bestfree[0].length;
1709                 logfree = 1;
1710         }
1711         /*
1712          * Log the freespace entry if needed.
1713          */
1714         if (logfree)
1715                 xfs_dir2_free_log_bests(tp, fbp, findex, findex);
1716         /*
1717          * If the caller didn't hand us the freespace block, drop it.
1718          */
1719         if ((fblk == NULL || fblk->bp == NULL) && fbp != NULL)
1720                 xfs_da_buf_done(fbp);
1721         /*
1722          * Return the data block and offset in args, then drop the data block.
1723          */
1724         args->blkno = (xfs_dablk_t)dbno;
1725         args->index = be16_to_cpu(*tagp);
1726         xfs_da_buf_done(dbp);
1727         return 0;
1728 }
1729
1730 /*
1731  * Lookup an entry in a node-format directory.
1732  * All the real work happens in xfs_da_node_lookup_int.
1733  * The only real output is the inode number of the entry.
1734  */
1735 int                                             /* error */
1736 xfs_dir2_node_lookup(
1737         xfs_da_args_t   *args)                  /* operation arguments */
1738 {
1739         int             error;                  /* error return value */
1740         int             i;                      /* btree level */
1741         int             rval;                   /* operation return value */
1742         xfs_da_state_t  *state;                 /* btree cursor */
1743
1744         trace_xfs_dir2_node_lookup(args);
1745
1746         /*
1747          * Allocate and initialize the btree cursor.
1748          */
1749         state = xfs_da_state_alloc();
1750         state->args = args;
1751         state->mp = args->dp->i_mount;
1752         state->blocksize = state->mp->m_dirblksize;
1753         state->node_ents = state->mp->m_dir_node_ents;
1754         /*
1755          * Fill in the path to the entry in the cursor.
1756          */
1757         error = xfs_da_node_lookup_int(state, &rval);
1758         if (error)
1759                 rval = error;
1760         else if (rval == ENOENT && args->cmpresult == XFS_CMP_CASE) {
1761                 /* If a CI match, dup the actual name and return EEXIST */
1762                 xfs_dir2_data_entry_t   *dep;
1763
1764                 dep = (xfs_dir2_data_entry_t *)((char *)state->extrablk.bp->
1765                                                 data + state->extrablk.index);
1766                 rval = xfs_dir_cilookup_result(args, dep->name, dep->namelen);
1767         }
1768         /*
1769          * Release the btree blocks and leaf block.
1770          */
1771         for (i = 0; i < state->path.active; i++) {
1772                 xfs_da_brelse(args->trans, state->path.blk[i].bp);
1773                 state->path.blk[i].bp = NULL;
1774         }
1775         /*
1776          * Release the data block if we have it.
1777          */
1778         if (state->extravalid && state->extrablk.bp) {
1779                 xfs_da_brelse(args->trans, state->extrablk.bp);
1780                 state->extrablk.bp = NULL;
1781         }
1782         xfs_da_state_free(state);
1783         return rval;
1784 }
1785
1786 /*
1787  * Remove an entry from a node-format directory.
1788  */
1789 int                                             /* error */
1790 xfs_dir2_node_removename(
1791         xfs_da_args_t           *args)          /* operation arguments */
1792 {
1793         xfs_da_state_blk_t      *blk;           /* leaf block */
1794         int                     error;          /* error return value */
1795         int                     rval;           /* operation return value */
1796         xfs_da_state_t          *state;         /* btree cursor */
1797
1798         trace_xfs_dir2_node_removename(args);
1799
1800         /*
1801          * Allocate and initialize the btree cursor.
1802          */
1803         state = xfs_da_state_alloc();
1804         state->args = args;
1805         state->mp = args->dp->i_mount;
1806         state->blocksize = state->mp->m_dirblksize;
1807         state->node_ents = state->mp->m_dir_node_ents;
1808         /*
1809          * Look up the entry we're deleting, set up the cursor.
1810          */
1811         error = xfs_da_node_lookup_int(state, &rval);
1812         if (error)
1813                 rval = error;
1814         /*
1815          * Didn't find it, upper layer screwed up.
1816          */
1817         if (rval != EEXIST) {
1818                 xfs_da_state_free(state);
1819                 return rval;
1820         }
1821         blk = &state->path.blk[state->path.active - 1];
1822         ASSERT(blk->magic == XFS_DIR2_LEAFN_MAGIC);
1823         ASSERT(state->extravalid);
1824         /*
1825          * Remove the leaf and data entries.
1826          * Extrablk refers to the data block.
1827          */
1828         error = xfs_dir2_leafn_remove(args, blk->bp, blk->index,
1829                 &state->extrablk, &rval);
1830         if (error)
1831                 return error;
1832         /*
1833          * Fix the hash values up the btree.
1834          */
1835         xfs_da_fixhashpath(state, &state->path);
1836         /*
1837          * If we need to join leaf blocks, do it.
1838          */
1839         if (rval && state->path.active > 1)
1840                 error = xfs_da_join(state);
1841         /*
1842          * If no errors so far, try conversion to leaf format.
1843          */
1844         if (!error)
1845                 error = xfs_dir2_node_to_leaf(state);
1846         xfs_da_state_free(state);
1847         return error;
1848 }
1849
1850 /*
1851  * Replace an entry's inode number in a node-format directory.
1852  */
1853 int                                             /* error */
1854 xfs_dir2_node_replace(
1855         xfs_da_args_t           *args)          /* operation arguments */
1856 {
1857         xfs_da_state_blk_t      *blk;           /* leaf block */
1858         xfs_dir2_data_hdr_t     *hdr;           /* data block header */
1859         xfs_dir2_data_entry_t   *dep;           /* data entry changed */
1860         int                     error;          /* error return value */
1861         int                     i;              /* btree level */
1862         xfs_ino_t               inum;           /* new inode number */
1863         xfs_dir2_leaf_t         *leaf;          /* leaf structure */
1864         xfs_dir2_leaf_entry_t   *lep;           /* leaf entry being changed */
1865         int                     rval;           /* internal return value */
1866         xfs_da_state_t          *state;         /* btree cursor */
1867
1868         trace_xfs_dir2_node_replace(args);
1869
1870         /*
1871          * Allocate and initialize the btree cursor.
1872          */
1873         state = xfs_da_state_alloc();
1874         state->args = args;
1875         state->mp = args->dp->i_mount;
1876         state->blocksize = state->mp->m_dirblksize;
1877         state->node_ents = state->mp->m_dir_node_ents;
1878         inum = args->inumber;
1879         /*
1880          * Lookup the entry to change in the btree.
1881          */
1882         error = xfs_da_node_lookup_int(state, &rval);
1883         if (error) {
1884                 rval = error;
1885         }
1886         /*
1887          * It should be found, since the vnodeops layer has looked it up
1888          * and locked it.  But paranoia is good.
1889          */
1890         if (rval == EEXIST) {
1891                 /*
1892                  * Find the leaf entry.
1893                  */
1894                 blk = &state->path.blk[state->path.active - 1];
1895                 ASSERT(blk->magic == XFS_DIR2_LEAFN_MAGIC);
1896                 leaf = blk->bp->data;
1897                 lep = &leaf->ents[blk->index];
1898                 ASSERT(state->extravalid);
1899                 /*
1900                  * Point to the data entry.
1901                  */
1902                 hdr = state->extrablk.bp->data;
1903                 ASSERT(hdr->magic == cpu_to_be32(XFS_DIR2_DATA_MAGIC));
1904                 dep = (xfs_dir2_data_entry_t *)
1905                       ((char *)hdr +
1906                        xfs_dir2_dataptr_to_off(state->mp, be32_to_cpu(lep->address)));
1907                 ASSERT(inum != be64_to_cpu(dep->inumber));
1908                 /*
1909                  * Fill in the new inode number and log the entry.
1910                  */
1911                 dep->inumber = cpu_to_be64(inum);
1912                 xfs_dir2_data_log_entry(args->trans, state->extrablk.bp, dep);
1913                 rval = 0;
1914         }
1915         /*
1916          * Didn't find it, and we're holding a data block.  Drop it.
1917          */
1918         else if (state->extravalid) {
1919                 xfs_da_brelse(args->trans, state->extrablk.bp);
1920                 state->extrablk.bp = NULL;
1921         }
1922         /*
1923          * Release all the buffers in the cursor.
1924          */
1925         for (i = 0; i < state->path.active; i++) {
1926                 xfs_da_brelse(args->trans, state->path.blk[i].bp);
1927                 state->path.blk[i].bp = NULL;
1928         }
1929         xfs_da_state_free(state);
1930         return rval;
1931 }
1932
1933 /*
1934  * Trim off a trailing empty freespace block.
1935  * Return (in rvalp) 1 if we did it, 0 if not.
1936  */
1937 int                                             /* error */
1938 xfs_dir2_node_trim_free(
1939         xfs_da_args_t           *args,          /* operation arguments */
1940         xfs_fileoff_t           fo,             /* free block number */
1941         int                     *rvalp)         /* out: did something */
1942 {
1943         xfs_dabuf_t             *bp;            /* freespace buffer */
1944         xfs_inode_t             *dp;            /* incore directory inode */
1945         int                     error;          /* error return code */
1946         xfs_dir2_free_t         *free;          /* freespace structure */
1947         xfs_mount_t             *mp;            /* filesystem mount point */
1948         xfs_trans_t             *tp;            /* transaction pointer */
1949
1950         dp = args->dp;
1951         mp = dp->i_mount;
1952         tp = args->trans;
1953         /*
1954          * Read the freespace block.
1955          */
1956         if (unlikely(error = xfs_da_read_buf(tp, dp, (xfs_dablk_t)fo, -2, &bp,
1957                         XFS_DATA_FORK))) {
1958                 return error;
1959         }
1960
1961         /*
1962          * There can be holes in freespace.  If fo is a hole, there's
1963          * nothing to do.
1964          */
1965         if (bp == NULL) {
1966                 return 0;
1967         }
1968         free = bp->data;
1969         ASSERT(free->hdr.magic == cpu_to_be32(XFS_DIR2_FREE_MAGIC));
1970         /*
1971          * If there are used entries, there's nothing to do.
1972          */
1973         if (be32_to_cpu(free->hdr.nused) > 0) {
1974                 xfs_da_brelse(tp, bp);
1975                 *rvalp = 0;
1976                 return 0;
1977         }
1978         /*
1979          * Blow the block away.
1980          */
1981         if ((error =
1982             xfs_dir2_shrink_inode(args, xfs_dir2_da_to_db(mp, (xfs_dablk_t)fo),
1983                     bp))) {
1984                 /*
1985                  * Can't fail with ENOSPC since that only happens with no
1986                  * space reservation, when breaking up an extent into two
1987                  * pieces.  This is the last block of an extent.
1988                  */
1989                 ASSERT(error != ENOSPC);
1990                 xfs_da_brelse(tp, bp);
1991                 return error;
1992         }
1993         /*
1994          * Return that we succeeded.
1995          */
1996         *rvalp = 1;
1997         return 0;
1998 }