On Fri, Jul 3, 2015 at 4:52 AM, Julia Lawall <julia.lawall@xxxxxxx> wrote: > I haven't looked at all the called functions, to see if any of them drops > the lock, but it could be worth a check. > the lock is dropped by cleanup_cap_releases() > julia > > On Fri, 3 Jul 2015, kbuild test robot wrote: > >> TO: "Yan, Zheng" <zyan@xxxxxxxxxx> >> CC: Ilya Dryomov <idryomov@xxxxxxxxx> >> CC: ceph-devel@xxxxxxxxxxxxxxx >> >> tree: git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client.git for-linus >> head: 5a60e87603c4c533492c515b7f62578189b03c9c >> commit: 745a8e3bccbc6adae69a98ddc525e529aa44636e [11/40] ceph: don't pre-allocate space for cap release messages >> :::::: branch date: 2 days ago >> :::::: commit date: 7 days ago >> >> >> fs/ceph/mds_client.c:2865:1-10: second lock on line 2904 >> -- >> >> fs/ceph/mds_client.c:2961:1-7: preceding lock on line 2865 >> >> git remote add ceph git://git.kernel.org/pub/scm/linux/kernel/git/sage/ceph-client.git >> git remote update ceph >> git checkout 745a8e3bccbc6adae69a98ddc525e529aa44636e >> vim +2865 fs/ceph/mds_client.c >> >> a687ecaf John Spray 2014-09-19 2859 ceph_session_state_name(session->s_state)); >> 2f2dc053 Sage Weil 2009-10-06 2860 >> 99a9c273 Yan, Zheng 2013-09-22 2861 spin_lock(&session->s_gen_ttl_lock); >> 99a9c273 Yan, Zheng 2013-09-22 2862 session->s_cap_gen++; >> 99a9c273 Yan, Zheng 2013-09-22 2863 spin_unlock(&session->s_gen_ttl_lock); >> 99a9c273 Yan, Zheng 2013-09-22 2864 >> 99a9c273 Yan, Zheng 2013-09-22 @2865 spin_lock(&session->s_cap_lock); >> 03f4fcb0 Yan, Zheng 2015-01-05 2866 /* don't know if session is readonly */ >> 03f4fcb0 Yan, Zheng 2015-01-05 2867 session->s_readonly = 0; >> 99a9c273 Yan, Zheng 2013-09-22 2868 /* >> 99a9c273 Yan, Zheng 2013-09-22 2869 * notify __ceph_remove_cap() that we are composing cap reconnect. >> 99a9c273 Yan, Zheng 2013-09-22 2870 * If a cap get released before being added to the cap reconnect, >> 99a9c273 Yan, Zheng 2013-09-22 2871 * __ceph_remove_cap() should skip queuing cap release. >> 99a9c273 Yan, Zheng 2013-09-22 2872 */ >> 99a9c273 Yan, Zheng 2013-09-22 2873 session->s_cap_reconnect = 1; >> e01a5946 Sage Weil 2010-05-10 2874 /* drop old cap expires; we're about to reestablish that state */ >> 745a8e3b Yan, Zheng 2015-05-14 2875 cleanup_cap_releases(mdsc, session); >> e01a5946 Sage Weil 2010-05-10 2876 >> 5d23371f Yan, Zheng 2014-09-10 2877 /* trim unused caps to reduce MDS's cache rejoin time */ >> c0bd50e2 Yan, Zheng 2015-04-07 2878 if (mdsc->fsc->sb->s_root) >> 5d23371f Yan, Zheng 2014-09-10 2879 shrink_dcache_parent(mdsc->fsc->sb->s_root); >> 5d23371f Yan, Zheng 2014-09-10 2880 >> 5d23371f Yan, Zheng 2014-09-10 2881 ceph_con_close(&session->s_con); >> 5d23371f Yan, Zheng 2014-09-10 2882 ceph_con_open(&session->s_con, >> 5d23371f Yan, Zheng 2014-09-10 2883 CEPH_ENTITY_TYPE_MDS, mds, >> 5d23371f Yan, Zheng 2014-09-10 2884 ceph_mdsmap_get_addr(mdsc->mdsmap, mds)); >> 5d23371f Yan, Zheng 2014-09-10 2885 >> 5d23371f Yan, Zheng 2014-09-10 2886 /* replay unsafe requests */ >> 5d23371f Yan, Zheng 2014-09-10 2887 replay_unsafe_requests(mdsc, session); >> 5d23371f Yan, Zheng 2014-09-10 2888 >> 5d23371f Yan, Zheng 2014-09-10 2889 down_read(&mdsc->snap_rwsem); >> 5d23371f Yan, Zheng 2014-09-10 2890 >> 2f2dc053 Sage Weil 2009-10-06 2891 /* traverse this session's caps */ >> 44c99757 Yan, Zheng 2013-09-22 2892 s_nr_caps = session->s_nr_caps; >> 44c99757 Yan, Zheng 2013-09-22 2893 err = ceph_pagelist_encode_32(pagelist, s_nr_caps); >> 93cea5be Sage Weil 2009-12-23 2894 if (err) >> 93cea5be Sage Weil 2009-12-23 2895 goto fail; >> 20cb34ae Sage Weil 2010-05-12 2896 >> 44c99757 Yan, Zheng 2013-09-22 2897 recon_state.nr_caps = 0; >> 20cb34ae Sage Weil 2010-05-12 2898 recon_state.pagelist = pagelist; >> 20cb34ae Sage Weil 2010-05-12 2899 recon_state.flock = session->s_con.peer_features & CEPH_FEATURE_FLOCK; >> 20cb34ae Sage Weil 2010-05-12 2900 err = iterate_session_caps(session, encode_caps_cb, &recon_state); >> 2f2dc053 Sage Weil 2009-10-06 2901 if (err < 0) >> 9abf82b8 Sage Weil 2010-05-10 2902 goto fail; >> 2f2dc053 Sage Weil 2009-10-06 2903 >> 99a9c273 Yan, Zheng 2013-09-22 @2904 spin_lock(&session->s_cap_lock); >> 99a9c273 Yan, Zheng 2013-09-22 2905 session->s_cap_reconnect = 0; >> 99a9c273 Yan, Zheng 2013-09-22 2906 spin_unlock(&session->s_cap_lock); >> 99a9c273 Yan, Zheng 2013-09-22 2907 >> 2f2dc053 Sage Weil 2009-10-06 2908 /* >> 2f2dc053 Sage Weil 2009-10-06 2909 * snaprealms. we provide mds with the ino, seq (version), and >> 2f2dc053 Sage Weil 2009-10-06 2910 * parent for all of our realms. If the mds has any newer info, >> 2f2dc053 Sage Weil 2009-10-06 2911 * it will tell us. >> 2f2dc053 Sage Weil 2009-10-06 2912 */ >> a105f00c Sage Weil 2010-02-15 2913 for (p = rb_first(&mdsc->snap_realms); p; p = rb_next(p)) { >> a105f00c Sage Weil 2010-02-15 2914 struct ceph_snap_realm *realm = >> a105f00c Sage Weil 2010-02-15 2915 rb_entry(p, struct ceph_snap_realm, node); >> 93cea5be Sage Weil 2009-12-23 2916 struct ceph_mds_snaprealm_reconnect sr_rec; >> 2f2dc053 Sage Weil 2009-10-06 2917 >> 2f2dc053 Sage Weil 2009-10-06 2918 dout(" adding snap realm %llx seq %lld parent %llx\n", >> 2f2dc053 Sage Weil 2009-10-06 2919 realm->ino, realm->seq, realm->parent_ino); >> 93cea5be Sage Weil 2009-12-23 2920 sr_rec.ino = cpu_to_le64(realm->ino); >> 93cea5be Sage Weil 2009-12-23 2921 sr_rec.seq = cpu_to_le64(realm->seq); >> 93cea5be Sage Weil 2009-12-23 2922 sr_rec.parent = cpu_to_le64(realm->parent_ino); >> 93cea5be Sage Weil 2009-12-23 2923 err = ceph_pagelist_append(pagelist, &sr_rec, sizeof(sr_rec)); >> 93cea5be Sage Weil 2009-12-23 2924 if (err) >> 93cea5be Sage Weil 2009-12-23 2925 goto fail; >> 2f2dc053 Sage Weil 2009-10-06 2926 } >> 2f2dc053 Sage Weil 2009-10-06 2927 >> 20cb34ae Sage Weil 2010-05-12 2928 if (recon_state.flock) >> 20cb34ae Sage Weil 2010-05-12 2929 reply->hdr.version = cpu_to_le16(2); >> 44c99757 Yan, Zheng 2013-09-22 2930 >> 44c99757 Yan, Zheng 2013-09-22 2931 /* raced with cap release? */ >> 44c99757 Yan, Zheng 2013-09-22 2932 if (s_nr_caps != recon_state.nr_caps) { >> 44c99757 Yan, Zheng 2013-09-22 2933 struct page *page = list_first_entry(&pagelist->head, >> 44c99757 Yan, Zheng 2013-09-22 2934 struct page, lru); >> 44c99757 Yan, Zheng 2013-09-22 2935 __le32 *addr = kmap_atomic(page); >> 44c99757 Yan, Zheng 2013-09-22 2936 *addr = cpu_to_le32(recon_state.nr_caps); >> 44c99757 Yan, Zheng 2013-09-22 2937 kunmap_atomic(addr); >> 44c99757 Yan, Zheng 2013-09-22 2938 } >> 44c99757 Yan, Zheng 2013-09-22 2939 >> 93cea5be Sage Weil 2009-12-23 2940 reply->hdr.data_len = cpu_to_le32(pagelist->length); >> 90af3602 Alex Elder 2013-04-05 2941 ceph_msg_data_add_pagelist(reply, pagelist); >> 2f2dc053 Sage Weil 2009-10-06 2942 ceph_con_send(&session->s_con, reply); >> 2f2dc053 Sage Weil 2009-10-06 2943 >> 9abf82b8 Sage Weil 2010-05-10 2944 mutex_unlock(&session->s_mutex); >> 9abf82b8 Sage Weil 2010-05-10 2945 >> 9abf82b8 Sage Weil 2010-05-10 2946 mutex_lock(&mdsc->mutex); >> 2f2dc053 Sage Weil 2009-10-06 2947 __wake_requests(mdsc, &session->s_waiting); >> 9abf82b8 Sage Weil 2010-05-10 2948 mutex_unlock(&mdsc->mutex); >> 2f2dc053 Sage Weil 2009-10-06 2949 >> 9abf82b8 Sage Weil 2010-05-10 2950 up_read(&mdsc->snap_rwsem); >> 2f2dc053 Sage Weil 2009-10-06 2951 return; >> 2f2dc053 Sage Weil 2009-10-06 2952 >> 93cea5be Sage Weil 2009-12-23 2953 fail: >> 2f2dc053 Sage Weil 2009-10-06 2954 ceph_msg_put(reply); >> 9abf82b8 Sage Weil 2010-05-10 2955 up_read(&mdsc->snap_rwsem); >> 9abf82b8 Sage Weil 2010-05-10 2956 mutex_unlock(&session->s_mutex); >> 93cea5be Sage Weil 2009-12-23 2957 fail_nomsg: >> 93cea5be Sage Weil 2009-12-23 2958 ceph_pagelist_release(pagelist); >> 93cea5be Sage Weil 2009-12-23 2959 fail_nopagelist: >> 9abf82b8 Sage Weil 2010-05-10 2960 pr_err("error %d preparing reconnect for mds%d\n", err, mds); >> 9abf82b8 Sage Weil 2010-05-10 @2961 return; >> 2f2dc053 Sage Weil 2009-10-06 2962 } >> 2f2dc053 Sage Weil 2009-10-06 2963 >> 2f2dc053 Sage Weil 2009-10-06 2964 >> >> :::::: The code at line 2865 was first introduced by commit >> :::::: 99a9c273b94a087f8feaec6c5ffbe3205a2dbe51 ceph: handle race between cap reconnect and cap release >> >> :::::: TO: Yan, Zheng <zheng.z.yan@xxxxxxxxx> >> :::::: CC: Sage Weil <sage@xxxxxxxxxxx> >> >> --- >> 0-DAY kernel test infrastructure Open Source Technology Center >> https://lists.01.org/pipermail/kbuild-all Intel Corporation >> > -- > To unsubscribe from this list: send the line "unsubscribe ceph-devel" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe ceph-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html