Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 67731
b: refs/heads/master
c: 8553cf4
h: refs/heads/master
i:
  67729: fbfb8c8
  67727: 762643b
v: v3
  • Loading branch information
Mark Fasheh committed Oct 12, 2007
1 parent c2b4a8e commit ace65a4
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 9 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 38760e243249f03b4c6d78ca624dd846a2681b67
refs/heads/master: 8553cf4f360d6fc4913a0bdd3b22dd7b5bb9a3be
36 changes: 28 additions & 8 deletions trunk/fs/ocfs2/dir.c
Original file line number Diff line number Diff line change
Expand Up @@ -343,6 +343,31 @@ int ocfs2_delete_entry(handle_t *handle,
return status;
}

/*
* Check whether 'de' has enough room to hold an entry of
* 'new_rec_len' bytes.
*/
static inline int ocfs2_dirent_would_fit(struct ocfs2_dir_entry *de,
unsigned int new_rec_len)
{
unsigned int de_really_used;

/* Check whether this is an empty record with enough space */
if (le64_to_cpu(de->inode) == 0 &&
le16_to_cpu(de->rec_len) >= new_rec_len)
return 1;

/*
* Record might have free space at the end which we can
* use.
*/
de_really_used = OCFS2_DIR_REC_LEN(de->name_len);
if (le16_to_cpu(de->rec_len) >= (de_really_used + new_rec_len))
return 1;

return 0;
}

/* we don't always have a dentry for what we want to add, so people
* like orphan dir can call this instead.
*
Expand Down Expand Up @@ -385,10 +410,8 @@ int __ocfs2_add_entry(handle_t *handle,
retval = -EEXIST;
goto bail;
}
if (((le64_to_cpu(de->inode) == 0) &&
(le16_to_cpu(de->rec_len) >= rec_len)) ||
(le16_to_cpu(de->rec_len) >=
(OCFS2_DIR_REC_LEN(de->name_len) + rec_len))) {

if (ocfs2_dirent_would_fit(de, rec_len)) {
dir->i_mtime = dir->i_ctime = CURRENT_TIME;
retval = ocfs2_mark_inode_dirty(handle, dir, parent_fe_bh);
if (retval < 0) {
Expand Down Expand Up @@ -1078,10 +1101,7 @@ int ocfs2_prepare_dir_for_insert(struct ocfs2_super *osb,
status = -EEXIST;
goto bail;
}
if (((le64_to_cpu(de->inode) == 0) &&
(le16_to_cpu(de->rec_len) >= rec_len)) ||
(le16_to_cpu(de->rec_len) >=
(OCFS2_DIR_REC_LEN(de->name_len) + rec_len))) {
if (ocfs2_dirent_would_fit(de, rec_len)) {
/* Ok, we found a spot. Return this bh and let
* the caller actually fill it in. */
*ret_de_bh = bh;
Expand Down

0 comments on commit ace65a4

Please sign in to comment.