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

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

quota: factor out dquot_write_dquot()



[ Upstream commit 024128477809f8073d870307c8157b8826ebfd08 ]

Refactor out dquot_write_dquot() to reduce duplicate code.

Signed-off-by: default avatarBaokun Li <libaokun1@huawei.com>
Signed-off-by: default avatarJan Kara <jack@suse.cz>
Message-Id: <20230630110822.3881712-2-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 f2f64c29
Loading
Loading
Loading
Loading
+16 −23
Original line number Diff line number Diff line
@@ -619,6 +619,18 @@ int dquot_scan_active(struct super_block *sb,
}
EXPORT_SYMBOL(dquot_scan_active);

static inline int dquot_write_dquot(struct dquot *dquot)
{
	int ret = dquot->dq_sb->dq_op->write_dquot(dquot);
	if (ret < 0) {
		quota_error(dquot->dq_sb, "Can't write quota structure "
			    "(error %d). Quota may get out of sync!", ret);
		/* Clear dirty bit anyway to avoid infinite loop. */
		clear_dquot_dirty(dquot);
	}
	return ret;
}

/* Write all dquot structures to quota files */
int dquot_writeback_dquots(struct super_block *sb, int type)
{
@@ -649,16 +661,9 @@ int dquot_writeback_dquots(struct super_block *sb, int type)
			 * use count */
			dqgrab(dquot);
			spin_unlock(&dq_list_lock);
			err = sb->dq_op->write_dquot(dquot);
			if (err) {
				/*
				 * Clear dirty bit anyway to avoid infinite
				 * loop here.
				 */
				clear_dquot_dirty(dquot);
				if (!ret)
			err = dquot_write_dquot(dquot);
			if (err && !ret)
				ret = err;
			}
			dqput(dquot);
			spin_lock(&dq_list_lock);
		}
@@ -756,8 +761,6 @@ static struct shrinker dqcache_shrinker = {
 */
void dqput(struct dquot *dquot)
{
	int ret;

	if (!dquot)
		return;
#ifdef CONFIG_QUOTA_DEBUG
@@ -785,17 +788,7 @@ void dqput(struct dquot *dquot)
	if (dquot_dirty(dquot)) {
		spin_unlock(&dq_list_lock);
		/* Commit dquot before releasing */
		ret = dquot->dq_sb->dq_op->write_dquot(dquot);
		if (ret < 0) {
			quota_error(dquot->dq_sb, "Can't write quota structure"
				    " (error %d). Quota may get out of sync!",
				    ret);
			/*
			 * We clear dirty bit anyway, so that we avoid
			 * infinite loop here
			 */
			clear_dquot_dirty(dquot);
		}
		dquot_write_dquot(dquot);
		goto we_slept;
	}
	if (test_bit(DQ_ACTIVE_B, &dquot->dq_flags)) {