On Thu, Sep 24, 2020 at 07:19:11AM +0100, Christoph Hellwig wrote: > 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? Doh. Yes, it is, in the realtime rmap series. :( :( > Either way I think a separate lock for the RT subvolume would make a > whole lot more sense. Yes, let's do it that way. --D