Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 12 Apr 2019 09:10:58 -0600
From:      Alan Somers <asomers@freebsd.org>
To:        FreeBSD Hackers <freebsd-hackers@freebsd.org>
Subject:   When can a struct buf's b_lblkno field by < 0 ?
Message-ID:  <CAOtMX2iUqx3T-VNrj=KkpvWn0AFti-ZoGTL87EewiwNKWi7byw@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
In struct buf, b_lblkno is documented as "Logical block number".  I
would expect that to always be nonnegative.  However, vtruncbuf loops
through a list of buffers, skipping those where "bp->b_lblkno > 0".
Maybe that's just an awkward way of writing "do something for the
buffer where b_lblkno == 0", but SVN archaeology suggests otherwise.
Before r112182, the code looked like this, implying that the b_lblkno
could actually be negative:

if ((bp->b_flags & B_DELWRI) && (bp->b_lblkno < 0)) {

Does anybody know under what circumstances that field might be
negative?  Also, was r112182 a correct change?  It appears to have
negated "<" and gotten ">", neglecting the "==" case.
https://svnweb.freebsd.org/base/head/sys/kern/vfs_subr.c?r1=112182&r2=112181&pathrev=112182

-Alan



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAOtMX2iUqx3T-VNrj=KkpvWn0AFti-ZoGTL87EewiwNKWi7byw>