From: green at linuxhacker.ru <green@linuxhacker.ru>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
devel@driverdev.osuosl.org,
Andreas Dilger <andreas.dilger@intel.com>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Lustre Development List <lustre-devel@lists.lustre.org>,
Oleg Drokin <green@linuxhacker.ru>
Subject: [lustre-devel] [PATCH 11/45] staging/lustre/osc: Remove commented out osc_page_protected()
Date: Tue, 16 Feb 2016 00:46:43 -0500 [thread overview]
Message-ID: <1455601637-3847710-12-git-send-email-green@linuxhacker.ru> (raw)
In-Reply-To: <1455601637-3847710-1-git-send-email-green@linuxhacker.ru>
From: Oleg Drokin <green@linuxhacker.ru>
The complicated version of osc_page_protected and osc_page_is_dlocked
are unsafe and were commented out for ages, so probably no point in
carrying them on.
Signed-off-by: Oleg Drokin <green@linuxhacker.ru>
---
drivers/staging/lustre/lustre/osc/osc_page.c | 99 ----------------------------
1 file changed, 99 deletions(-)
diff --git a/drivers/staging/lustre/lustre/osc/osc_page.c b/drivers/staging/lustre/lustre/osc/osc_page.c
index 8943f0a..99d5b56 100644
--- a/drivers/staging/lustre/lustre/osc/osc_page.c
+++ b/drivers/staging/lustre/lustre/osc/osc_page.c
@@ -51,111 +51,12 @@ static int osc_lru_reserve(const struct lu_env *env, struct osc_object *obj,
* @{
*/
-/*
- * Comment out osc_page_protected because it may sleep inside the
- * the client_obd_list_lock.
- * client_obd_list_lock -> osc_ap_completion -> osc_completion ->
- * -> osc_page_protected -> osc_page_is_dlocked -> osc_match_base
- * -> ldlm_lock_match -> sptlrpc_import_check_ctx -> sleep.
- */
-#if 0
-static int osc_page_is_dlocked(const struct lu_env *env,
- const struct osc_page *opg,
- enum cl_lock_mode mode, int pending, int unref)
-{
- struct cl_page *page;
- struct osc_object *obj;
- struct osc_thread_info *info;
- struct ldlm_res_id *resname;
- struct lustre_handle *lockh;
- ldlm_policy_data_t *policy;
- ldlm_mode_t dlmmode;
- __u64 flags;
-
- might_sleep();
-
- info = osc_env_info(env);
- resname = &info->oti_resname;
- policy = &info->oti_policy;
- lockh = &info->oti_handle;
- page = opg->ops_cl.cpl_page;
- obj = cl2osc(opg->ops_cl.cpl_obj);
-
- flags = LDLM_FL_TEST_LOCK | LDLM_FL_BLOCK_GRANTED;
- if (pending)
- flags |= LDLM_FL_CBPENDING;
-
- dlmmode = osc_cl_lock2ldlm(mode) | LCK_PW;
- osc_lock_build_res(env, obj, resname);
- osc_index2policy(policy, page->cp_obj, page->cp_index, page->cp_index);
- return osc_match_base(osc_export(obj), resname, LDLM_EXTENT, policy,
- dlmmode, &flags, NULL, lockh, unref);
-}
-
-/**
- * Checks an invariant that a page in the cache is covered by a lock, as
- * needed.
- */
-static int osc_page_protected(const struct lu_env *env,
- const struct osc_page *opg,
- enum cl_lock_mode mode, int unref)
-{
- struct cl_object_header *hdr;
- struct cl_lock *scan;
- struct cl_page *page;
- struct cl_lock_descr *descr;
- int result;
-
- LINVRNT(!opg->ops_temp);
-
- page = opg->ops_cl.cpl_page;
- if (page->cp_owner != NULL &&
- cl_io_top(page->cp_owner)->ci_lockreq == CILR_NEVER)
- /*
- * If IO is done without locks (liblustre, or lloop), lock is
- * not required.
- */
- result = 1;
- else
- /* otherwise check for a DLM lock */
- result = osc_page_is_dlocked(env, opg, mode, 1, unref);
- if (result == 0) {
- /* maybe this page is a part of a lockless io? */
- hdr = cl_object_header(opg->ops_cl.cpl_obj);
- descr = &osc_env_info(env)->oti_descr;
- descr->cld_mode = mode;
- descr->cld_start = page->cp_index;
- descr->cld_end = page->cp_index;
- spin_lock(&hdr->coh_lock_guard);
- list_for_each_entry(scan, &hdr->coh_locks, cll_linkage) {
- /*
- * Lock-less sub-lock has to be either in HELD state
- * (when io is actively going on), or in CACHED state,
- * when top-lock is being unlocked:
- * cl_io_unlock()->cl_unuse()->...->lov_lock_unuse().
- */
- if ((scan->cll_state == CLS_HELD ||
- scan->cll_state == CLS_CACHED) &&
- cl_lock_ext_match(&scan->cll_descr, descr)) {
- struct osc_lock *olck;
-
- olck = osc_lock_at(scan);
- result = osc_lock_is_lockless(olck);
- break;
- }
- }
- spin_unlock(&hdr->coh_lock_guard);
- }
- return result;
-}
-#else
static int osc_page_protected(const struct lu_env *env,
const struct osc_page *opg,
enum cl_lock_mode mode, int unref)
{
return 1;
}
-#endif
/*****************************************************************************
*
--
2.1.0
WARNING: multiple messages have this Message-ID (diff)
From: green@linuxhacker.ru
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
devel@driverdev.osuosl.org,
Andreas Dilger <andreas.dilger@intel.com>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
Lustre Development List <lustre-devel@lists.lustre.org>,
Oleg Drokin <green@linuxhacker.ru>
Subject: [PATCH 11/45] staging/lustre/osc: Remove commented out osc_page_protected()
Date: Tue, 16 Feb 2016 00:46:43 -0500 [thread overview]
Message-ID: <1455601637-3847710-12-git-send-email-green@linuxhacker.ru> (raw)
In-Reply-To: <1455601637-3847710-1-git-send-email-green@linuxhacker.ru>
From: Oleg Drokin <green@linuxhacker.ru>
The complicated version of osc_page_protected and osc_page_is_dlocked
are unsafe and were commented out for ages, so probably no point in
carrying them on.
Signed-off-by: Oleg Drokin <green@linuxhacker.ru>
---
drivers/staging/lustre/lustre/osc/osc_page.c | 99 ----------------------------
1 file changed, 99 deletions(-)
diff --git a/drivers/staging/lustre/lustre/osc/osc_page.c b/drivers/staging/lustre/lustre/osc/osc_page.c
index 8943f0a..99d5b56 100644
--- a/drivers/staging/lustre/lustre/osc/osc_page.c
+++ b/drivers/staging/lustre/lustre/osc/osc_page.c
@@ -51,111 +51,12 @@ static int osc_lru_reserve(const struct lu_env *env, struct osc_object *obj,
* @{
*/
-/*
- * Comment out osc_page_protected because it may sleep inside the
- * the client_obd_list_lock.
- * client_obd_list_lock -> osc_ap_completion -> osc_completion ->
- * -> osc_page_protected -> osc_page_is_dlocked -> osc_match_base
- * -> ldlm_lock_match -> sptlrpc_import_check_ctx -> sleep.
- */
-#if 0
-static int osc_page_is_dlocked(const struct lu_env *env,
- const struct osc_page *opg,
- enum cl_lock_mode mode, int pending, int unref)
-{
- struct cl_page *page;
- struct osc_object *obj;
- struct osc_thread_info *info;
- struct ldlm_res_id *resname;
- struct lustre_handle *lockh;
- ldlm_policy_data_t *policy;
- ldlm_mode_t dlmmode;
- __u64 flags;
-
- might_sleep();
-
- info = osc_env_info(env);
- resname = &info->oti_resname;
- policy = &info->oti_policy;
- lockh = &info->oti_handle;
- page = opg->ops_cl.cpl_page;
- obj = cl2osc(opg->ops_cl.cpl_obj);
-
- flags = LDLM_FL_TEST_LOCK | LDLM_FL_BLOCK_GRANTED;
- if (pending)
- flags |= LDLM_FL_CBPENDING;
-
- dlmmode = osc_cl_lock2ldlm(mode) | LCK_PW;
- osc_lock_build_res(env, obj, resname);
- osc_index2policy(policy, page->cp_obj, page->cp_index, page->cp_index);
- return osc_match_base(osc_export(obj), resname, LDLM_EXTENT, policy,
- dlmmode, &flags, NULL, lockh, unref);
-}
-
-/**
- * Checks an invariant that a page in the cache is covered by a lock, as
- * needed.
- */
-static int osc_page_protected(const struct lu_env *env,
- const struct osc_page *opg,
- enum cl_lock_mode mode, int unref)
-{
- struct cl_object_header *hdr;
- struct cl_lock *scan;
- struct cl_page *page;
- struct cl_lock_descr *descr;
- int result;
-
- LINVRNT(!opg->ops_temp);
-
- page = opg->ops_cl.cpl_page;
- if (page->cp_owner != NULL &&
- cl_io_top(page->cp_owner)->ci_lockreq == CILR_NEVER)
- /*
- * If IO is done without locks (liblustre, or lloop), lock is
- * not required.
- */
- result = 1;
- else
- /* otherwise check for a DLM lock */
- result = osc_page_is_dlocked(env, opg, mode, 1, unref);
- if (result == 0) {
- /* maybe this page is a part of a lockless io? */
- hdr = cl_object_header(opg->ops_cl.cpl_obj);
- descr = &osc_env_info(env)->oti_descr;
- descr->cld_mode = mode;
- descr->cld_start = page->cp_index;
- descr->cld_end = page->cp_index;
- spin_lock(&hdr->coh_lock_guard);
- list_for_each_entry(scan, &hdr->coh_locks, cll_linkage) {
- /*
- * Lock-less sub-lock has to be either in HELD state
- * (when io is actively going on), or in CACHED state,
- * when top-lock is being unlocked:
- * cl_io_unlock()->cl_unuse()->...->lov_lock_unuse().
- */
- if ((scan->cll_state == CLS_HELD ||
- scan->cll_state == CLS_CACHED) &&
- cl_lock_ext_match(&scan->cll_descr, descr)) {
- struct osc_lock *olck;
-
- olck = osc_lock_at(scan);
- result = osc_lock_is_lockless(olck);
- break;
- }
- }
- spin_unlock(&hdr->coh_lock_guard);
- }
- return result;
-}
-#else
static int osc_page_protected(const struct lu_env *env,
const struct osc_page *opg,
enum cl_lock_mode mode, int unref)
{
return 1;
}
-#endif
/*****************************************************************************
*
--
2.1.0
next prev parent reply other threads:[~2016-02-16 5:46 UTC|newest]
Thread overview: 98+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-16 5:46 [lustre-devel] [PATCH 00/45] Lustre cleanups green at linuxhacker.ru
2016-02-16 5:46 ` green
2016-02-16 5:46 ` [lustre-devel] [PATCH 01/45] staging/lustre/ptlrpc: Get rid of /proc references in comments green at linuxhacker.ru
2016-02-16 5:46 ` green
2016-02-16 5:46 ` [lustre-devel] [PATCH 02/45] staging/lustre/obdclass: " green at linuxhacker.ru
2016-02-16 5:46 ` green
2016-02-16 5:46 ` [lustre-devel] [PATCH 03/45] staging/lustre/libcfs: " green at linuxhacker.ru
2016-02-16 5:46 ` green
2016-02-16 5:46 ` [lustre-devel] [PATCH 04/45] staging/lustre/llite: " green at linuxhacker.ru
2016-02-16 5:46 ` green
2016-02-16 5:46 ` [lustre-devel] [PATCH 05/45] staging/lustre/lov: " green at linuxhacker.ru
2016-02-16 5:46 ` green
2016-02-16 5:46 ` [lustre-devel] [PATCH 06/45] staging/lustre: Remove unused function oti_init green at linuxhacker.ru
2016-02-16 5:46 ` green
2016-02-16 5:46 ` [lustre-devel] [PATCH 07/45] staging/lustre: Remove unused osc_on_mdt function green at linuxhacker.ru
2016-02-16 5:46 ` green
2016-02-16 5:46 ` [lustre-devel] [PATCH 08/45] staging/lustre: Remove server code from client_obd_setup() green at linuxhacker.ru
2016-02-16 5:46 ` green
2016-02-16 5:46 ` [lustre-devel] [PATCH 09/45] staging/lustre: Remove server code from class_get_type() green at linuxhacker.ru
2016-02-16 5:46 ` green
2016-02-16 5:46 ` [lustre-devel] [PATCH 10/45] staging/lustre: Remove commented out lock_lock_multi_match green at linuxhacker.ru
2016-02-16 5:46 ` green
2016-02-16 5:46 ` green at linuxhacker.ru [this message]
2016-02-16 5:46 ` [PATCH 11/45] staging/lustre/osc: Remove commented out osc_page_protected() green
2016-02-16 5:46 ` [lustre-devel] [PATCH 12/45] staging/lustre/libcfs: Adjust NULL comparison codestyle green at linuxhacker.ru
2016-02-16 5:46 ` green
2016-02-16 5:46 ` [lustre-devel] [PATCH 13/45] staging/lustre/lov: " green at linuxhacker.ru
2016-02-16 5:46 ` green
2016-02-16 5:46 ` [lustre-devel] [PATCH 14/45] staging/lustre/llite: " green at linuxhacker.ru
2016-02-16 5:46 ` green
2016-02-16 5:46 ` [lustre-devel] [PATCH 15/45] staging/lustre/ldlm: " green at linuxhacker.ru
2016-02-16 5:46 ` green
2016-02-16 5:46 ` [lustre-devel] [PATCH 16/45] staging/lustre/lmv: " green at linuxhacker.ru
2016-02-16 5:46 ` green
2016-02-16 5:46 ` [lustre-devel] [PATCH 17/45] staging/lustre/fid: " green at linuxhacker.ru
2016-02-16 5:46 ` green
2016-02-16 5:46 ` [lustre-devel] [PATCH 18/45] staging/lustre/fld: " green at linuxhacker.ru
2016-02-16 5:46 ` green
2016-02-16 5:46 ` [lustre-devel] [PATCH 19/45] staging/lustre/lclient: " green at linuxhacker.ru
2016-02-16 5:46 ` green
2016-02-16 5:46 ` [lustre-devel] [PATCH 20/45] staging/lustre/include: " green at linuxhacker.ru
2016-02-16 5:46 ` green
2016-02-16 5:46 ` [lustre-devel] [PATCH 21/45] staging/lustre/mdc: " green at linuxhacker.ru
2016-02-16 5:46 ` green
2016-02-16 5:46 ` [lustre-devel] [PATCH 22/45] staging/lustre/mgc: " green at linuxhacker.ru
2016-02-16 5:46 ` green
2016-02-16 5:46 ` [lustre-devel] [PATCH 23/45] staging/lustre/obdclass: " green at linuxhacker.ru
2016-02-16 5:46 ` green
2016-02-16 5:46 ` [lustre-devel] [PATCH 24/45] staging/lustre/obdecho: " green at linuxhacker.ru
2016-02-16 5:46 ` green
2016-02-16 5:46 ` [lustre-devel] [PATCH 25/45] staging/lustre/osc: " green at linuxhacker.ru
2016-02-16 5:46 ` green
2016-02-16 5:46 ` [lustre-devel] [PATCH 26/45] staging/lustre/ptlrpc: " green at linuxhacker.ru
2016-02-16 5:46 ` green
2016-02-16 5:46 ` [lustre-devel] [PATCH 27/45] staging/lustre: Remove the "write to FSF to get a copy of GPL" wording green at linuxhacker.ru
2016-02-16 5:46 ` green
2016-02-16 5:47 ` [lustre-devel] [PATCH 28/45] staging/lustre/libcfs: Cleanup: parenthesis alignment adjustments green at linuxhacker.ru
2016-02-16 5:47 ` green
2016-02-16 5:47 ` [lustre-devel] [PATCH 29/45] staging/lustre/libcfs: Move EXPORT_SYMBOLs under function/variable green at linuxhacker.ru
2016-02-16 5:47 ` green
2016-02-16 5:47 ` [lustre-devel] [PATCH 30/45] staging/lustre/libcfs: style change to add missing spaces for operations green at linuxhacker.ru
2016-02-16 5:47 ` green
2016-02-16 5:47 ` [lustre-devel] [PATCH 31/45] staging/lustre/libcfs: reformat cfs_tcd_for_each_type_lock define green at linuxhacker.ru
2016-02-16 5:47 ` green
2016-02-16 5:47 ` [lustre-devel] [PATCH 32/45] staging/lustre/libcfs: Remove stray spaces after function name green at linuxhacker.ru
2016-02-16 5:47 ` green
2016-02-16 5:47 ` [lustre-devel] [PATCH 33/45] staging/lustre/libcfs: Shortened too long lines green at linuxhacker.ru
2016-02-16 5:47 ` green
2016-02-16 5:47 ` [lustre-devel] [PATCH 34/45] staging/lustre/libcfs: Remove unused cfs_tcd_owns_tage() function green at linuxhacker.ru
2016-02-16 5:47 ` green
2016-02-16 5:47 ` [lustre-devel] [PATCH 35/45] staging/lustre/libcfs: Move private tracefile structs out of header green at linuxhacker.ru
2016-02-16 5:47 ` green
2016-02-16 5:47 ` [lustre-devel] [PATCH 36/45] staging/lustre/libcfs: Update comments style to match kernel green at linuxhacker.ru
2016-02-16 5:47 ` green
2016-02-16 5:47 ` [lustre-devel] [PATCH 37/45] staging/lustre/libcfs: Remove useless returns in void functions green at linuxhacker.ru
2016-02-16 5:47 ` green
2016-02-16 5:47 ` [lustre-devel] [PATCH 38/45] staging/lustre/libcfs: Remove empty lines after/before braces green at linuxhacker.ru
2016-02-16 5:47 ` green
2016-02-16 5:47 ` [lustre-devel] [PATCH 39/45] staging/lustre: Update cfs_cpu_notify switch statement with a comment green at linuxhacker.ru
2016-02-16 5:47 ` green
2016-02-16 5:47 ` [lustre-devel] [PATCH 40/45] staging/lustre: Get rid of cfs_trace_buf_type_t typedef green at linuxhacker.ru
2016-02-16 5:47 ` green
2016-02-16 5:47 ` [lustre-devel] [PATCH 41/45] staging/lustre/libcfs: Get rid of multiple assignments green at linuxhacker.ru
2016-02-16 5:47 ` green
2016-02-16 5:47 ` [lustre-devel] [PATCH 42/45] staging/lustre: Remove space after cast in cfs_crypto_hash_final() green at linuxhacker.ru
2016-02-16 5:47 ` green
2016-02-16 5:47 ` [lustre-devel] [PATCH 43/45] staging/lustre/libcfs: Replace use of printk with pr_<level> green at linuxhacker.ru
2016-02-16 5:47 ` green
2016-02-16 5:55 ` [lustre-devel] " Joe Perches
2016-02-16 5:55 ` Joe Perches
2016-02-16 16:12 ` [lustre-devel] " Oleg Drokin
2016-02-16 16:12 ` Oleg Drokin
2016-02-20 22:34 ` [lustre-devel] " Greg Kroah-Hartman
2016-02-20 22:34 ` Greg Kroah-Hartman
2016-02-16 5:47 ` [lustre-devel] [PATCH 44/45] staging/lustre: Convert cfs_trace_daemon_command to use kstrtoul green at linuxhacker.ru
2016-02-16 5:47 ` green
2016-02-16 5:47 ` [lustre-devel] [PATCH 45/45] staging/lustre: Convert cfs_str2num_check " green at linuxhacker.ru
2016-02-16 5:47 ` green
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1455601637-3847710-12-git-send-email-green@linuxhacker.ru \
--to=green@linuxhacker.ru \
--cc=andreas.dilger@intel.com \
--cc=devel@driverdev.osuosl.org \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lustre-devel@lists.lustre.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.