FAILED: patch "[PATCH] ext4: clear lockdep subtype for quota files on quota off" failed to apply to 4.9-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.9-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
964edf66bf9ab70cb387b27946c0aef7b94c4d1bMon Sep 17 00:00:00 2001
From: Jan Kara <[email protected]>
Date: Sun, 21 May 2017 22:31:23 -0400
Subject: [PATCH] ext4: clear lockdep subtype for quota files on quota off
Quota files have special ranking of i_data_sem lock. We inform lockdep about it when turning on quotas however when turning quotas off, we don't clear the lockdep subclass from i_data_sem lock and thus when the inode gets later reused for a normal file or directory, lockdep gets confused and complains about possible deadlocks. Fix the problem by resetting lockdep subclass of i_data_sem on quota off.
fs/ext4/super.c +5 -9
@@ -848,14 +848,9 @@ static inline void ext4_quota_off_umount(struct super_block *sb) {int type; -if (ext4_has_feature_quota (sb)) { -dquot_disable (sb,-1 , -DQUOT_USAGE_ENABLED |DQUOT_LIMITS_ENABLED ); - }else { -/* Use our quota_off function to clear inode flags etc. */ -for (type =0 ; type <EXT4_MAXQUOTAS ; type++) -ext4_quota_off (sb, type); - } +/* Use our quota_off function to clear inode flags etc. */ +for (type =0 ; type <EXT4_MAXQUOTAS ; type++) +ext4_quota_off (sb, type); }#else static inline void ext4_quota_off_umount (struct super_block *sb)
@@ -5485,7 +5480,7 @@ static int ext4_quota_off(struct super_block *sb, int type) goto out; err =dquot_quota_off (sb, type); -if (err) +if (err ||ext4_has_feature_quota (sb)) goto out_put;inode_lock (inode);
@@ -5505,6 +5500,7 @@ static int ext4_quota_off(struct super_block *sb, int type) out_unlock:inode_unlock (inode); out_put: +lockdep_set_quota_inode (inode,I_DATA_SEM_NORMAL );iput (inode);return err; out: