MCPcopy Create free account
hub / github.com/bobranten/Ext4Fsd / ext3_delete_entry

Function ext3_delete_entry

Ext4Fsd/ext3/htree.c:1979–2012  ·  view source on GitHub ↗

* ext3_delete_entry deletes a directory entry by merging it with the * previous entry */

Source from the content-addressed store, hash-verified

1977 * previous entry
1978 */
1979int ext3_delete_entry(struct ext2_icb *icb, struct inode *dir,
1980 struct ext3_dir_entry_2 *de_del,
1981 struct buffer_head *bh)
1982{
1983 struct ext3_dir_entry_2 *de, *pde = NULL;
1984 size_t i = 0;
1985 int csum_size = 0;
1986
1987 if (ext4_has_metadata_csum(dir->i_sb))
1988 csum_size = sizeof(struct ext4_dir_entry_tail);
1989
1990 de = (struct ext3_dir_entry_2 *) bh->b_data;
1991 while (i < bh->b_size - csum_size) {
1992 if (!ext3_check_dir_entry("ext3_delete_entry", dir, de, bh, i))
1993 return -EIO;
1994 if (de == de_del) {
1995 if (pde)
1996 pde->rec_len = ext3_rec_len_to_disk(
1997 ext3_rec_len_from_disk(pde->rec_len) +
1998 ext3_rec_len_from_disk(de->rec_len));
1999 else
2000 de->inode = 0;
2001 dir->i_version++;
2002 /* ext3_journal_dirty_metadata(handle, bh); */
2003 ext4_dirent_csum_set(dir, (struct ext4_dir_entry *)bh->b_data);
2004 set_buffer_dirty(bh);
2005 return 0;
2006 }
2007 i += ext3_rec_len_from_disk(de->rec_len);
2008 pde = de;
2009 de = ext3_next_entry(de);
2010 }
2011 return -ENOENT;
2012}
2013
2014/*
2015 * routine to check that the specified directory is empty (for rmdir)

Callers 1

Ext2RemoveEntryFunction · 0.85

Calls 6

ext4_has_metadata_csumFunction · 0.85
ext3_check_dir_entryFunction · 0.85
ext3_rec_len_to_diskFunction · 0.85
ext3_rec_len_from_diskFunction · 0.85
ext4_dirent_csum_setFunction · 0.85
ext3_next_entryFunction · 0.85

Tested by

no test coverage detected