Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

The code in clear_remove() and clear_inodedeps() skips one entry

in the pagedep and inodedep hash tables. An entry in the table is
skipped because 'pagedep_hash' and 'inodedep_hash' hold the size
of the hash tables - 1.

The chance that this would have any operational failure is extremely
unlikely. These funtions only need to find a single entry and are
only called when there are too many entries. The chance that they
would fail because all the entries are on the single skipped hash
chain are remote.

Submitted by: Pedro Martelletto
Reviewed by:  kib
MFC after:    2 weeks
  • Loading branch information...
commit 3efd867bfd8807800a7160e66608bc752c92ed1d 1 parent e241794
mckusick authored
Showing with 4 additions and 4 deletions.
  1. +4 −4 sys/ufs/ffs/ffs_softdep.c
View
8 sys/ufs/ffs/ffs_softdep.c
@@ -13022,9 +13022,9 @@ clear_remove(void)
mtx_assert(&lk, MA_OWNED);
- for (cnt = 0; cnt < pagedep_hash; cnt++) {
+ for (cnt = 0; cnt <= pagedep_hash; cnt++) {
pagedephd = &pagedep_hashtbl[next++];
- if (next >= pagedep_hash)
+ if (next > pagedep_hash)
next = 0;
LIST_FOREACH(pagedep, pagedephd, pd_hash) {
if (LIST_EMPTY(&pagedep->pd_dirremhd))
@@ -13085,9 +13085,9 @@ clear_inodedeps(void)
* We will then gather up all the inodes in its block
* that have dependencies and flush them out.
*/
- for (cnt = 0; cnt < inodedep_hash; cnt++) {
+ for (cnt = 0; cnt <= inodedep_hash; cnt++) {
inodedephd = &inodedep_hashtbl[next++];
- if (next >= inodedep_hash)
+ if (next > inodedep_hash)
next = 0;
if ((inodedep = LIST_FIRST(inodedephd)) != NULL)
break;

0 comments on commit 3efd867

Please sign in to comment.
Something went wrong with that request. Please try again.