APPLIED: [SRU][Pull][Bionic] Fix deadlock in ceph

Kleber Souza kleber.souza at canonical.com
Tue Jul 2 16:34:37 UTC 2019


On 6/28/19 8:09 PM, Connor Kuehl wrote:
> BugLink: https://bugs.launchpad.net/bugs/1834235
> 
> [Impact]
> 
> Deadlock may occur if iput_final() decides to wait for readahead pages 
> while a lock is held.
> 
> In order to resolve this, the following two patches install an 
> asynchronous "iput" for the ceph inodes so that a hold-and-wait deadlock 
> doesn't occur. A more detailed example is shown in the original patch: 
> https://github.com/ceph/ceph-client/commit/093ea205acd4b047cf5aacabc0c6ffecf198d2a9
> 
> Requested patches:
> 
> 3e1d0452edcee ceph: avoid iput_final() while holding mutex or in dispatch thread
> 1cf89a8dee5e6 ceph: single workqueue for inode related works
> 
> [Test Case]
> 
> These changes were tested by the original requester with positive results over a few
> days in their own environment where they first experienced the regression. They have
> determined they are no longer experiencing the regression with this patch set applied
> to a test kernel.
> 
> [Regression Potential] 
> 
> Several patches were required in order to cleanly cherry pick the requested patches.
> A large number of changes increases the regression potential, however, these 
> pre-requisite patches have been in mainline since early 2018 and the blast radius
> is localized only to ceph.
> 
> ----------------------------------------------------------------
> 
> The following changes since commit bb936a8a0dbbc727533e953071862a228044fa9f:
> 
>   block/bio: Do not zero user pages (2019-06-28 18:27:34 +0200)
> 
> are available in the Git repository at:
> 
>   git+ssh://connork@git.launchpad.net/~connork/+git/bionic ceph
> 
> for you to fetch changes up to 4a7619c37800ae7433f2bd5e2d66ce4a3c60d23e:
> 
>   ceph: avoid iput_final() while holding mutex or in dispatch thread (2019-06-28 09:32:06 -0700)

Applied to bionic/master-next branch.

Thanks,
Kleber

> 
> ----------------------------------------------------------------
> Luis Henriques (6):
>       ceph: quota: add initial infrastructure to support cephfs quotas
>       ceph: quota: support for ceph.quota.max_files
>       ceph: quota: don't allow cross-quota renames
>       ceph: quota: support for ceph.quota.max_bytes
>       ceph: quota: update MDS when max_bytes is approaching
>       ceph: quota: add counter for snaprealms with quota
> 
> Yan, Zheng (8):
>       ceph: use atomic_t for ceph_inode_info::i_shared_gen
>       ceph: define argument structure for handle_cap_grant
>       ceph: flush pending works before shutdown super
>       ceph: send cap releases more aggressively
>       ceph: single workqueue for inode related works
>       ceph: avoid dereferencing invalid pointer during cached readdir
>       ceph: fix root quota realm check
>       ceph: avoid iput_final() while holding mutex or in dispatch thread
> 
>  Documentation/filesystems/ceph.txt |  12 ++
>  fs/ceph/Makefile                   |   2 +-
>  fs/ceph/caps.c                     | 154 ++++++++++---------
>  fs/ceph/dir.c                      |  75 +++++++---
>  fs/ceph/file.c                     |  23 ++-
>  fs/ceph/inode.c                    | 211 ++++++++++++++++----------
>  fs/ceph/mds_client.c               | 113 +++++++++++---
>  fs/ceph/mds_client.h               |  14 +-
>  fs/ceph/quota.c                    | 298 +++++++++++++++++++++++++++++++++++++
>  fs/ceph/snap.c                     |  16 +-
>  fs/ceph/super.c                    |  38 ++---
>  fs/ceph/super.h                    |  62 ++++++--
>  fs/ceph/xattr.c                    |  44 ++++++
>  include/linux/ceph/ceph_features.h |   1 +
>  include/linux/ceph/ceph_fs.h       |  17 +++
>  net/ceph/ceph_common.c             |   1 +
>  16 files changed, 847 insertions(+), 234 deletions(-)
>  create mode 100644 fs/ceph/quota.c
> 
> 




More information about the kernel-team mailing list