/* Make atom for name */ static int make_atom(struct inode *atable, const char *name, unsigned len, atom_t *atom) { struct sb *sb = tux_sb(atable->i_sb); int err; err = find_atom(atable, name, len, atom); if (!err) return 0; if (err != -ENODATA) return err; err = get_freeatom(atable, atom); if (err) return err; loff_t where = tux_create_entry(atable, name, len, *atom, 0, &sb->atomdictsize); if (where < 0) { /* FIXME: better set a flag that unatom broke or something!!! */ return where; } /* Enter into reverse map - maybe verify zero refs? */ where = unatom_dict_write(atable, *atom, where); if (where < 0) { /* FIXME: better set a flag that unatom broke or something!!! */ return where; } return 0; }
/* Make atom for name */ static int make_atom(struct inode *atable, const char *name, unsigned len, atom_t *atom) { struct sb *sb = tux_sb(atable->i_sb); struct buffer_head *buffer; loff_t where; int err; err = find_atom(atable, name, len, atom); if (!err) return 0; if (err != -ENODATA) return err; err = get_freeatom(atable, atom); if (err) return err; where = tux_alloc_entry(atable, name, len, &sb->atomdictsize, &buffer); if (where < 0) { /* FIXME: better set a flag that unatom broke or something!!! */ return where; } /* This releases buffer */ tux_set_entry(buffer, bufdata(buffer) + (where & sb->blockmask), *atom, 0); /* Enter into reverse map - maybe verify zero refs? */ where = unatom_dict_write(atable, *atom, where); if (where < 0) { /* FIXME: better set a flag that unatom broke or something!!! */ return where; } return 0; }