struct aufs_branch *stobr(struct super_block *sb, aufs_bindex_t bindex) { SiMustAnyLock(sb); AuDebugOn(bindex < 0 || sbend(sb) < bindex || !stosi(sb)->si_branch[0 + bindex]); return stosi(sb)->si_branch[0 + bindex]; }
static int make_xino(struct seq_file *seq, struct sysaufs_args *args, int *do_size) { int err; struct super_block *sb = args->sb; aufs_bindex_t bindex, bend; struct file *xf; struct inode *xi; TraceEnter(); AuDebugOn(args->index != SysaufsSb_XINO); SiMustReadLock(sb); *do_size = 0; err = seq_printf(seq, "%lu %lu\n", (unsigned long)sizeof(struct xino), (unsigned long)atomic_long_read(&stosi(sb)->si_xino)); bend = sbend(sb); for (bindex = 0; !err && bindex <= bend; bindex++) { xf = stobr(sb, bindex)->br_xino; xi = xf->f_dentry->d_inode; err = seq_printf(seq, "%d: %d, %Lux%d %Ld\n", bindex, file_count(xf), (u64)xi->i_blocks, 1 << xi->i_blkbits, i_size_read(xi)); } return err; }
int au_sigen_inc(struct super_block *sb) { int gen; SiMustWriteLock(sb); gen = ++stosi(sb)->si_generation; au_update_digen(sb->s_root); au_update_iigen(sb->s_root->d_inode); sb->s_root->d_inode->i_version++; return gen; }
aufs_bindex_t new_br_id(struct super_block *sb) { aufs_bindex_t br_id; TraceEnter(); SiMustWriteLock(sb); while (1) { br_id = ++stosi(sb)->si_last_br_id; if (br_id && find_brindex(sb, br_id) < 0) return br_id; } }
static int renwh_and_rmdir(struct dentry *dentry, aufs_bindex_t bindex, struct aufs_nhash *whlist, struct inode *dir) { int rmdir_later, err; struct dentry *hidden_dentry; LKTRTrace("%.*s, b%d\n", DLNPair(dentry), bindex); err = rename_whtmp(dentry, bindex); //err = -1; //todo: bug if (unlikely(err)) { au_direval_inc(dentry->d_parent); return err; } hidden_dentry = au_h_dptr_i(dentry, bindex); if (!au_is_nfs(hidden_dentry->d_sb)) { const int dirwh = stosi(dentry->d_sb)->si_dirwh; rmdir_later = (dirwh <= 1); if (!rmdir_later) rmdir_later = is_longer_wh(whlist, bindex, dirwh); if (rmdir_later) return rmdir_later; } err = rmdir_whtmp(hidden_dentry, whlist, bindex, dir, dentry->d_inode); //err = -1; if (unlikely(err)) { IOErr("rmdir %.*s, b%d failed, %d. ignored\n", DLNPair(hidden_dentry), bindex, err); err = 0; } TraceErr(err); return err; }
int au_sigen(struct super_block *sb) { SiMustAnyLock(sb); return stosi(sb)->si_generation; }
aufs_bindex_t sbend(struct super_block *sb) { SiMustAnyLock(sb); return stosi(sb)->si_bend; }