All of lore.kernel.org
 help / color / mirror / Atom feed
* sg_next() for struct scatterlist is confusing
@ 2007-10-27 11:39 Robert P. J. Day
  2007-10-27 16:31 ` Haavard Skinnemoen
  0 siblings, 1 reply; 3+ messages in thread
From: Robert P. J. Day @ 2007-10-27 11:39 UTC (permalink / raw)
  To: Linux Kernel Mailing List


  according to the inline comments in include/linux/scatterlist.h:

"* If bit 0 is set, then the page_link contains a pointer to the next sg
 * table list. Otherwise the next entry is at sg + 1."

but if that's the case, then the implementation of sg_next() seems a
bit weird:

=================================
/**
 * sg_next - return the next scatterlist entry in a list
 * @sg:         The current sg entry
 *
 * Description:
 *   Usually the next entry will be @sg@ + 1, but if this sg element is part
 *   of a chained scatterlist, it could jump to the start of a new
 *   scatterlist array.
 *
 **/
static inline struct scatterlist *sg_next(struct scatterlist *sg)
{
#ifdef CONFIG_DEBUG_SG
        BUG_ON(sg->sg_magic != SG_MAGIC);
#endif
        if (sg_is_last(sg))
                return NULL;

        sg++;
        if (unlikely(sg_is_chain(sg)))
                sg = sg_chain_ptr(sg);

        return sg;
}
================================

  note how the comment says that the next entry will "usually" be
sg+1, "but" not if it's actually a pointer.

  however, as i read the code above, sg is *always* incremented before
that testing.  is that correct?  am i just misreading something?  or
could the comment have been a bit clearer?

rday


-- 
========================================================================
Robert P. J. Day
Linux Consulting, Training and Annoying Kernel Pedantry
Waterloo, Ontario, CANADA

http://crashcourse.ca
========================================================================

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2007-10-27 16:38 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-10-27 11:39 sg_next() for struct scatterlist is confusing Robert P. J. Day
2007-10-27 16:31 ` Haavard Skinnemoen
2007-10-27 16:35   ` Robert P. J. Day

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.