struct super_block *sb = inode->i_sb;
struct au_branch *br;
+ AuDebugOn(inode->i_mode
+ && (h_inode->i_mode & S_IFMT)
+ != (inode->i_mode & S_IFMT));
if (bindex == iinfo->ii_bstart)
au_cpup_igen(inode, h_inode);
br = au_sbr(sb, bindex);
if (au_ftest_hi(flags, HNOTIFY)
&& au_br_hnotifyable(br->br_perm)) {
- err = au_hn_alloc(hinode, inode, h_inode);
+ err = au_hn_alloc(hinode, inode);
if (unlikely(err))
AuIOErr1("au_hn_alloc() %d\n", err);
}
void au_update_ibrange(struct inode *inode, int do_put_zero)
{
struct au_iinfo *iinfo;
+ aufs_bindex_t bindex, bend;
iinfo = au_ii(inode);
- if (!iinfo || iinfo->ii_bstart < 0)
+ if (!iinfo)
return;
IiMustWriteLock(inode);
- if (do_put_zero) {
- aufs_bindex_t bindex;
-
+ if (do_put_zero && iinfo->ii_bstart >= 0) {
for (bindex = iinfo->ii_bstart; bindex <= iinfo->ii_bend;
bindex++) {
struct inode *h_i;
}
iinfo->ii_bstart = -1;
- while (++iinfo->ii_bstart <= iinfo->ii_bend)
- if (iinfo->ii_hinode[0 + iinfo->ii_bstart].hi_inode)
- break;
- if (iinfo->ii_bstart > iinfo->ii_bend) {
- iinfo->ii_bstart = -1;
- iinfo->ii_bend = -1;
- return;
- }
-
- iinfo->ii_bend++;
- while (0 <= --iinfo->ii_bend)
- if (iinfo->ii_hinode[0 + iinfo->ii_bend].hi_inode)
+ iinfo->ii_bend = -1;
+ bend = au_sbend(inode->i_sb);
+ for (bindex = 0; bindex <= bend; bindex++)
+ if (iinfo->ii_hinode[0 + bindex].hi_inode) {
+ iinfo->ii_bstart = bindex;
break;
- AuDebugOn(iinfo->ii_bstart > iinfo->ii_bend || iinfo->ii_bend < 0);
+ }
+ if (iinfo->ii_bstart >= 0)
+ for (bindex = bend; bindex >= iinfo->ii_bstart; bindex--)
+ if (iinfo->ii_hinode[0 + bindex].hi_inode) {
+ iinfo->ii_bend = bindex;
+ break;
+ }
+ AuDebugOn(iinfo->ii_bstart > iinfo->ii_bend);
}
/* ---------------------------------------------------------------------- */