Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge tag 'ceph-for-6.9-rc4' of https://github.com/ceph/ceph-client

Pull ceph fixes from Ilya Dryomov:
"Two CephFS fixes marked for stable and a MAINTAINERS update"

* tag 'ceph-for-6.9-rc4' of https://github.com/ceph/ceph-client:
MAINTAINERS: remove myself as a Reviewer for Ceph
ceph: switch to use cap_delay_lock for the unlink delay list
ceph: redirty page before returning AOP_WRITEPAGE_ACTIVATE

+10 -12
-2
MAINTAINERS
··· 4869 4869 CEPH COMMON CODE (LIBCEPH) 4870 4870 M: Ilya Dryomov <idryomov@gmail.com> 4871 4871 M: Xiubo Li <xiubli@redhat.com> 4872 - R: Jeff Layton <jlayton@kernel.org> 4873 4872 L: ceph-devel@vger.kernel.org 4874 4873 S: Supported 4875 4874 W: http://ceph.com/ ··· 4880 4881 CEPH DISTRIBUTED FILE SYSTEM CLIENT (CEPH) 4881 4882 M: Xiubo Li <xiubli@redhat.com> 4882 4883 M: Ilya Dryomov <idryomov@gmail.com> 4883 - R: Jeff Layton <jlayton@kernel.org> 4884 4884 L: ceph-devel@vger.kernel.org 4885 4885 S: Supported 4886 4886 W: http://ceph.com/
+3 -1
fs/ceph/addr.c
··· 795 795 ihold(inode); 796 796 797 797 if (wbc->sync_mode == WB_SYNC_NONE && 798 - ceph_inode_to_fs_client(inode)->write_congested) 798 + ceph_inode_to_fs_client(inode)->write_congested) { 799 + redirty_page_for_writepage(wbc, page); 799 800 return AOP_WRITEPAGE_ACTIVATE; 801 + } 800 802 801 803 wait_on_page_fscache(page); 802 804
+2 -2
fs/ceph/caps.c
··· 4783 4783 4784 4784 doutc(mdsc->fsc->client, "%p %llx.%llx\n", inode, 4785 4785 ceph_vinop(inode)); 4786 - spin_lock(&mdsc->cap_unlink_delay_lock); 4786 + spin_lock(&mdsc->cap_delay_lock); 4787 4787 ci->i_ceph_flags |= CEPH_I_FLUSH; 4788 4788 if (!list_empty(&ci->i_cap_delay_list)) 4789 4789 list_del_init(&ci->i_cap_delay_list); 4790 4790 list_add_tail(&ci->i_cap_delay_list, 4791 4791 &mdsc->cap_unlink_delay_list); 4792 - spin_unlock(&mdsc->cap_unlink_delay_lock); 4792 + spin_unlock(&mdsc->cap_delay_lock); 4793 4793 4794 4794 /* 4795 4795 * Fire the work immediately, because the MDS maybe
+4 -5
fs/ceph/mds_client.c
··· 2504 2504 struct ceph_client *cl = mdsc->fsc->client; 2505 2505 2506 2506 doutc(cl, "begin\n"); 2507 - spin_lock(&mdsc->cap_unlink_delay_lock); 2507 + spin_lock(&mdsc->cap_delay_lock); 2508 2508 while (!list_empty(&mdsc->cap_unlink_delay_list)) { 2509 2509 struct ceph_inode_info *ci; 2510 2510 struct inode *inode; ··· 2516 2516 2517 2517 inode = igrab(&ci->netfs.inode); 2518 2518 if (inode) { 2519 - spin_unlock(&mdsc->cap_unlink_delay_lock); 2519 + spin_unlock(&mdsc->cap_delay_lock); 2520 2520 doutc(cl, "on %p %llx.%llx\n", inode, 2521 2521 ceph_vinop(inode)); 2522 2522 ceph_check_caps(ci, CHECK_CAPS_FLUSH); 2523 2523 iput(inode); 2524 - spin_lock(&mdsc->cap_unlink_delay_lock); 2524 + spin_lock(&mdsc->cap_delay_lock); 2525 2525 } 2526 2526 } 2527 - spin_unlock(&mdsc->cap_unlink_delay_lock); 2527 + spin_unlock(&mdsc->cap_delay_lock); 2528 2528 doutc(cl, "done\n"); 2529 2529 } 2530 2530 ··· 5404 5404 INIT_LIST_HEAD(&mdsc->cap_wait_list); 5405 5405 spin_lock_init(&mdsc->cap_delay_lock); 5406 5406 INIT_LIST_HEAD(&mdsc->cap_unlink_delay_list); 5407 - spin_lock_init(&mdsc->cap_unlink_delay_lock); 5408 5407 INIT_LIST_HEAD(&mdsc->snap_flush_list); 5409 5408 spin_lock_init(&mdsc->snap_flush_lock); 5410 5409 mdsc->last_cap_flush_tid = 1;
+1 -2
fs/ceph/mds_client.h
··· 461 461 struct delayed_work delayed_work; /* delayed work */ 462 462 unsigned long last_renew_caps; /* last time we renewed our caps */ 463 463 struct list_head cap_delay_list; /* caps with delayed release */ 464 - spinlock_t cap_delay_lock; /* protects cap_delay_list */ 465 464 struct list_head cap_unlink_delay_list; /* caps with delayed release for unlink */ 466 - spinlock_t cap_unlink_delay_lock; /* protects cap_unlink_delay_list */ 465 + spinlock_t cap_delay_lock; /* protects cap_delay_list and cap_unlink_delay_list */ 467 466 struct list_head snap_flush_list; /* cap_snaps ready to flush */ 468 467 spinlock_t snap_flush_lock; 469 468