Merge tag 'staging-5.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh...
[linux-2.6-microblaze.git] / fs / fs-writeback.c
index 6219310..06d04a7 100644 (file)
@@ -567,9 +567,14 @@ static void inode_switch_wbs(struct inode *inode, int new_wb_id)
        /* find and pin the new wb */
        rcu_read_lock();
        memcg_css = css_from_id(new_wb_id, &memory_cgrp_subsys);
-       if (memcg_css)
-               isw->new_wb = wb_get_create(bdi, memcg_css, GFP_ATOMIC);
+       if (memcg_css && !css_tryget(memcg_css))
+               memcg_css = NULL;
        rcu_read_unlock();
+       if (!memcg_css)
+               goto out_free;
+
+       isw->new_wb = wb_get_create(bdi, memcg_css, GFP_ATOMIC);
+       css_put(memcg_css);
        if (!isw->new_wb)
                goto out_free;
 
@@ -2343,28 +2348,6 @@ int dirtytime_interval_handler(struct ctl_table *table, int write,
        return ret;
 }
 
-static noinline void block_dump___mark_inode_dirty(struct inode *inode)
-{
-       if (inode->i_ino || strcmp(inode->i_sb->s_id, "bdev")) {
-               struct dentry *dentry;
-               const char *name = "?";
-
-               dentry = d_find_alias(inode);
-               if (dentry) {
-                       spin_lock(&dentry->d_lock);
-                       name = (const char *) dentry->d_name.name;
-               }
-               printk(KERN_DEBUG
-                      "%s(%d): dirtied inode %lu (%s) on %s\n",
-                      current->comm, task_pid_nr(current), inode->i_ino,
-                      name, inode->i_sb->s_id);
-               if (dentry) {
-                       spin_unlock(&dentry->d_lock);
-                       dput(dentry);
-               }
-       }
-}
-
 /**
  * __mark_inode_dirty -        internal function to mark an inode dirty
  *
@@ -2434,9 +2417,6 @@ void __mark_inode_dirty(struct inode *inode, int flags)
            (dirtytime && (inode->i_state & I_DIRTY_INODE)))
                return;
 
-       if (unlikely(block_dump))
-               block_dump___mark_inode_dirty(inode);
-
        spin_lock(&inode->i_lock);
        if (dirtytime && (inode->i_state & I_DIRTY_INODE))
                goto out_unlock_inode;