void di_read_lock(struct dentry *d, int flags, unsigned int lsc) { au_rw_read_lock_nested(&au_di(d)->di_rwsem, lsc); if (d->d_inode) { if (au_ftest_lock(flags, IW)) do_ii_write_lock(d->d_inode, lsc); else if (au_ftest_lock(flags, IR)) do_ii_read_lock(d->d_inode, lsc); } }
void di_write_lock(struct dentry *d, unsigned int lsc) { LKTRTrace("%.*s, %u\n", AuDLNPair(d), lsc); SiMustAnyLock(d->d_sb); /* todo: always nested? */ au_dbg_locking_di_reg(d, AuLock_IW, lsc); au_rw_write_lock_nested(&au_di(d)->di_rwsem, lsc); au_dbg_locking_di_unreg(d, AuLock_IW); au_dbg_locked_di_reg(d, AuLock_IW, lsc); if (d->d_inode) do_ii_write_lock(d->d_inode, lsc); }
void di_read_lock(struct dentry *d, int flags, unsigned int lsc) { LKTRTrace("%.*s, %u\n", AuDLNPair(d), lsc); SiMustAnyLock(d->d_sb); /* todo: always nested? */ au_dbg_locking_di_reg(d, flags, lsc); au_rw_read_lock_nested(&au_di(d)->di_rwsem, lsc); au_dbg_locking_di_unreg(d, flags); au_dbg_locked_di_reg(d, flags, lsc); if (d->d_inode) { if (au_ftest_lock(flags, IW)) do_ii_write_lock(d->d_inode, lsc); else if (au_ftest_lock(flags, IR)) do_ii_read_lock(d->d_inode, lsc); } }
void di_write_lock(struct dentry *d, unsigned int lsc) { au_rw_write_lock_nested(&au_di(d)->di_rwsem, lsc); if (d->d_inode) do_ii_write_lock(d->d_inode, lsc); }