fnode
struct hlist_node fnode;
hlist_for_each_entry_safe(tmp_fil, n, head, fnode) {
hlist_del(&tmp_fil->fnode);
hlist_for_each_entry_safe(tmp_fil, n, head, fnode)
hlist_del(&tmp_fil->fnode);
hlist_for_each_entry_safe(tmp_fil, n, head, fnode) {
hlist_del(&tmp_fil->fnode);
hlist_del(&fil->fnode);
hlist_for_each_entry_safe(tmp_fil, n, head, fnode) {
hlist_add_head(&(fil->fnode), head);
hlist_del(&tmp_fil->fnode);
hlist_for_each_entry_safe(tmp_fil, n, head, fnode) {
hlist_add_head(&(fil->fnode), head);
iscsi_flashnode_conn_attr(fnode, is_fw_assigned_ipv6,
iscsi_flashnode_conn_attr(fnode, header_digest, ISCSI_FLASHNODE_HDR_DGST_EN);
iscsi_flashnode_conn_attr(fnode, data_digest, ISCSI_FLASHNODE_DATA_DGST_EN);
iscsi_flashnode_conn_attr(fnode, snack_req, ISCSI_FLASHNODE_SNACK_REQ_EN);
iscsi_flashnode_conn_attr(fnode, tcp_timestamp_stat,
iscsi_flashnode_conn_attr(fnode, tcp_nagle_disable,
iscsi_flashnode_conn_attr(fnode, tcp_wsf_disable,
iscsi_flashnode_conn_attr(fnode, tcp_timer_scale,
iscsi_flashnode_conn_attr(fnode, tcp_timestamp_enable,
iscsi_flashnode_conn_attr(fnode, fragment_disable,
iscsi_flashnode_conn_attr(fnode, keepalive_tmo, ISCSI_FLASHNODE_KEEPALIVE_TMO);
iscsi_flashnode_conn_attr(fnode, port, ISCSI_FLASHNODE_PORT);
iscsi_flashnode_conn_attr(fnode, ipaddress, ISCSI_FLASHNODE_IPADDR);
iscsi_flashnode_conn_attr(fnode, max_recv_dlength,
iscsi_flashnode_conn_attr(fnode, max_xmit_dlength,
iscsi_flashnode_conn_attr(fnode, local_port, ISCSI_FLASHNODE_LOCAL_PORT);
iscsi_flashnode_conn_attr(fnode, ipv4_tos, ISCSI_FLASHNODE_IPV4_TOS);
iscsi_flashnode_conn_attr(fnode, ipv6_traffic_class, ISCSI_FLASHNODE_IPV6_TC);
iscsi_flashnode_conn_attr(fnode, ipv6_flow_label,
iscsi_flashnode_conn_attr(fnode, redirect_ipaddr,
iscsi_flashnode_conn_attr(fnode, max_segment_size,
iscsi_flashnode_conn_attr(fnode, link_local_ipv6,
iscsi_flashnode_conn_attr(fnode, tcp_xmit_wsf, ISCSI_FLASHNODE_TCP_XMIT_WSF);
iscsi_flashnode_conn_attr(fnode, tcp_recv_wsf, ISCSI_FLASHNODE_TCP_RECV_WSF);
iscsi_flashnode_conn_attr(fnode, statsn, ISCSI_FLASHNODE_STATSN);
iscsi_flashnode_conn_attr(fnode, exp_statsn, ISCSI_FLASHNODE_EXP_STATSN);
iscsi_flashnode_sess_attr(fnode, auto_snd_tgt_disable,
iscsi_flashnode_sess_attr(fnode, discovery_session,
iscsi_flashnode_sess_attr(fnode, portal_type, ISCSI_FLASHNODE_PORTAL_TYPE);
iscsi_flashnode_sess_attr(fnode, entry_enable, ISCSI_FLASHNODE_ENTRY_EN);
iscsi_flashnode_sess_attr(fnode, immediate_data, ISCSI_FLASHNODE_IMM_DATA_EN);
iscsi_flashnode_sess_attr(fnode, initial_r2t, ISCSI_FLASHNODE_INITIAL_R2T_EN);
iscsi_flashnode_sess_attr(fnode, data_seq_in_order,
iscsi_flashnode_sess_attr(fnode, data_pdu_in_order,
iscsi_flashnode_sess_attr(fnode, chap_auth, ISCSI_FLASHNODE_CHAP_AUTH_EN);
iscsi_flashnode_sess_attr(fnode, discovery_logout,
iscsi_flashnode_sess_attr(fnode, bidi_chap, ISCSI_FLASHNODE_BIDI_CHAP_EN);
iscsi_flashnode_sess_attr(fnode, discovery_auth_optional,
iscsi_flashnode_sess_attr(fnode, erl, ISCSI_FLASHNODE_ERL);
iscsi_flashnode_sess_attr(fnode, first_burst_len, ISCSI_FLASHNODE_FIRST_BURST);
iscsi_flashnode_sess_attr(fnode, def_time2wait, ISCSI_FLASHNODE_DEF_TIME2WAIT);
iscsi_flashnode_sess_attr(fnode, def_time2retain,
iscsi_flashnode_sess_attr(fnode, max_outstanding_r2t, ISCSI_FLASHNODE_MAX_R2T);
iscsi_flashnode_sess_attr(fnode, isid, ISCSI_FLASHNODE_ISID);
iscsi_flashnode_sess_attr(fnode, tsid, ISCSI_FLASHNODE_TSID);
iscsi_flashnode_sess_attr(fnode, max_burst_len, ISCSI_FLASHNODE_MAX_BURST);
iscsi_flashnode_sess_attr(fnode, def_taskmgmt_tmo,
iscsi_flashnode_sess_attr(fnode, targetalias, ISCSI_FLASHNODE_ALIAS);
iscsi_flashnode_sess_attr(fnode, targetname, ISCSI_FLASHNODE_NAME);
iscsi_flashnode_sess_attr(fnode, tpgt, ISCSI_FLASHNODE_TPGT);
iscsi_flashnode_sess_attr(fnode, discovery_parent_idx,
iscsi_flashnode_sess_attr(fnode, discovery_parent_type,
iscsi_flashnode_sess_attr(fnode, chap_in_idx, ISCSI_FLASHNODE_CHAP_IN_IDX);
iscsi_flashnode_sess_attr(fnode, chap_out_idx, ISCSI_FLASHNODE_CHAP_OUT_IDX);
iscsi_flashnode_sess_attr(fnode, username, ISCSI_FLASHNODE_USERNAME);
iscsi_flashnode_sess_attr(fnode, username_in, ISCSI_FLASHNODE_USERNAME_IN);
iscsi_flashnode_sess_attr(fnode, password, ISCSI_FLASHNODE_PASSWORD);
iscsi_flashnode_sess_attr(fnode, password_in, ISCSI_FLASHNODE_PASSWORD_IN);
iscsi_flashnode_sess_attr(fnode, is_boot_target, ISCSI_FLASHNODE_IS_BOOT_TGT);
struct fnode *hpfs_alloc_fnode(struct super_block *s, secno near, fnode_secno *fno,
struct fnode *f;
if (!(fnode = hpfs_map_fnode(s, up, &bh))) return -1;
btree = GET_BTREE_PTR(&fnode->btree);
if (!(fnode = hpfs_map_fnode(s, node, &bh))) {
btree = GET_BTREE_PTR(&fnode->btree);
struct fnode *fnode;
if (!(fnode = hpfs_map_fnode(s, f, &bh))) return;
btree = GET_BTREE_PTR(&fnode->btree);
struct fnode *fnode;
if (!(fnode = hpfs_map_fnode(s, fno, &bh))) return;
if (!fnode_is_dir(fnode)) hpfs_remove_btree(s, GET_BTREE_PTR(&fnode->btree));
else hpfs_remove_dtree(s, le32_to_cpu(fnode->u.external[0].disk_secno));
ea_end = fnode_end_ea(fnode);
for (ea = fnode_ea(fnode); ea < ea_end; ea = next_ea(ea))
hpfs_ea_ext_remove(s, le32_to_cpu(fnode->ea_secno), fnode_in_anode(fnode), le32_to_cpu(fnode->ea_size_l));
struct fnode *fnode;
if (!(fnode = hpfs_map_fnode(s, node, &bh))) return -1;
btree = GET_BTREE_PTR(&fnode->btree);
if (!dir_emit(ctx, tempname, de->namelen, le32_to_cpu(de->fnode), DT_UNKNOWN)) {
ino = le32_to_cpu(de->fnode);
struct fnode *fno;
struct fnode *upf;
if (le32_to_cpu(de->fnode) == fno) {
if (le32_to_cpu(de->fnode) == fno) {
struct fnode *fnode;
if (!(fnode = hpfs_map_fnode(i->i_sb, le32_to_cpu(d->up), &bh))) {
fnode->u.external[0].disk_secno = cpu_to_le32(rdno);
struct fnode *fnode;
if ((fnode = hpfs_map_fnode(i->i_sb, up, &bh))) {
fnode->u.external[0].disk_secno = cpu_to_le32(down);
struct fnode *f, struct quad_buffer_head *qbh)
char *hpfs_get_ea(struct super_block *s, struct fnode *fnode, char *key, int *size)
struct extended_attribute *ea_end = fnode_end_ea(fnode);
for (ea = fnode_ea(fnode); ea < ea_end; ea = next_ea(ea))
a = le32_to_cpu(fnode->ea_secno);
len = le32_to_cpu(fnode->ea_size_l);
ano = fnode_in_anode(fnode);
void hpfs_set_ea(struct inode *inode, struct fnode *fnode, const char *key,
struct extended_attribute *ea_end = fnode_end_ea(fnode);
for (ea = fnode_ea(fnode); ea < ea_end; ea = next_ea(ea))
a = le32_to_cpu(fnode->ea_secno);
len = le32_to_cpu(fnode->ea_size_l);
ano = fnode_in_anode(fnode);
if (!le16_to_cpu(fnode->ea_offs)) {
fnode->ea_offs = cpu_to_le16(0xc4);
if (le16_to_cpu(fnode->ea_offs) < 0xc4 || le16_to_cpu(fnode->ea_offs) + le16_to_cpu(fnode->acl_size_s) + le16_to_cpu(fnode->ea_size_s) > 0x200) {
le16_to_cpu(fnode->ea_offs), le16_to_cpu(fnode->ea_size_s));
if ((le16_to_cpu(fnode->ea_size_s) || !le32_to_cpu(fnode->ea_size_l)) &&
le16_to_cpu(fnode->ea_offs) + le16_to_cpu(fnode->acl_size_s) + le16_to_cpu(fnode->ea_size_s) + strlen(key) + size + 5 <= 0x200) {
ea = fnode_end_ea(fnode);
fnode->ea_size_s = cpu_to_le16(le16_to_cpu(fnode->ea_size_s) + strlen(key) + size + 5);
if (le16_to_cpu(fnode->ea_size_s) && !le32_to_cpu(fnode->ea_size_l)) {
memcpy(data, fnode_ea(fnode), le16_to_cpu(fnode->ea_size_s));
fnode->ea_size_l = cpu_to_le32(le16_to_cpu(fnode->ea_size_s));
fnode->ea_size_s = cpu_to_le16(0);
fnode->ea_secno = cpu_to_le32(n);
fnode->flags &= ~FNODE_anode;
pos = le32_to_cpu(fnode->ea_size_l) + 5 + strlen(key) + size;
len = (le32_to_cpu(fnode->ea_size_l) + 511) >> 9;
fnode->ea_secno = cpu_to_le32(q);
fnode->flags &= ~FNODE_anode;
} else if (!fnode_in_anode(fnode)) {
if (hpfs_alloc_if_possible(s, le32_to_cpu(fnode->ea_secno) + len)) {
if (!(b1 = hpfs_map_sector(s, le32_to_cpu(fnode->ea_secno) + i, &bh1, len - i - 1))) {
hpfs_free_sectors(s, le32_to_cpu(fnode->ea_secno), len);
fnode->ea_secno = cpu_to_le32(new_sec);
if (fnode_in_anode(fnode)) {
if (hpfs_add_sector_to_btree(s, le32_to_cpu(fnode->ea_secno),
if (hpfs_ea_write(s, le32_to_cpu(fnode->ea_secno), fnode_in_anode(fnode), le32_to_cpu(fnode->ea_size_l), 4, h)) goto bail;
if (hpfs_ea_write(s, le32_to_cpu(fnode->ea_secno), fnode_in_anode(fnode), le32_to_cpu(fnode->ea_size_l) + 4, h[1] + 1, key)) goto bail;
if (hpfs_ea_write(s, le32_to_cpu(fnode->ea_secno), fnode_in_anode(fnode), le32_to_cpu(fnode->ea_size_l) + 5 + h[1], size, data)) goto bail;
fnode->ea_size_l = cpu_to_le32(pos);
if (le32_to_cpu(fnode->ea_secno))
if (fnode_in_anode(fnode)) hpfs_truncate_btree(s, le32_to_cpu(fnode->ea_secno), 1, (le32_to_cpu(fnode->ea_size_l) + 511) >> 9);
else hpfs_free_sectors(s, le32_to_cpu(fnode->ea_secno) + ((le32_to_cpu(fnode->ea_size_l) + 511) >> 9), len - ((le32_to_cpu(fnode->ea_size_l) + 511) >> 9));
else fnode->ea_secno = fnode->ea_size_l = cpu_to_le32(0);
int hpfs_read_ea(struct super_block *s, struct fnode *fnode, char *key,
struct extended_attribute *ea_end = fnode_end_ea(fnode);
for (ea = fnode_ea(fnode); ea < ea_end; ea = next_ea(ea))
a = le32_to_cpu(fnode->ea_secno);
len = le32_to_cpu(fnode->ea_size_l);
ano = fnode_in_anode(fnode);
struct fnode *fnode;
if (!(fnode = hpfs_map_fnode(inode->i_sb, inode->i_ino, &bh))) return 0;
GET_BTREE_PTR(&fnode->btree),
__le32 fnode; /* fnode giving allocation info */
static inline bool fnode_in_anode(struct fnode *p)
static inline bool fnode_is_dir(struct fnode *p)
static inline struct extended_attribute *fnode_ea(struct fnode *fnode)
return (struct extended_attribute *)((char *)fnode + le16_to_cpu(fnode->ea_offs) + le16_to_cpu(fnode->acl_size_s));
static inline struct extended_attribute *fnode_end_ea(struct fnode *fnode)
return (struct extended_attribute *)((char *)fnode + le16_to_cpu(fnode->ea_offs) + le16_to_cpu(fnode->acl_size_s) + le16_to_cpu(fnode->ea_size_s));
struct fnode *hpfs_alloc_fnode(struct super_block *, secno, fnode_secno *, struct buffer_head **);
struct hpfs_dirent *map_fnode_dirent(struct super_block *, fnode_secno, struct fnode *, struct quad_buffer_head *);
int hpfs_read_ea(struct super_block *, struct fnode *, char *, char *, int);
char *hpfs_get_ea(struct super_block *, struct fnode *, char *, int *);
void hpfs_set_ea(struct inode *, struct fnode *, const char *,
struct fnode *hpfs_map_fnode(struct super_block *s, ino_t, struct buffer_head **);
if (fnode_is_dir(fnode)) {
hpfs_inode->i_parent_dir = le32_to_cpu(fnode->up);
hpfs_inode->i_dno = le32_to_cpu(fnode->u.external[0].disk_secno);
i->i_size = le32_to_cpu(fnode->file_size);
static void hpfs_write_inode_ea(struct inode *i, struct fnode *fnode)
hpfs_set_ea(i, fnode, "UID", (char*)&ea, 2);
hpfs_set_ea(i, fnode, "GID", (char *)&ea, 2);
hpfs_set_ea(i, fnode, "MODE", (char *)&ea, 2);
hpfs_set_ea(i, fnode, "DEV", (char *)&ea, 4);
struct fnode *fnode;
if (!(fnode = hpfs_map_fnode(i->i_sb, i->i_ino, &bh))) return;
if (!(de = map_fnode_dirent(i->i_sb, i->i_ino, fnode, &qbh))) {
fnode->file_size = cpu_to_le32(i->i_size);
fnode->file_size = cpu_to_le32(0);
hpfs_write_inode_ea(i, fnode);
struct fnode *fnode;
if (!(fnode = hpfs_map_fnode(sb, i->i_ino, &bh))) {
if ((ea = hpfs_get_ea(i->i_sb, fnode, "UID", &ea_size))) {
if ((ea = hpfs_get_ea(i->i_sb, fnode, "GID", &ea_size))) {
if ((ea = hpfs_get_ea(i->i_sb, fnode, "SYMLINK", &ea_size))) {
if ((ea = hpfs_get_ea(i->i_sb, fnode, "MODE", &ea_size))) {
if ((ea = hpfs_get_ea(i->i_sb, fnode, "DEV", &ea_size))) {
struct fnode *hpfs_map_fnode(struct super_block *s, ino_t ino, struct buffer_head **bhp)
struct fnode *fnode;
if ((fnode = hpfs_map_sector(s, ino, bhp, FNODE_RD_AHEAD))) {
if (le32_to_cpu(fnode->magic) != FNODE_MAGIC) {
if (!fnode_is_dir(fnode)) {
if ((unsigned)fnode->btree.n_used_nodes + (unsigned)fnode->btree.n_free_nodes !=
(bp_internal(GET_BTREE_PTR(&fnode->btree)) ? 12 : 8)) {
if (le16_to_cpu(fnode->btree.first_free) !=
8 + fnode->btree.n_used_nodes * (bp_internal(GET_BTREE_PTR(&fnode->btree)) ? 8 : 12)) {
if (le16_to_cpu(fnode->ea_size_s) && (le16_to_cpu(fnode->ea_offs) < 0xc4 ||
le16_to_cpu(fnode->ea_offs) + le16_to_cpu(fnode->acl_size_s) + le16_to_cpu(fnode->ea_size_s) > 0x200)) {
le16_to_cpu(fnode->ea_offs), le16_to_cpu(fnode->ea_size_s));
ea = fnode_ea(fnode);
ea_end = fnode_end_ea(fnode);
return fnode;
struct fnode *fnode;
fnode = hpfs_map_fnode(s, ino, &bh);
if (!fnode)
dno = le32_to_cpu(fnode->u.external[0].disk_secno);
struct fnode *fnode;
fnode = hpfs_alloc_fnode(dir->i_sb, hpfs_i(dir)->i_dno, &fno, &bh);
if (!fnode)
dee.fnode = cpu_to_le32(fno);
fnode->len = len;
memcpy(fnode->name, name, len > 15 ? 15 : len);
fnode->up = cpu_to_le32(dir->i_ino);
struct fnode *fnode;
fnode = hpfs_alloc_fnode(dir->i_sb, hpfs_i(dir)->i_dno, &fno, &bh);
if (!fnode)
dee.fnode = cpu_to_le32(fno);
fnode->len = len;
memcpy(fnode->name, name, len > 15 ? 15 : len);
fnode->up = cpu_to_le32(dir->i_ino);
struct fnode *fnode;
struct fnode *fnode;
fnode = hpfs_alloc_fnode(dir->i_sb, hpfs_i(dir)->i_dno, &fno, &bh);
if (!fnode)
dee.fnode = cpu_to_le32(fno);
fnode->len = len;
memcpy(fnode->name, name, len > 15 ? 15 : len);
fnode->up = cpu_to_le32(dir->i_ino);
hpfs_set_ea(result, fnode, "SYMLINK", symlink, strlen(symlink));
fnode = hpfs_alloc_fnode(dir->i_sb, hpfs_i(dir)->i_dno, &fno, &bh);
if (!fnode)
struct fnode *fnode;
if (!(fnode = hpfs_map_fnode(i->i_sb, i->i_ino, &bh)))
err = hpfs_read_ea(i->i_sb, fnode, "SYMLINK", link, PAGE_SIZE);
struct fnode *fnode;
dee.fnode = cpu_to_le32(fno);
if ((fnode = hpfs_map_fnode(i->i_sb, i->i_ino, &bh))) {
fnode->up = cpu_to_le32(new_dir->i_ino);
fnode->len = new_len;
memcpy(fnode->name, new_name, new_len>15?15:new_len);
if (new_len < 15) memset(&fnode->name[new_len], 0, 15 - new_len);
fnode->len = len;
memcpy(fnode->name, name, len > 15 ? 15 : len);
fnode->up = cpu_to_le32(dir->i_ino);
fnode->flags |= FNODE_dir;
fnode->btree.n_free_nodes = 7;
fnode->btree.n_used_nodes = 1;
fnode->btree.first_free = cpu_to_le16(0x14);
fnode->u.external[0].disk_secno = cpu_to_le32(dno);
fnode->u.external[0].file_secno = cpu_to_le32(-1);
de->fnode = cpu_to_le32(fno);
pcpu_freelist_push(&htab->freelist, &l->fnode);
l_new = container_of(l, struct htab_elem, fnode);
struct pcpu_freelist_node fnode;
htab->elems + offsetof(struct htab_elem, fnode),
l_new = container_of(l, struct htab_elem, fnode);
BUILD_BUG_ON(offsetof(struct htab_elem, fnode.next) !=
struct pcpu_freelist_node fnode;
pcpu_freelist_push(&smap->freelist, &new_bucket->fnode);
pcpu_freelist_push(&smap->freelist, &new_bucket->fnode);
pcpu_freelist_push(&smap->freelist, &old_bucket->fnode);
pcpu_freelist_push(&smap->freelist, &old_bucket->fnode);
pcpu_freelist_push(&smap->freelist, &old_bucket->fnode);
fnode = atoi(optarg);
static int fnode = FUTEX_NO_NODE;
new.node = fnode;