On Wed, Sep 23, 2020 at 11:00:01PM -0700, Darrick J. Wong wrote: > > > + struct aglock *lock = &ag_locks[(signed)NULLAGNUMBER]; > > > > Err, what is this weird cast doing here? > > Well.... ag_locks is allocated with length ag_locks[agcount + 1], and > then the pointer is incremented so that ag_locks[-1] is the rt lock. At least in the for-next branch it isn't: ag_locks = calloc(mp->m_sb.sb_agcount, sizeof(struct aglock)); More importantly, I can't even find other uses of ag_locks for the RT subvolume. Is this hidden in one of your series? Either way I think a separate lock for the RT subvolume would make a whole lot more sense.