bcache: add code comments for journal_read_bucket()
authorColy Li <colyli@suse.de>
Fri, 28 Jun 2019 11:59:50 +0000 (19:59 +0800)
committerJens Axboe <axboe@kernel.dk>
Fri, 28 Jun 2019 13:39:17 +0000 (07:39 -0600)
This patch adds more code comments in journal_read_bucket(), this is an
effort to make the code to be more understandable.

Signed-off-by: Coly Li <colyli@suse.de>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
drivers/md/bcache/journal.c

index 54f8886..98ee467 100644 (file)
@@ -100,6 +100,20 @@ reread:            left = ca->sb.bucket_size - offset;
 
                        blocks = set_blocks(j, block_bytes(ca->set));
 
+                       /*
+                        * Nodes in 'list' are in linear increasing order of
+                        * i->j.seq, the node on head has the smallest (oldest)
+                        * journal seq, the node on tail has the biggest
+                        * (latest) journal seq.
+                        */
+
+                       /*
+                        * Check from the oldest jset for last_seq. If
+                        * i->j.seq < j->last_seq, it means the oldest jset
+                        * in list is expired and useless, remove it from
+                        * this list. Otherwise, j is a condidate jset for
+                        * further following checks.
+                        */
                        while (!list_empty(list)) {
                                i = list_first_entry(list,
                                        struct journal_replay, list);
@@ -109,13 +123,22 @@ reread:           left = ca->sb.bucket_size - offset;
                                kfree(i);
                        }
 
+                       /* iterate list in reverse order (from latest jset) */
                        list_for_each_entry_reverse(i, list, list) {
                                if (j->seq == i->j.seq)
                                        goto next_set;
 
+                               /*
+                                * if j->seq is less than any i->j.last_seq
+                                * in list, j is an expired and useless jset.
+                                */
                                if (j->seq < i->j.last_seq)
                                        goto next_set;
 
+                               /*
+                                * 'where' points to first jset in list which
+                                * is elder then j.
+                                */
                                if (j->seq > i->j.seq) {
                                        where = &i->list;
                                        goto add;
@@ -129,6 +152,7 @@ add:
                        if (!i)
                                return -ENOMEM;
                        memcpy(&i->j, j, bytes);
+                       /* Add to the location after 'where' points to */
                        list_add(&i->list, where);
                        ret = 1;