gfs2 fixes

- Fix another freeze/thaw hang
 
 - Fix glock cache shrinking
 
 - Fix the quota=quiet mount option.
 -----BEGIN PGP SIGNATURE-----
 
 iQJIBAABCAAyFiEEJZs3krPW0xkhLMTc1b+f6wMTZToFAmUIXsEUHGFncnVlbmJh
 QHJlZGhhdC5jb20ACgkQ1b+f6wMTZToCqw/+NR9VEK014CCpa0sMn5VWUOr2GfdS
 hM/F2K8+0qqkGzqlfG6vZ1e24UCojQHyYcFT8D0rIep1ZMI0K+yh+5aI74YQEzOx
 qwjNbA7di/WLGMHUsGHGimJUsWoJGJYoFKcJL72EgHvVasskldC0qrg0T6EtaAyz
 A2kL11B85ZOOZqE8oqwn9DZeL+WEESGHkir396fexhPeM25KTGQwkEt3xjIsdMrb
 PQ5AfCzvqkbKxoNxO7ua0Dvq0IK5KjZV47oOCnMqtLPs9q7behOSohpOpbhO2xB5
 daHq9ZdShGbJ91Md1I1R9Jiu74uYD3+EMd9mt71cKai3dTYqq39mUuTy4pSl0i3o
 yWOofoqtcCWZolPJnOE/bLvUAOE/92myAwgYWo4ceg+MuKu5Amk5z0H6j2yph4P1
 DVkAe+1qKzon1Pf1ps/UvYkTBQPSFBFmds//lP0v75p19ke+gIzAl2VE07PxWPW3
 RKZxIlzBIqwGtlIW4oA1/9rkyiDLAmu9+kFDJMG7XL6a4sxrezM1zZncyoO0N/3o
 66oKs4ZirmD2kMQkhIsar/6SJim0w9nHmr0uYttwwXPWk8WtAOq0KUIA2kTIKC2u
 ywRh7Ge4SS7Wsv0VlT6bEuieRdm0eh4AHW1ODfMmglFN62Ob6lI+gy76wFvr9+Wj
 XDB0+uC3xpYlrQI=
 =jocw
 -----END PGP SIGNATURE-----

Merge tag 'gfs2-v6.6-rc1-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/gfs2/linux-gfs2

Pull gfs2 fixes from Andreas Gruenbacher:

 - Fix another freeze/thaw hang

 - Fix glock cache shrinking

 - Fix the quota=quiet mount option

* tag 'gfs2-v6.6-rc1-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/gfs2/linux-gfs2:
  gfs2: Fix quota=quiet oversight
  gfs2: fix glock shrinker ref issues
  gfs2: Fix another freeze/thaw hang
This commit is contained in:
Linus Torvalds 2023-09-18 11:59:38 -07:00
commit a49d273e57
3 changed files with 10 additions and 6 deletions

View file

@ -2010,7 +2010,9 @@ static long gfs2_scan_glock_lru(int nr)
if (!test_bit(GLF_LOCK, &gl->gl_flags)) {
if (!spin_trylock(&gl->gl_lockref.lock))
continue;
if (!gl->gl_lockref.count) {
if (gl->gl_lockref.count <= 1 &&
(gl->gl_state == LM_ST_UNLOCKED ||
demote_ok(gl))) {
list_move(&gl->gl_lru, &dispose);
atomic_dec(&lru_count);
freed++;

View file

@ -567,15 +567,16 @@ static void freeze_go_callback(struct gfs2_glock *gl, bool remote)
struct super_block *sb = sdp->sd_vfs;
if (!remote ||
gl->gl_state != LM_ST_SHARED ||
(gl->gl_state != LM_ST_SHARED &&
gl->gl_state != LM_ST_UNLOCKED) ||
gl->gl_demote_state != LM_ST_UNLOCKED)
return;
/*
* Try to get an active super block reference to prevent racing with
* unmount (see trylock_super()). But note that unmount isn't the only
* place where a write lock on s_umount is taken, and we can fail here
* because of things like remount as well.
* unmount (see super_trylock_shared()). But note that unmount isn't
* the only place where a write lock on s_umount is taken, and we can
* fail here because of things like remount as well.
*/
if (down_read_trylock(&sb->s_umount)) {
atomic_inc(&sb->s_active);

View file

@ -50,7 +50,8 @@ static inline int gfs2_quota_lock_check(struct gfs2_inode *ip,
ret = gfs2_quota_lock(ip, NO_UID_QUOTA_CHANGE, NO_GID_QUOTA_CHANGE);
if (ret)
return ret;
if (sdp->sd_args.ar_quota != GFS2_QUOTA_ON)
if (sdp->sd_args.ar_quota != GFS2_QUOTA_ON &&
sdp->sd_args.ar_quota != GFS2_QUOTA_QUIET)
return 0;
ret = gfs2_quota_check(ip, ip->i_inode.i_uid, ip->i_inode.i_gid, ap);
if (ret)