[Devel] [PATCH 3/8] Revert "ploop: Remove now unused PLOOP_REQ_DISCARD branches"
Kirill Tkhai
ktkhai at virtuozzo.com
Tue May 21 13:36:01 MSK 2019
This reverts commit 638a5c99f1897b406d5f0e7d802b601989f731b0.
Signed-off-by: Kirill Tkhai <ktkhai at virtuozzo.com>
---
drivers/block/ploop/dev.c | 14 +++++++++++++-
drivers/block/ploop/events.h | 3 ++-
drivers/block/ploop/fmt_ploop1.c | 4 +++-
include/linux/ploop/ploop.h | 5 +++++
4 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/drivers/block/ploop/dev.c b/drivers/block/ploop/dev.c
index e9501f45da0c..e9239f26e5cd 100644
--- a/drivers/block/ploop/dev.c
+++ b/drivers/block/ploop/dev.c
@@ -791,6 +791,9 @@ process_discard_bio_queue(struct ploop_device * plo, struct list_head *drop_list
if (tmp == NULL)
break;
+ /* If PLOOP_S_DISCARD isn't set, ploop_bio_queue
+ * will complete it with a proper error.
+ */
ploop_bio_queue(plo, tmp, drop_list, 0);
}
}
@@ -1770,7 +1773,8 @@ static inline bool preq_is_special(struct ploop_request * preq)
return state & (PLOOP_REQ_MERGE_FL |
PLOOP_REQ_RELOC_A_FL |
PLOOP_REQ_RELOC_S_FL |
- PLOOP_REQ_RELOC_N_FL);
+ PLOOP_REQ_RELOC_N_FL |
+ PLOOP_REQ_DISCARD_FL);
}
void ploop_add_req_to_fsync_queue(struct ploop_request * preq)
@@ -1801,6 +1805,9 @@ static bool ploop_can_issue_discard(struct ploop_device *plo,
if (!native_discard_support)
return false;
+ if (test_bit(PLOOP_REQ_DISCARD, &preq->state))
+ return true;
+
if (test_bit(PLOOP_S_NO_FALLOC_DISCARD, &plo->state))
return false;
@@ -2712,6 +2719,11 @@ static int ploop_thread(void * data)
plo->active_reqs++;
ploop_entry_qlen_dec(preq);
+ if (test_bit(PLOOP_REQ_DISCARD, &preq->state)) {
+ BUG_ON(plo->maintenance_type != PLOOP_MNTN_DISCARD);
+ atomic_inc(&plo->maintenance_cnt);
+ }
+
if (test_bit(PLOOP_REQ_SORTED, &preq->state)) {
rb_erase(&preq->lockout_link, req_entry_tree(plo, preq->req_rw));
__clear_bit(PLOOP_REQ_SORTED, &preq->state);
diff --git a/drivers/block/ploop/events.h b/drivers/block/ploop/events.h
index 57f72e6b3b80..2db09d9ac34b 100644
--- a/drivers/block/ploop/events.h
+++ b/drivers/block/ploop/events.h
@@ -43,7 +43,8 @@
{ 1 << PLOOP_REQ_MERGE, "M"}, \
{ 1 << PLOOP_REQ_RELOC_A, "RA"}, \
{ 1 << PLOOP_REQ_RELOC_S, "RS"}, \
- { 1 << PLOOP_REQ_RELOC_N, "RN"})
+ { 1 << PLOOP_REQ_RELOC_N, "RN"}, \
+ { 1 << PLOOP_REQ_DISCARD, "D"})
#define PREQ_FORMAT "preq=0x%p cluster=0x%x iblock=0x%x size=0x%x eng_state=0x%lx state=%s rw=%s"
diff --git a/drivers/block/ploop/fmt_ploop1.c b/drivers/block/ploop/fmt_ploop1.c
index a09a52c651ea..2ae22179c9c5 100644
--- a/drivers/block/ploop/fmt_ploop1.c
+++ b/drivers/block/ploop/fmt_ploop1.c
@@ -356,8 +356,10 @@ ploop1_allocate(struct ploop_delta * delta, struct ploop_request * preq,
static void
ploop1_allocate_complete(struct ploop_delta * delta, struct ploop_request * preq)
{
- if (preq->req_rw & REQ_DISCARD)
+ if ((preq->req_rw & REQ_DISCARD) &&
+ !test_bit(PLOOP_REQ_DISCARD, &preq->state)) {
preq->iblock = 0;
+ }
ploop_index_update(preq);
}
diff --git a/include/linux/ploop/ploop.h b/include/linux/ploop/ploop.h
index 4beaa8a9f5d1..942433cc2ce8 100644
--- a/include/linux/ploop/ploop.h
+++ b/include/linux/ploop/ploop.h
@@ -53,6 +53,9 @@ enum {
* consumed by userspace yet */
PLOOP_S_CONGESTED, /* Too many bios submitted to us */
PLOOP_S_NO_FALLOC_DISCARD, /* FIXME: Remove this: Unable to handle discard requests by fallocate */
+ PLOOP_S_DISCARD, /* Obsolete: ploop is ready to handle discard request */
+ PLOOP_S_DISCARD_LOADED, /* Obsolete: A discard request was handled and
+ free blocks loaded */
PLOOP_S_LOCKED, /* ploop is locked by userspace
(for minor mgmt only) */
PLOOP_S_ONCE, /* An event (e.g. printk once) happened */
@@ -488,6 +491,7 @@ enum
PLOOP_REQ_RELOC_A, /* 'A' stands for allocate() */
PLOOP_REQ_RELOC_S, /* Obsolete: 'S' stands for submit() */
PLOOP_REQ_RELOC_N, /* 'N' stands for "nullify" */
+ PLOOP_REQ_DISCARD, /* Obsolete */
PLOOP_REQ_RSYNC,
PLOOP_REQ_KAIO_FSYNC, /*force image fsync by KAIO module */
PLOOP_REQ_POST_SUBMIT, /* preq needs post_submit processing */
@@ -501,6 +505,7 @@ enum
#define PLOOP_REQ_RELOC_A_FL (1 << PLOOP_REQ_RELOC_A)
#define PLOOP_REQ_RELOC_S_FL (1 << PLOOP_REQ_RELOC_S) /* Obsolete */
#define PLOOP_REQ_RELOC_N_FL (1 << PLOOP_REQ_RELOC_N)
+#define PLOOP_REQ_DISCARD_FL (1 << PLOOP_REQ_DISCARD) /* Obsolete */
enum
{
More information about the Devel
mailing list