Commit f92c7a16 authored by Mr NeilBrown's avatar Mr NeilBrown Committed by Oleg Drokin
Browse files

LU-12820 osc: remove 'transient' arg from osc_enter_cache_try

This arg is always '0', so remove it.
Consequently, OBD_BRW_NOCACHE is never set, and
cl_dirty_transit and obd_dirty_transit_pages
are never non-zero, so they can be removed as well.

Lustre-change: https://review.whamcloud.com/36319
Lustre-commit: 524deb6f

Patch also includes changes for atomic ops optimization
to keep in sync with master branch:

Lustre-change: https://review.whamcloud.com/33859
Lustre-commit: 8b364fbd

Signed-off-by: default avatarMikhail Pershin <mpershin@whamcloud.com>
Change-Id: Ia047affc33fb9277e6c28a8f6d7d088c385b51a8
Reviewed-on: https://review.whamcloud.com/39518

Tested-by: default avatarjenkins <devops@whamcloud.com>
Tested-by: default avatarMaloo <maloo@whamcloud.com>
Reviewed-by: default avatarOlaf Faaland-LLNL <faaland1@llnl.gov>
Reviewed-by: default avatarOleg Drokin <green@whamcloud.com>
parent 4142f058
......@@ -204,7 +204,6 @@ struct client_obd {
/* the grant values are protected by loi_list_lock below */
unsigned long cl_dirty_pages; /* all _dirty_ in pages */
unsigned long cl_dirty_max_pages; /* allowed w/o rpc */
unsigned long cl_dirty_transit; /* dirty synchronous */
unsigned long cl_avail_grant; /* bytes of credit for ost */
unsigned long cl_lost_grant; /* lost credits (trunc) */
/* grant consumed for dirty pages */
......
......@@ -68,7 +68,6 @@ extern int at_early_margin;
extern int at_extra;
extern unsigned long obd_max_dirty_pages;
extern atomic_long_t obd_dirty_pages;
extern atomic_long_t obd_dirty_transit_pages;
extern char obd_jobid_var[];
/* Some hash init argument constants */
......
......@@ -98,9 +98,6 @@ EXPORT_SYMBOL(at_early_margin);
int at_extra = 30;
EXPORT_SYMBOL(at_extra);
atomic_long_t obd_dirty_transit_pages;
EXPORT_SYMBOL(obd_dirty_transit_pages);
#ifdef CONFIG_PROC_FS
struct lprocfs_stats *obd_memory = NULL;
EXPORT_SYMBOL(obd_memory);
......
......@@ -1402,7 +1402,6 @@ static void osc_consume_write_grant(struct client_obd *cli,
{
assert_spin_locked(&cli->cl_loi_list_lock);
LASSERT(!(pga->flag & OBD_BRW_FROM_GRANT));
atomic_long_inc(&obd_dirty_pages);
cli->cl_dirty_pages++;
pga->flag |= OBD_BRW_FROM_GRANT;
CDEBUG(D_CACHE, "using %lu grant credits for brw %p page %p\n",
......@@ -1426,11 +1425,6 @@ static void osc_release_write_grant(struct client_obd *cli,
pga->flag &= ~OBD_BRW_FROM_GRANT;
atomic_long_dec(&obd_dirty_pages);
cli->cl_dirty_pages--;
if (pga->flag & OBD_BRW_NOCACHE) {
pga->flag &= ~OBD_BRW_NOCACHE;
atomic_long_dec(&obd_dirty_transit_pages);
cli->cl_dirty_transit--;
}
EXIT;
}
......@@ -1536,7 +1530,7 @@ static void osc_exit_cache(struct client_obd *cli, struct osc_async_page *oap)
*/
static int osc_enter_cache_try(struct client_obd *cli,
struct osc_async_page *oap,
int bytes, int transient)
int bytes)
{
int rc;
......@@ -1546,20 +1540,16 @@ static int osc_enter_cache_try(struct client_obd *cli,
if (rc < 0)
return 0;
if (cli->cl_dirty_pages < cli->cl_dirty_max_pages &&
1 + atomic_long_read(&obd_dirty_pages) <= obd_max_dirty_pages) {
osc_consume_write_grant(cli, &oap->oap_brw_page);
if (transient) {
cli->cl_dirty_transit++;
atomic_long_inc(&obd_dirty_transit_pages);
oap->oap_brw_flags |= OBD_BRW_NOCACHE;
if (cli->cl_dirty_pages < cli->cl_dirty_max_pages) {
if (atomic_long_add_return(1, &obd_dirty_pages) <=
obd_max_dirty_pages) {
osc_consume_write_grant(cli, &oap->oap_brw_page);
return 1;
}
rc = 1;
} else {
__osc_unreserve_grant(cli, bytes, bytes);
rc = 0;
atomic_long_dec(&obd_dirty_pages);
}
return rc;
__osc_unreserve_grant(cli, bytes, bytes);
return 0;
}
/* Following two inlines exist to pass code fragments
......@@ -1634,7 +1624,7 @@ static int osc_enter_cache(const struct lu_env *env, struct client_obd *cli,
*/
remain = wait_event_idle_exclusive_timeout_cmd(
cli->cl_cache_waiters,
(entered = osc_enter_cache_try(cli, oap, bytes, 0)) ||
(entered = osc_enter_cache_try(cli, oap, bytes)) ||
(cli->cl_dirty_pages == 0 && cli->cl_w_in_flight == 0),
timeout,
cli_unlock_and_unplug(env, cli, oap),
......@@ -2415,7 +2405,7 @@ int osc_queue_async_io(const struct lu_env *env, struct cl_io *io,
/* it doesn't need any grant to dirty this page */
spin_lock(&cli->cl_loi_list_lock);
rc = osc_enter_cache_try(cli, oap, grants, 0);
rc = osc_enter_cache_try(cli, oap, grants);
spin_unlock(&cli->cl_loi_list_lock);
if (rc == 0) { /* try failed */
grants = 0;
......
......@@ -651,21 +651,18 @@ static void osc_announce_cached(struct client_obd *cli, struct obdo *oa,
oa->o_dirty = cli->cl_dirty_grant;
else
oa->o_dirty = cli->cl_dirty_pages << PAGE_SHIFT;
if (unlikely(cli->cl_dirty_pages - cli->cl_dirty_transit >
cli->cl_dirty_max_pages)) {
CERROR("dirty %lu - %lu > dirty_max %lu\n",
cli->cl_dirty_pages, cli->cl_dirty_transit,
if (unlikely(cli->cl_dirty_pages > cli->cl_dirty_max_pages)) {
CERROR("dirty %lu > dirty_max %lu\n",
cli->cl_dirty_pages,
cli->cl_dirty_max_pages);
oa->o_undirty = 0;
} else if (unlikely(atomic_long_read(&obd_dirty_pages) -
atomic_long_read(&obd_dirty_transit_pages) >
} else if (unlikely(atomic_long_read(&obd_dirty_pages) >
(long)(obd_max_dirty_pages + 1))) {
/* The atomic_read() allowing the atomic_inc() are
* not covered by a lock thus they may safely race and trip
* this CERROR() unless we add in a small fudge factor (+1). */
CERROR("%s: dirty %ld - %ld > system dirty_max %ld\n",
CERROR("%s: dirty %ld > system dirty_max %ld\n",
cli_name(cli), atomic_long_read(&obd_dirty_pages),
atomic_long_read(&obd_dirty_transit_pages),
obd_max_dirty_pages);
oa->o_undirty = 0;
} else if (unlikely(cli->cl_dirty_max_pages - cli->cl_dirty_pages >
......@@ -1093,9 +1090,9 @@ static int check_write_rcs(struct ptlrpc_request *req,
static inline int can_merge_pages(struct brw_page *p1, struct brw_page *p2)
{
if (p1->flag != p2->flag) {
unsigned mask = ~(OBD_BRW_FROM_GRANT | OBD_BRW_NOCACHE |
OBD_BRW_SYNC | OBD_BRW_ASYNC |
OBD_BRW_NOQUOTA | OBD_BRW_SOFT_SYNC);
unsigned mask = ~(OBD_BRW_FROM_GRANT | OBD_BRW_SYNC |
OBD_BRW_ASYNC | OBD_BRW_NOQUOTA |
OBD_BRW_SOFT_SYNC);
/* warn if we try to combine flags that we don't know to be
* safe to combine */
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment