mirror of
https://github.com/torvalds/linux.git
synced 2026-05-13 00:28:54 +02:00
xfs: start gc on zonegc_low_space attribute updates
Start gc if the agressiveness of zone garbage collection is changed
by the user (if the file system is not read only).
Without this change, the new setting will not be taken into account
until the gc thread is woken up by e.g. a write.
Cc: stable@vger.kernel.org # v6.15
Fixes: 845abeb1f0 ("xfs: add tunable threshold parameter for triggering zone GC")
Signed-off-by: Hans Holmberg <hans.holmberg@wdc.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Damien Le Moal <dlemoal@kernel.org>
Signed-off-by: Carlos Maiolino <cem@kernel.org>
This commit is contained in:
parent
8166876aad
commit
181ea4e2de
|
|
@ -14,6 +14,7 @@
|
|||
#include "xfs_log_priv.h"
|
||||
#include "xfs_mount.h"
|
||||
#include "xfs_zones.h"
|
||||
#include "xfs_zone_alloc.h"
|
||||
|
||||
struct xfs_sysfs_attr {
|
||||
struct attribute attr;
|
||||
|
|
@ -724,6 +725,7 @@ zonegc_low_space_store(
|
|||
const char *buf,
|
||||
size_t count)
|
||||
{
|
||||
struct xfs_mount *mp = zoned_to_mp(kobj);
|
||||
int ret;
|
||||
unsigned int val;
|
||||
|
||||
|
|
@ -734,7 +736,10 @@ zonegc_low_space_store(
|
|||
if (val > 100)
|
||||
return -EINVAL;
|
||||
|
||||
zoned_to_mp(kobj)->m_zonegc_low_space = val;
|
||||
if (mp->m_zonegc_low_space != val) {
|
||||
mp->m_zonegc_low_space = val;
|
||||
xfs_zone_gc_wakeup(mp);
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,6 +51,7 @@ int xfs_mount_zones(struct xfs_mount *mp);
|
|||
void xfs_unmount_zones(struct xfs_mount *mp);
|
||||
void xfs_zone_gc_start(struct xfs_mount *mp);
|
||||
void xfs_zone_gc_stop(struct xfs_mount *mp);
|
||||
void xfs_zone_gc_wakeup(struct xfs_mount *mp);
|
||||
#else
|
||||
static inline int xfs_mount_zones(struct xfs_mount *mp)
|
||||
{
|
||||
|
|
@ -65,6 +66,9 @@ static inline void xfs_zone_gc_start(struct xfs_mount *mp)
|
|||
static inline void xfs_zone_gc_stop(struct xfs_mount *mp)
|
||||
{
|
||||
}
|
||||
static inline void xfs_zone_gc_wakeup(struct xfs_mount *mp)
|
||||
{
|
||||
}
|
||||
#endif /* CONFIG_XFS_RT */
|
||||
|
||||
#endif /* _XFS_ZONE_ALLOC_H */
|
||||
|
|
|
|||
|
|
@ -1171,6 +1171,23 @@ xfs_zone_gc_stop(
|
|||
kthread_park(mp->m_zone_info->zi_gc_thread);
|
||||
}
|
||||
|
||||
void
|
||||
xfs_zone_gc_wakeup(
|
||||
struct xfs_mount *mp)
|
||||
{
|
||||
struct super_block *sb = mp->m_super;
|
||||
|
||||
/*
|
||||
* If we are unmounting the file system we must not try to
|
||||
* wake gc as m_zone_info might have been freed already.
|
||||
*/
|
||||
if (down_read_trylock(&sb->s_umount)) {
|
||||
if (!xfs_is_readonly(mp))
|
||||
wake_up_process(mp->m_zone_info->zi_gc_thread);
|
||||
up_read(&sb->s_umount);
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
xfs_zone_gc_mount(
|
||||
struct xfs_mount *mp)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user