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

Commit dd918952 authored by Baokun Li's avatar Baokun Li Committed by Greg Kroah-Hartman
Browse files

quota: add new helper dquot_active()



[ Upstream commit 33bcfafc48cb186bc4bbcea247feaa396594229e ]

Add new helper function dquot_active() to make the code more concise.

Signed-off-by: default avatarBaokun Li <libaokun1@huawei.com>
Signed-off-by: default avatarJan Kara <jack@suse.cz>
Message-Id: <20230630110822.3881712-4-libaokun1@huawei.com>
Stable-dep-of: dabc8b207566 ("quota: fix dqput() to follow the guarantees dquot_srcu should provide")
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 88c0cdfe
Loading
Loading
Loading
Loading
+14 −9
Original line number Diff line number Diff line
@@ -336,6 +336,11 @@ static void wait_on_dquot(struct dquot *dquot)
	mutex_unlock(&dquot->dq_lock);
}

static inline int dquot_active(struct dquot *dquot)
{
	return test_bit(DQ_ACTIVE_B, &dquot->dq_flags);
}

static inline int dquot_dirty(struct dquot *dquot)
{
	return test_bit(DQ_MOD_B, &dquot->dq_flags);
@@ -351,14 +356,14 @@ int dquot_mark_dquot_dirty(struct dquot *dquot)
{
	int ret = 1;

	if (!test_bit(DQ_ACTIVE_B, &dquot->dq_flags))
	if (!dquot_active(dquot))
		return 0;

	if (sb_dqopt(dquot->dq_sb)->flags & DQUOT_NOLIST_DIRTY)
		return test_and_set_bit(DQ_MOD_B, &dquot->dq_flags);

	/* If quota is dirty already, we don't have to acquire dq_list_lock */
	if (test_bit(DQ_MOD_B, &dquot->dq_flags))
	if (dquot_dirty(dquot))
		return 1;

	spin_lock(&dq_list_lock);
@@ -438,7 +443,7 @@ int dquot_acquire(struct dquot *dquot)
	smp_mb__before_atomic();
	set_bit(DQ_READ_B, &dquot->dq_flags);
	/* Instantiate dquot if needed */
	if (!test_bit(DQ_ACTIVE_B, &dquot->dq_flags) && !dquot->dq_off) {
	if (!dquot_active(dquot) && !dquot->dq_off) {
		ret = dqopt->ops[dquot->dq_id.type]->commit_dqblk(dquot);
		/* Write the info if needed */
		if (info_dirty(&dqopt->info[dquot->dq_id.type])) {
@@ -477,7 +482,7 @@ int dquot_commit(struct dquot *dquot)
		goto out_lock;
	/* Inactive dquot can be only if there was error during read/init
	 * => we have better not writing it */
	if (test_bit(DQ_ACTIVE_B, &dquot->dq_flags))
	if (dquot_active(dquot))
		ret = dqopt->ops[dquot->dq_id.type]->commit_dqblk(dquot);
	else
		ret = -EIO;
@@ -588,7 +593,7 @@ int dquot_scan_active(struct super_block *sb,

	spin_lock(&dq_list_lock);
	list_for_each_entry(dquot, &inuse_list, dq_inuse) {
		if (!test_bit(DQ_ACTIVE_B, &dquot->dq_flags))
		if (!dquot_active(dquot))
			continue;
		if (dquot->dq_sb != sb)
			continue;
@@ -603,7 +608,7 @@ int dquot_scan_active(struct super_block *sb,
		 * outstanding call and recheck the DQ_ACTIVE_B after that.
		 */
		wait_on_dquot(dquot);
		if (test_bit(DQ_ACTIVE_B, &dquot->dq_flags)) {
		if (dquot_active(dquot)) {
			ret = fn(dquot, priv);
			if (ret < 0)
				goto out;
@@ -654,7 +659,7 @@ int dquot_writeback_dquots(struct super_block *sb, int type)
			dquot = list_first_entry(&dirty, struct dquot,
						 dq_dirty);

			WARN_ON(!test_bit(DQ_ACTIVE_B, &dquot->dq_flags));
			WARN_ON(!dquot_active(dquot));

			/* Now we have active dquot from which someone is
 			 * holding reference so we can safely just increase
@@ -791,7 +796,7 @@ void dqput(struct dquot *dquot)
		dquot_write_dquot(dquot);
		goto we_slept;
	}
	if (test_bit(DQ_ACTIVE_B, &dquot->dq_flags)) {
	if (dquot_active(dquot)) {
		spin_unlock(&dq_list_lock);
		dquot->dq_sb->dq_op->release_dquot(dquot);
		goto we_slept;
@@ -892,7 +897,7 @@ struct dquot *dqget(struct super_block *sb, struct kqid qid)
	 * already finished or it will be canceled due to dq_count > 1 test */
	wait_on_dquot(dquot);
	/* Read the dquot / allocate space in quota file */
	if (!test_bit(DQ_ACTIVE_B, &dquot->dq_flags)) {
	if (!dquot_active(dquot)) {
		int err;

		err = sb->dq_op->acquire_dquot(dquot);