Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8154d296 authored by Hans Holmberg's avatar Hans Holmberg Committed by Jens Axboe
Browse files

lightnvm: pblk: rename sync_point to flush_point



Sync point is a really confusing name for keeping track of
the last entry that needs to be flushed so change the name
to to flush_point instead.

Signed-off-by: default avatarHans Holmberg <hans.holmberg@cnexlabs.com>
Signed-off-by: default avatarJavier González <javier@cnexlabs.com>
Signed-off-by: default avatarMatias Bjørling <m@bjorling.me>
Signed-off-by: default avatarJens Axboe <axboe@kernel.dk>
parent 06bc072b
Loading
Loading
Loading
Loading
+31 −30
Original line number Original line Diff line number Diff line
@@ -54,7 +54,7 @@ int pblk_rb_init(struct pblk_rb *rb, struct pblk_rb_entry *rb_entry_base,
	rb->seg_size = (1 << power_seg_sz);
	rb->seg_size = (1 << power_seg_sz);
	rb->nr_entries = (1 << power_size);
	rb->nr_entries = (1 << power_size);
	rb->mem = rb->subm = rb->sync = rb->l2p_update = 0;
	rb->mem = rb->subm = rb->sync = rb->l2p_update = 0;
	rb->sync_point = EMPTY_ENTRY;
	rb->flush_point = EMPTY_ENTRY;


	spin_lock_init(&rb->w_lock);
	spin_lock_init(&rb->w_lock);
	spin_lock_init(&rb->s_lock);
	spin_lock_init(&rb->s_lock);
@@ -112,7 +112,7 @@ int pblk_rb_init(struct pblk_rb *rb, struct pblk_rb_entry *rb_entry_base,
	up_write(&pblk_rb_lock);
	up_write(&pblk_rb_lock);


#ifdef CONFIG_NVM_DEBUG
#ifdef CONFIG_NVM_DEBUG
	atomic_set(&rb->inflight_sync_point, 0);
	atomic_set(&rb->inflight_flush_point, 0);
#endif
#endif


	/*
	/*
@@ -349,26 +349,26 @@ void pblk_rb_write_entry_gc(struct pblk_rb *rb, void *data,
	smp_store_release(&entry->w_ctx.flags, flags);
	smp_store_release(&entry->w_ctx.flags, flags);
}
}


static int pblk_rb_sync_point_set(struct pblk_rb *rb, struct bio *bio,
static int pblk_rb_flush_point_set(struct pblk_rb *rb, struct bio *bio,
				  unsigned int pos)
				  unsigned int pos)
{
{
	struct pblk_rb_entry *entry;
	struct pblk_rb_entry *entry;
	unsigned int subm, sync_point;
	unsigned int subm, flush_point;


	subm = READ_ONCE(rb->subm);
	subm = READ_ONCE(rb->subm);


#ifdef CONFIG_NVM_DEBUG
#ifdef CONFIG_NVM_DEBUG
	atomic_inc(&rb->inflight_sync_point);
	atomic_inc(&rb->inflight_flush_point);
#endif
#endif


	if (pos == subm)
	if (pos == subm)
		return 0;
		return 0;


	sync_point = (pos == 0) ? (rb->nr_entries - 1) : (pos - 1);
	flush_point = (pos == 0) ? (rb->nr_entries - 1) : (pos - 1);
	entry = &rb->entries[sync_point];
	entry = &rb->entries[flush_point];


	/* Protect syncs */
	/* Protect flush points */
	smp_store_release(&rb->sync_point, sync_point);
	smp_store_release(&rb->flush_point, flush_point);


	if (!bio)
	if (!bio)
		return 0;
		return 0;
@@ -416,7 +416,7 @@ void pblk_rb_flush(struct pblk_rb *rb)
	struct pblk *pblk = container_of(rb, struct pblk, rwb);
	struct pblk *pblk = container_of(rb, struct pblk, rwb);
	unsigned int mem = READ_ONCE(rb->mem);
	unsigned int mem = READ_ONCE(rb->mem);


	if (pblk_rb_sync_point_set(rb, NULL, mem))
	if (pblk_rb_flush_point_set(rb, NULL, mem))
		return;
		return;


	pblk_write_should_kick(pblk);
	pblk_write_should_kick(pblk);
@@ -440,7 +440,7 @@ static int pblk_rb_may_write_flush(struct pblk_rb *rb, unsigned int nr_entries,
#ifdef CONFIG_NVM_DEBUG
#ifdef CONFIG_NVM_DEBUG
		atomic_long_inc(&pblk->nr_flush);
		atomic_long_inc(&pblk->nr_flush);
#endif
#endif
		if (pblk_rb_sync_point_set(&pblk->rwb, bio, mem))
		if (pblk_rb_flush_point_set(&pblk->rwb, bio, mem))
			*io_ret = NVM_IO_OK;
			*io_ret = NVM_IO_OK;
	}
	}


@@ -607,17 +607,18 @@ unsigned int pblk_rb_read_to_bio(struct pblk_rb *rb, struct nvm_rq *rqd,
		}
		}


		if (flags & PBLK_FLUSH_ENTRY) {
		if (flags & PBLK_FLUSH_ENTRY) {
			unsigned int sync_point;
			unsigned int flush_point;


			sync_point = READ_ONCE(rb->sync_point);
			flush_point = READ_ONCE(rb->flush_point);
			if (sync_point == pos) {
			if (flush_point == pos) {
				/* Protect syncs */
				/* Protect flush points */
				smp_store_release(&rb->sync_point, EMPTY_ENTRY);
				smp_store_release(&rb->flush_point,
							EMPTY_ENTRY);
			}
			}


			flags &= ~PBLK_FLUSH_ENTRY;
			flags &= ~PBLK_FLUSH_ENTRY;
#ifdef CONFIG_NVM_DEBUG
#ifdef CONFIG_NVM_DEBUG
			atomic_dec(&rb->inflight_sync_point);
			atomic_dec(&rb->inflight_flush_point);
#endif
#endif
		}
		}


@@ -746,20 +747,20 @@ unsigned int pblk_rb_sync_advance(struct pblk_rb *rb, unsigned int nr_entries)
	return sync;
	return sync;
}
}


unsigned int pblk_rb_sync_point_count(struct pblk_rb *rb)
unsigned int pblk_rb_flush_point_count(struct pblk_rb *rb)
{
{
	unsigned int subm, sync_point;
	unsigned int subm, flush_point;
	unsigned int count;
	unsigned int count;


	/* Protect syncs */
	/* Protect flush points */
	sync_point = smp_load_acquire(&rb->sync_point);
	flush_point = smp_load_acquire(&rb->flush_point);
	if (sync_point == EMPTY_ENTRY)
	if (flush_point == EMPTY_ENTRY)
		return 0;
		return 0;


	subm = READ_ONCE(rb->subm);
	subm = READ_ONCE(rb->subm);


	/* The sync point itself counts as a sector to sync */
	/* The sync point itself counts as a sector to sync */
	count = pblk_rb_ring_count(sync_point, subm, rb->nr_entries) + 1;
	count = pblk_rb_ring_count(flush_point, subm, rb->nr_entries) + 1;


	return count;
	return count;
}
}
@@ -801,7 +802,7 @@ int pblk_rb_tear_down_check(struct pblk_rb *rb)


	if ((rb->mem == rb->subm) && (rb->subm == rb->sync) &&
	if ((rb->mem == rb->subm) && (rb->subm == rb->sync) &&
				(rb->sync == rb->l2p_update) &&
				(rb->sync == rb->l2p_update) &&
				(rb->sync_point == EMPTY_ENTRY)) {
				(rb->flush_point == EMPTY_ENTRY)) {
		goto out;
		goto out;
	}
	}


@@ -848,7 +849,7 @@ ssize_t pblk_rb_sysfs(struct pblk_rb *rb, char *buf)
		queued_entries++;
		queued_entries++;
	spin_unlock_irq(&rb->s_lock);
	spin_unlock_irq(&rb->s_lock);


	if (rb->sync_point != EMPTY_ENTRY)
	if (rb->flush_point != EMPTY_ENTRY)
		offset = scnprintf(buf, PAGE_SIZE,
		offset = scnprintf(buf, PAGE_SIZE,
			"%u\t%u\t%u\t%u\t%u\t%u\t%u - %u/%u/%u - %d\n",
			"%u\t%u\t%u\t%u\t%u\t%u\t%u - %u/%u/%u - %d\n",
			rb->nr_entries,
			rb->nr_entries,
@@ -857,14 +858,14 @@ ssize_t pblk_rb_sysfs(struct pblk_rb *rb, char *buf)
			rb->sync,
			rb->sync,
			rb->l2p_update,
			rb->l2p_update,
#ifdef CONFIG_NVM_DEBUG
#ifdef CONFIG_NVM_DEBUG
			atomic_read(&rb->inflight_sync_point),
			atomic_read(&rb->inflight_flush_point),
#else
#else
			0,
			0,
#endif
#endif
			rb->sync_point,
			rb->flush_point,
			pblk_rb_read_count(rb),
			pblk_rb_read_count(rb),
			pblk_rb_space(rb),
			pblk_rb_space(rb),
			pblk_rb_sync_point_count(rb),
			pblk_rb_flush_point_count(rb),
			queued_entries);
			queued_entries);
	else
	else
		offset = scnprintf(buf, PAGE_SIZE,
		offset = scnprintf(buf, PAGE_SIZE,
@@ -875,13 +876,13 @@ ssize_t pblk_rb_sysfs(struct pblk_rb *rb, char *buf)
			rb->sync,
			rb->sync,
			rb->l2p_update,
			rb->l2p_update,
#ifdef CONFIG_NVM_DEBUG
#ifdef CONFIG_NVM_DEBUG
			atomic_read(&rb->inflight_sync_point),
			atomic_read(&rb->inflight_flush_point),
#else
#else
			0,
			0,
#endif
#endif
			pblk_rb_read_count(rb),
			pblk_rb_read_count(rb),
			pblk_rb_space(rb),
			pblk_rb_space(rb),
			pblk_rb_sync_point_count(rb),
			pblk_rb_flush_point_count(rb),
			queued_entries);
			queued_entries);


	return offset;
	return offset;
+1 −1
Original line number Original line Diff line number Diff line
@@ -508,7 +508,7 @@ static int pblk_submit_write(struct pblk *pblk)
	if (!secs_avail)
	if (!secs_avail)
		return 1;
		return 1;


	secs_to_flush = pblk_rb_sync_point_count(&pblk->rwb);
	secs_to_flush = pblk_rb_flush_point_count(&pblk->rwb);
	if (!secs_to_flush && secs_avail < pblk->min_write_pgs)
	if (!secs_to_flush && secs_avail < pblk->min_write_pgs)
		return 1;
		return 1;


+3 −3
Original line number Original line Diff line number Diff line
@@ -166,7 +166,7 @@ struct pblk_rb {
					 * the last submitted entry that has
					 * the last submitted entry that has
					 * been successfully persisted to media
					 * been successfully persisted to media
					 */
					 */
	unsigned int sync_point;	/* Sync point - last entry that must be
	unsigned int flush_point;	/* Sync point - last entry that must be
					 * flushed to the media. Used with
					 * flushed to the media. Used with
					 * REQ_FLUSH and REQ_FUA
					 * REQ_FLUSH and REQ_FUA
					 */
					 */
@@ -189,7 +189,7 @@ struct pblk_rb {
	spinlock_t s_lock;		/* Sync lock */
	spinlock_t s_lock;		/* Sync lock */


#ifdef CONFIG_NVM_DEBUG
#ifdef CONFIG_NVM_DEBUG
	atomic_t inflight_sync_point;	/* Not served REQ_FLUSH | REQ_FUA */
	atomic_t inflight_flush_point;	/* Not served REQ_FLUSH | REQ_FUA */
#endif
#endif
};
};


@@ -687,7 +687,7 @@ unsigned int pblk_rb_sync_advance(struct pblk_rb *rb, unsigned int nr_entries);
struct pblk_rb_entry *pblk_rb_sync_scan_entry(struct pblk_rb *rb,
struct pblk_rb_entry *pblk_rb_sync_scan_entry(struct pblk_rb *rb,
					      struct ppa_addr *ppa);
					      struct ppa_addr *ppa);
void pblk_rb_sync_end(struct pblk_rb *rb, unsigned long *flags);
void pblk_rb_sync_end(struct pblk_rb *rb, unsigned long *flags);
unsigned int pblk_rb_sync_point_count(struct pblk_rb *rb);
unsigned int pblk_rb_flush_point_count(struct pblk_rb *rb);


unsigned int pblk_rb_read_count(struct pblk_rb *rb);
unsigned int pblk_rb_read_count(struct pblk_rb *rb);
unsigned int pblk_rb_sync_count(struct pblk_rb *rb);
unsigned int pblk_rb_sync_count(struct pblk_rb *rb);