svn commit: r249064 - head/sys/ufs/ffs
Kirk McKusick
mckusick at FreeBSD.org
Wed Apr 3 19:26:32 UTC 2013
Author: mckusick
Date: Wed Apr 3 19:26:32 2013
New Revision: 249064
URL: http://svnweb.freebsd.org/changeset/base/249064
Log:
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
Modified:
head/sys/ufs/ffs/ffs_softdep.c
Modified: head/sys/ufs/ffs/ffs_softdep.c
==============================================================================
--- head/sys/ufs/ffs/ffs_softdep.c Wed Apr 3 19:19:45 2013 (r249063)
+++ head/sys/ufs/ffs/ffs_softdep.c Wed Apr 3 19:26:32 2013 (r249064)
@@ -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;
More information about the svn-src-all
mailing list