|
@@ -537,7 +537,6 @@ long osc_lru_shrink(const struct lu_env *env, struct client_obd *cli,
|
|
struct cl_object *clobj = NULL;
|
|
struct cl_object *clobj = NULL;
|
|
struct cl_page **pvec;
|
|
struct cl_page **pvec;
|
|
struct osc_page *opg;
|
|
struct osc_page *opg;
|
|
- struct osc_page *temp;
|
|
|
|
int maxscan = 0;
|
|
int maxscan = 0;
|
|
long count = 0;
|
|
long count = 0;
|
|
int index = 0;
|
|
int index = 0;
|
|
@@ -568,7 +567,7 @@ long osc_lru_shrink(const struct lu_env *env, struct client_obd *cli,
|
|
if (force)
|
|
if (force)
|
|
cli->cl_lru_reclaim++;
|
|
cli->cl_lru_reclaim++;
|
|
maxscan = min(target << 1, atomic_long_read(&cli->cl_lru_in_list));
|
|
maxscan = min(target << 1, atomic_long_read(&cli->cl_lru_in_list));
|
|
- list_for_each_entry_safe(opg, temp, &cli->cl_lru_list, ops_lru) {
|
|
|
|
|
|
+ while (!list_empty(&cli->cl_lru_list)) {
|
|
struct cl_page *page;
|
|
struct cl_page *page;
|
|
bool will_free = false;
|
|
bool will_free = false;
|
|
|
|
|
|
@@ -578,6 +577,8 @@ long osc_lru_shrink(const struct lu_env *env, struct client_obd *cli,
|
|
if (--maxscan < 0)
|
|
if (--maxscan < 0)
|
|
break;
|
|
break;
|
|
|
|
|
|
|
|
+ opg = list_entry(cli->cl_lru_list.next, struct osc_page,
|
|
|
|
+ ops_lru);
|
|
page = opg->ops_cl.cpl_page;
|
|
page = opg->ops_cl.cpl_page;
|
|
if (lru_page_busy(cli, page)) {
|
|
if (lru_page_busy(cli, page)) {
|
|
list_move_tail(&opg->ops_lru, &cli->cl_lru_list);
|
|
list_move_tail(&opg->ops_lru, &cli->cl_lru_list);
|