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

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'ceph-for-6.12-rc1' of https://github.com/ceph/ceph-client

Pull ceph updates from Ilya Dryomov:
"Three CephFS fixes from Xiubo and Luis and a bunch of assorted
cleanups"

* tag 'ceph-for-6.12-rc1' of https://github.com/ceph/ceph-client:
ceph: remove the incorrect Fw reference check when dirtying pages
ceph: Remove empty definition in header file
ceph: Fix typo in the comment
ceph: fix a memory leak on cap_auths in MDS client
ceph: flush all caps releases when syncing the whole filesystem
ceph: rename ceph_flush_cap_releases() to ceph_flush_session_cap_releases()
libceph: use min() to simplify code in ceph_dns_resolve_name()
ceph: Convert to use jiffies macro
ceph: Remove unused declarations

+52 -26
-1
fs/ceph/addr.c
··· 96 96 97 97 /* dirty the head */ 98 98 spin_lock(&ci->i_ceph_lock); 99 - BUG_ON(ci->i_wr_ref == 0); // caller should hold Fw reference 100 99 if (__ceph_have_pending_cap_snap(ci)) { 101 100 struct ceph_cap_snap *capsnap = 102 101 list_last_entry(&ci->i_cap_snaps,
+26 -3
fs/ceph/caps.c
··· 10 10 #include <linux/writeback.h> 11 11 #include <linux/iversion.h> 12 12 #include <linux/filelock.h> 13 + #include <linux/jiffies.h> 13 14 14 15 #include "super.h" 15 16 #include "mds_client.h" ··· 4150 4149 ceph_remove_cap(mdsc, cap, false); 4151 4150 goto out_unlock; 4152 4151 } else if (tsession) { 4153 - /* add placeholder for the export tagert */ 4152 + /* add placeholder for the export target */ 4154 4153 int flag = (cap == ci->i_auth_cap) ? CEPH_CAP_FLAG_AUTH : 0; 4155 4154 tcap = new_cap; 4156 4155 ceph_add_cap(inode, tsession, t_cap_id, issued, 0, ··· 4603 4602 __ceph_queue_cap_release(session, cap); 4604 4603 spin_unlock(&session->s_cap_lock); 4605 4604 } 4606 - ceph_flush_cap_releases(mdsc, session); 4605 + ceph_flush_session_cap_releases(mdsc, session); 4607 4606 goto done; 4608 4607 4609 4608 bad: ··· 4660 4659 * slowness doesn't block mdsc delayed work, 4661 4660 * preventing send_renew_caps() from running. 4662 4661 */ 4663 - if (jiffies - loop_start >= 5 * HZ) 4662 + if (time_after_eq(jiffies, loop_start + 5 * HZ)) 4664 4663 break; 4665 4664 } 4666 4665 spin_unlock(&mdsc->cap_delay_lock); ··· 4700 4699 void ceph_flush_dirty_caps(struct ceph_mds_client *mdsc) 4701 4700 { 4702 4701 ceph_mdsc_iterate_sessions(mdsc, flush_dirty_session_caps, true); 4702 + } 4703 + 4704 + /* 4705 + * Flush all cap releases to the mds 4706 + */ 4707 + static void flush_cap_releases(struct ceph_mds_session *s) 4708 + { 4709 + struct ceph_mds_client *mdsc = s->s_mdsc; 4710 + struct ceph_client *cl = mdsc->fsc->client; 4711 + 4712 + doutc(cl, "begin\n"); 4713 + spin_lock(&s->s_cap_lock); 4714 + if (s->s_num_cap_releases) 4715 + ceph_flush_session_cap_releases(mdsc, s); 4716 + spin_unlock(&s->s_cap_lock); 4717 + doutc(cl, "done\n"); 4718 + 4719 + } 4720 + 4721 + void ceph_flush_cap_releases(struct ceph_mds_client *mdsc) 4722 + { 4723 + ceph_mdsc_iterate_sessions(mdsc, flush_cap_releases, true); 4703 4724 } 4704 4725 4705 4726 void __ceph_touch_fmode(struct ceph_inode_info *ci,
+1 -1
fs/ceph/dir.c
··· 2058 2058 return 0; 2059 2059 if (ceph_snap(d_inode(dentry)) != CEPH_NOSNAP) 2060 2060 return 0; 2061 - /* vaild lease? */ 2061 + /* valid lease? */ 2062 2062 di = ceph_dentry(dentry); 2063 2063 if (di) { 2064 2064 if (__dentry_lease_is_valid(di))
+1 -1
fs/ceph/inode.c
··· 1779 1779 if (err < 0) 1780 1780 goto done; 1781 1781 } else if (rinfo->head->is_dentry && req->r_dentry) { 1782 - /* parent inode is not locked, be carefull */ 1782 + /* parent inode is not locked, be careful */ 1783 1783 struct ceph_vino *ptvino = NULL; 1784 1784 dvino.ino = le64_to_cpu(rinfo->diri.in->ino); 1785 1785 dvino.snap = le64_to_cpu(rinfo->diri.in->snapid);
+19 -6
fs/ceph/mds_client.c
··· 2266 2266 trim_caps - remaining); 2267 2267 } 2268 2268 2269 - ceph_flush_cap_releases(mdsc, session); 2269 + ceph_flush_session_cap_releases(mdsc, session); 2270 2270 return 0; 2271 2271 } 2272 2272 ··· 2420 2420 ceph_put_mds_session(session); 2421 2421 } 2422 2422 2423 - void ceph_flush_cap_releases(struct ceph_mds_client *mdsc, 2423 + void ceph_flush_session_cap_releases(struct ceph_mds_client *mdsc, 2424 2424 struct ceph_mds_session *session) 2425 2425 { 2426 2426 struct ceph_client *cl = mdsc->fsc->client; ··· 2447 2447 session->s_num_cap_releases++; 2448 2448 2449 2449 if (!(session->s_num_cap_releases % CEPH_CAPS_PER_RELEASE)) 2450 - ceph_flush_cap_releases(session->s_mdsc, session); 2450 + ceph_flush_session_cap_releases(session->s_mdsc, session); 2451 2451 } 2452 2452 2453 2453 static void ceph_cap_reclaim_work(struct work_struct *work) ··· 4340 4340 /* flush cap releases */ 4341 4341 spin_lock(&session->s_cap_lock); 4342 4342 if (session->s_num_cap_releases) 4343 - ceph_flush_cap_releases(mdsc, session); 4343 + ceph_flush_session_cap_releases(mdsc, session); 4344 4344 spin_unlock(&session->s_cap_lock); 4345 4345 4346 4346 send_flushmsg_ack(mdsc, session, seq); ··· 4910 4910 } else { 4911 4911 recon_state.msg_version = 2; 4912 4912 } 4913 - /* trsaverse this session's caps */ 4913 + /* traverse this session's caps */ 4914 4914 err = ceph_iterate_session_caps(session, reconnect_caps_cb, &recon_state); 4915 4915 4916 4916 spin_lock(&session->s_cap_lock); ··· 5446 5446 } 5447 5447 mutex_unlock(&mdsc->mutex); 5448 5448 5449 - ceph_flush_cap_releases(mdsc, s); 5449 + ceph_flush_session_cap_releases(mdsc, s); 5450 5450 5451 5451 mutex_lock(&s->s_mutex); 5452 5452 if (renew_caps) ··· 5877 5877 mutex_unlock(&mdsc->mutex); 5878 5878 5879 5879 ceph_flush_dirty_caps(mdsc); 5880 + ceph_flush_cap_releases(mdsc); 5880 5881 spin_lock(&mdsc->cap_dirty_lock); 5881 5882 want_flush = mdsc->last_cap_flush_tid; 5882 5883 if (!list_empty(&mdsc->cap_flush_list)) { ··· 6016 6015 ceph_mdsmap_destroy(mdsc->mdsmap); 6017 6016 kfree(mdsc->sessions); 6018 6017 ceph_caps_finalize(mdsc); 6018 + 6019 + if (mdsc->s_cap_auths) { 6020 + int i; 6021 + 6022 + for (i = 0; i < mdsc->s_cap_auths_num; i++) { 6023 + kfree(mdsc->s_cap_auths[i].match.gids); 6024 + kfree(mdsc->s_cap_auths[i].match.path); 6025 + kfree(mdsc->s_cap_auths[i].match.fs_name); 6026 + } 6027 + kfree(mdsc->s_cap_auths); 6028 + } 6029 + 6019 6030 ceph_pool_perm_destroy(mdsc); 6020 6031 } 6021 6032
+2 -5
fs/ceph/mds_client.h
··· 559 559 ceph_get_mds_session(struct ceph_mds_session *s); 560 560 extern void ceph_put_mds_session(struct ceph_mds_session *s); 561 561 562 - extern int ceph_send_msg_mds(struct ceph_mds_client *mdsc, 563 - struct ceph_msg *msg, int mds); 564 - 565 562 extern int ceph_mdsc_init(struct ceph_fs_client *fsc); 566 563 extern void ceph_mdsc_close_sessions(struct ceph_mds_client *mdsc); 567 564 extern void ceph_mdsc_force_umount(struct ceph_mds_client *mdsc); ··· 599 602 extern struct ceph_msg *ceph_create_session_msg(u32 op, u64 seq); 600 603 extern void __ceph_queue_cap_release(struct ceph_mds_session *session, 601 604 struct ceph_cap *cap); 602 - extern void ceph_flush_cap_releases(struct ceph_mds_client *mdsc, 603 - struct ceph_mds_session *session); 605 + extern void ceph_flush_session_cap_releases(struct ceph_mds_client *mdsc, 606 + struct ceph_mds_session *session); 604 607 extern void ceph_queue_cap_reclaim_work(struct ceph_mds_client *mdsc); 605 608 extern void ceph_reclaim_caps_nr(struct ceph_mds_client *mdsc, int nr); 606 609 extern void ceph_queue_cap_unlink_work(struct ceph_mds_client *mdsc);
+1
fs/ceph/super.c
··· 126 126 if (!wait) { 127 127 doutc(cl, "(non-blocking)\n"); 128 128 ceph_flush_dirty_caps(fsc->mdsc); 129 + ceph_flush_cap_releases(fsc->mdsc); 129 130 doutc(cl, "(non-blocking) done\n"); 130 131 return 0; 131 132 }
+1 -6
fs/ceph/super.h
··· 1056 1056 extern int ceph_readdir_prepopulate(struct ceph_mds_request *req, 1057 1057 struct ceph_mds_session *session); 1058 1058 1059 - extern int ceph_inode_holds_cap(struct inode *inode, int mask); 1060 - 1061 1059 extern bool ceph_inode_set_size(struct inode *inode, loff_t size); 1062 1060 extern void __ceph_do_pending_vmtruncate(struct inode *inode); 1063 1061 ··· 1206 1208 struct ceph_acl_sec_ctx *as_ctx) 1207 1209 { 1208 1210 } 1209 - static inline int ceph_acl_chmod(struct dentry *dentry, struct inode *inode) 1210 - { 1211 - return 0; 1212 - } 1213 1211 1214 1212 static inline void ceph_forget_all_cached_acls(struct inode *inode) 1215 1213 { ··· 1264 1270 extern void ceph_check_caps(struct ceph_inode_info *ci, int flags); 1265 1271 extern unsigned long ceph_check_delayed_caps(struct ceph_mds_client *mdsc); 1266 1272 extern void ceph_flush_dirty_caps(struct ceph_mds_client *mdsc); 1273 + extern void ceph_flush_cap_releases(struct ceph_mds_client *mdsc); 1267 1274 extern int ceph_drop_caps_for_unlink(struct inode *inode); 1268 1275 extern int ceph_encode_inode_release(void **p, struct inode *inode, 1269 1276 int mds, int drop, int unless, int force);
-2
include/linux/ceph/osd_client.h
··· 449 449 extern void ceph_osdc_stop(struct ceph_osd_client *osdc); 450 450 extern void ceph_osdc_reopen_osds(struct ceph_osd_client *osdc); 451 451 452 - extern void ceph_osdc_handle_reply(struct ceph_osd_client *osdc, 453 - struct ceph_msg *msg); 454 452 extern void ceph_osdc_handle_map(struct ceph_osd_client *osdc, 455 453 struct ceph_msg *msg); 456 454 void ceph_osdc_update_epoch_barrier(struct ceph_osd_client *osdc, u32 eb);
+1 -1
net/ceph/messenger.c
··· 1254 1254 colon_p = memchr(name, ':', namelen); 1255 1255 1256 1256 if (delim_p && colon_p) 1257 - end = delim_p < colon_p ? delim_p : colon_p; 1257 + end = min(delim_p, colon_p); 1258 1258 else if (!delim_p && colon_p) 1259 1259 end = colon_p; 1260 1260 else {