Files
mirror_zfs/module/zfs
Brian Behlendorf dba1d70566 Fix arc_adapt() spinning in iterate_supers_type()
The iterate_supers_type() function which was introduced in the
3.0 kernel was supposed to provide a safe way to call an arbitrary
function on all super blocks of a specific type.  Unfortunately,
because a list_head was used a bug was introduced which made it
possible for iterate_supers_type() to get stuck spinning on a
super block which was just deactivated.

This can occur because when the list head is removed from the
fs_supers list it is reinitialized to point to itself.  If the
iterate_supers_type() function happened to be processing the
removed list_head it will get stuck spinning on that list_head.

The bug was fixed in the 3.3 kernel by converting the list_head
to an hlist_node.  However, to resolve the issue for existing
3.0 - 3.2 kernels we detect when a list_head is used.  Then to
prevent the spinning from occurring the .next pointer is set to
the fs_supers list_head which ensures the iterate_supers_type()
function will always terminate.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #1045
Closes #861
Closes #790
2013-07-17 09:28:06 -07:00
..
2013-07-09 11:53:28 -07:00
2012-08-27 12:01:37 -07:00
2013-06-19 15:14:10 -07:00
2013-07-02 13:34:31 -07:00
2013-07-02 13:34:31 -07:00
2013-07-02 13:34:31 -07:00
2010-08-31 13:41:58 -07:00
2013-07-02 13:34:31 -07:00
2013-07-02 13:34:31 -07:00
2012-08-27 12:01:37 -07:00
2013-06-19 15:14:10 -07:00
2013-06-19 15:14:10 -07:00
2013-01-08 10:35:35 -08:00
2013-06-19 15:14:10 -07:00
2012-09-17 11:22:23 -07:00
2013-07-02 13:34:31 -07:00
2013-06-19 15:14:10 -07:00
2012-10-15 16:01:54 -07:00
2010-08-31 08:38:46 -07:00
2013-03-06 15:48:48 -08:00
2012-08-27 12:01:37 -07:00
2013-06-19 16:22:39 -07:00
2012-08-27 12:01:37 -07:00
2010-12-07 16:05:25 -08:00
2010-08-31 13:41:59 -07:00
2010-08-31 13:41:58 -07:00
2010-08-31 13:41:58 -07:00
2012-08-27 12:01:37 -07:00
2013-05-06 12:39:34 -07:00
2013-06-19 16:22:39 -07:00
2013-04-26 14:42:36 -07:00
2012-08-27 12:01:37 -07:00
2012-08-27 12:01:37 -07:00
2013-01-08 10:35:42 -08:00
2013-07-11 13:53:50 -07:00
2013-05-01 17:05:52 -07:00
2013-06-19 15:14:10 -07:00
2013-06-19 16:22:39 -07:00
2012-09-05 08:44:58 -07:00
2013-06-19 15:14:10 -07:00
2013-06-19 15:14:10 -07:00
2010-08-31 13:41:58 -07:00
2013-06-19 15:14:10 -07:00
2013-04-19 15:43:16 -07:00
2013-05-01 17:05:52 -07:00
2011-03-02 11:44:34 -08:00
2012-12-20 09:56:28 -08:00
2010-08-31 13:41:50 -07:00
2013-06-19 15:14:10 -07:00
2013-06-19 15:14:10 -07:00
2013-07-02 13:34:31 -07:00
2013-05-01 17:05:52 -07:00
2013-01-23 16:33:29 -08:00
2013-02-12 10:27:39 -08:00
2010-09-17 16:24:15 -07:00