Commit a49d273e authored by Linus Torvalds's avatar Linus Torvalds
Browse files
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
parents ce9ecca0 fb95d536
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -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++;
+5 −4
Original line number Diff line number Diff line
@@ -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);
+2 −1
Original line number Diff line number Diff line
@@ -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)