]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
client: fix directory inode can not call release callback 37017/head
authorsepia-liu <liuwei_coder@163.com>
Sat, 30 May 2020 10:10:15 +0000 (18:10 +0800)
committerVicente Cheng <freeze.bilsted@gmail.com>
Mon, 7 Sep 2020 08:01:31 +0000 (08:01 +0000)
When use client like nfs-ganesha hold ref of dir inode,
the dentry of the inode does not expirable because its
state is always lru_pinned.

The current code location does not tell nfs-ganesha to
release dir inodes, so we should call release_callback
to tell nfs-ganesha release first, and then trim dentry
when its state becomes unpin.

Fixes: https://tracker.ceph.com/issues/46355
Signed-off-by: sepia-liu <liuwei_coder@163.com>
(cherry picked from commit 60de0363ec7e1423665091bf42f67b78f11d9c1f)

src/client/Client.cc

index 52e818482a04ac6cf1b26c0d005b7555d2c9df09..c08187ae852f0e001f8acea9961de2ce9b10d643 100755 (executable)
@@ -4381,10 +4381,12 @@ void Client::trim_caps(MetaSession *s, uint64_t max)
          all = false;
         }
       }
+      if (in->ll_ref == 1 && in->ino != MDS_INO_ROOT) {
+         _schedule_ino_release_callback(in.get());
+      }
       if (all && in->ino != MDS_INO_ROOT) {
         ldout(cct, 20) << __func__ << " counting as trimmed: " << *in << dendl;
        trimmed++;
-       _schedule_ino_release_callback(in.get());
       }
     }
   }