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

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

Pull ceph updates from Ilya Dryomov:

- support for idmapped mounts in CephFS (Christian Brauner, Alexander
Mikhalitsyn).

The series was originally developed by Christian and later picked up
and brought over the finish line by Alexander, who also contributed
an enabler on the MDS side (separate owner_{u,g}id fields on the
wire).

The required exports for mnt_idmap_{get,put}() in VFS have been acked
by Christian and received no objection from Christoph.

- a churny change in CephFS logging to include cluster and client
identifiers in log and debug messages (Xiubo Li).

This would help in scenarios with dozens of CephFS mounts on the same
node which are getting increasingly common, especially in the
Kubernetes world.

* tag 'ceph-for-6.7-rc1' of https://github.com/ceph/ceph-client:
ceph: allow idmapped mounts
ceph: allow idmapped atomic_open inode op
ceph: allow idmapped set_acl inode op
ceph: allow idmapped setattr inode op
ceph: pass idmap to __ceph_setattr
ceph: allow idmapped permission inode op
ceph: allow idmapped getattr inode op
ceph: pass an idmapping to mknod/symlink/mkdir
ceph: add enable_unsafe_idmap module parameter
ceph: handle idmapped mounts in create_request_message()
ceph: stash idmapping in mdsc request
fs: export mnt_idmap_get/mnt_idmap_put
libceph, ceph: move mdsmap.h to fs/ceph
ceph: print cluster fsid and client global_id in all debug logs
ceph: rename _to_client() to _to_fs_client()
ceph: pass the mdsc to several helpers
libceph: add doutc and *_client debug macros support

+2061 -1464
+7 -5
fs/ceph/acl.c
··· 15 15 #include <linux/slab.h> 16 16 17 17 #include "super.h" 18 + #include "mds_client.h" 18 19 19 20 static inline void ceph_set_cached_acl(struct inode *inode, 20 21 int type, struct posix_acl *acl) ··· 32 31 33 32 struct posix_acl *ceph_get_acl(struct inode *inode, int type, bool rcu) 34 33 { 34 + struct ceph_client *cl = ceph_inode_to_client(inode); 35 35 int size; 36 36 unsigned int retry_cnt = 0; 37 37 const char *name; ··· 74 72 } else if (size == -ENODATA || size == 0) { 75 73 acl = NULL; 76 74 } else { 77 - pr_err_ratelimited("get acl %llx.%llx failed, err=%d\n", 78 - ceph_vinop(inode), size); 75 + pr_err_ratelimited_client(cl, "%llx.%llx failed, err=%d\n", 76 + ceph_vinop(inode), size); 79 77 acl = ERR_PTR(-EIO); 80 78 } 81 79 ··· 107 105 case ACL_TYPE_ACCESS: 108 106 name = XATTR_NAME_POSIX_ACL_ACCESS; 109 107 if (acl) { 110 - ret = posix_acl_update_mode(&nop_mnt_idmap, inode, 108 + ret = posix_acl_update_mode(idmap, inode, 111 109 &new_mode, &acl); 112 110 if (ret) 113 111 goto out; ··· 142 140 newattrs.ia_ctime = current_time(inode); 143 141 newattrs.ia_mode = new_mode; 144 142 newattrs.ia_valid = ATTR_MODE | ATTR_CTIME; 145 - ret = __ceph_setattr(inode, &newattrs, NULL); 143 + ret = __ceph_setattr(idmap, inode, &newattrs, NULL); 146 144 if (ret) 147 145 goto out_free; 148 146 } ··· 153 151 newattrs.ia_ctime = old_ctime; 154 152 newattrs.ia_mode = old_mode; 155 153 newattrs.ia_valid = ATTR_MODE | ATTR_CTIME; 156 - __ceph_setattr(inode, &newattrs, NULL); 154 + __ceph_setattr(idmap, inode, &newattrs, NULL); 157 155 } 158 156 goto out_free; 159 157 }
+163 -136
fs/ceph/addr.c
··· 79 79 */ 80 80 static bool ceph_dirty_folio(struct address_space *mapping, struct folio *folio) 81 81 { 82 - struct inode *inode; 82 + struct inode *inode = mapping->host; 83 + struct ceph_client *cl = ceph_inode_to_client(inode); 83 84 struct ceph_inode_info *ci; 84 85 struct ceph_snap_context *snapc; 85 86 86 87 if (folio_test_dirty(folio)) { 87 - dout("%p dirty_folio %p idx %lu -- already dirty\n", 88 - mapping->host, folio, folio->index); 88 + doutc(cl, "%llx.%llx %p idx %lu -- already dirty\n", 89 + ceph_vinop(inode), folio, folio->index); 89 90 VM_BUG_ON_FOLIO(!folio_test_private(folio), folio); 90 91 return false; 91 92 } 92 93 93 - inode = mapping->host; 94 94 ci = ceph_inode(inode); 95 95 96 96 /* dirty the head */ ··· 111 111 if (ci->i_wrbuffer_ref == 0) 112 112 ihold(inode); 113 113 ++ci->i_wrbuffer_ref; 114 - dout("%p dirty_folio %p idx %lu head %d/%d -> %d/%d " 115 - "snapc %p seq %lld (%d snaps)\n", 116 - mapping->host, folio, folio->index, 117 - ci->i_wrbuffer_ref-1, ci->i_wrbuffer_ref_head-1, 118 - ci->i_wrbuffer_ref, ci->i_wrbuffer_ref_head, 119 - snapc, snapc->seq, snapc->num_snaps); 114 + doutc(cl, "%llx.%llx %p idx %lu head %d/%d -> %d/%d " 115 + "snapc %p seq %lld (%d snaps)\n", 116 + ceph_vinop(inode), folio, folio->index, 117 + ci->i_wrbuffer_ref-1, ci->i_wrbuffer_ref_head-1, 118 + ci->i_wrbuffer_ref, ci->i_wrbuffer_ref_head, 119 + snapc, snapc->seq, snapc->num_snaps); 120 120 spin_unlock(&ci->i_ceph_lock); 121 121 122 122 /* ··· 137 137 static void ceph_invalidate_folio(struct folio *folio, size_t offset, 138 138 size_t length) 139 139 { 140 - struct inode *inode; 141 - struct ceph_inode_info *ci; 140 + struct inode *inode = folio->mapping->host; 141 + struct ceph_client *cl = ceph_inode_to_client(inode); 142 + struct ceph_inode_info *ci = ceph_inode(inode); 142 143 struct ceph_snap_context *snapc; 143 144 144 - inode = folio->mapping->host; 145 - ci = ceph_inode(inode); 146 145 147 146 if (offset != 0 || length != folio_size(folio)) { 148 - dout("%p invalidate_folio idx %lu partial dirty page %zu~%zu\n", 149 - inode, folio->index, offset, length); 147 + doutc(cl, "%llx.%llx idx %lu partial dirty page %zu~%zu\n", 148 + ceph_vinop(inode), folio->index, offset, length); 150 149 return; 151 150 } 152 151 153 152 WARN_ON(!folio_test_locked(folio)); 154 153 if (folio_test_private(folio)) { 155 - dout("%p invalidate_folio idx %lu full dirty page\n", 156 - inode, folio->index); 154 + doutc(cl, "%llx.%llx idx %lu full dirty page\n", 155 + ceph_vinop(inode), folio->index); 157 156 158 157 snapc = folio_detach_private(folio); 159 158 ceph_put_wrbuffer_cap_refs(ci, 1, snapc); ··· 165 166 static bool ceph_release_folio(struct folio *folio, gfp_t gfp) 166 167 { 167 168 struct inode *inode = folio->mapping->host; 169 + struct ceph_client *cl = ceph_inode_to_client(inode); 168 170 169 - dout("%llx:%llx release_folio idx %lu (%sdirty)\n", 170 - ceph_vinop(inode), 171 - folio->index, folio_test_dirty(folio) ? "" : "not "); 171 + doutc(cl, "%llx.%llx idx %lu (%sdirty)\n", ceph_vinop(inode), 172 + folio->index, folio_test_dirty(folio) ? "" : "not "); 172 173 173 174 if (folio_test_private(folio)) 174 175 return false; ··· 228 229 static bool ceph_netfs_clamp_length(struct netfs_io_subrequest *subreq) 229 230 { 230 231 struct inode *inode = subreq->rreq->inode; 231 - struct ceph_fs_client *fsc = ceph_inode_to_client(inode); 232 + struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode); 232 233 struct ceph_inode_info *ci = ceph_inode(inode); 233 234 u64 objno, objoff; 234 235 u32 xlen; ··· 243 244 static void finish_netfs_read(struct ceph_osd_request *req) 244 245 { 245 246 struct inode *inode = req->r_inode; 246 - struct ceph_fs_client *fsc = ceph_inode_to_client(inode); 247 + struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode); 248 + struct ceph_client *cl = fsc->client; 247 249 struct ceph_osd_data *osd_data = osd_req_op_extent_osd_data(req, 0); 248 250 struct netfs_io_subrequest *subreq = req->r_priv; 249 251 struct ceph_osd_req_op *op = &req->r_ops[0]; ··· 254 254 ceph_update_read_metrics(&fsc->mdsc->metric, req->r_start_latency, 255 255 req->r_end_latency, osd_data->length, err); 256 256 257 - dout("%s: result %d subreq->len=%zu i_size=%lld\n", __func__, req->r_result, 258 - subreq->len, i_size_read(req->r_inode)); 257 + doutc(cl, "result %d subreq->len=%zu i_size=%lld\n", req->r_result, 258 + subreq->len, i_size_read(req->r_inode)); 259 259 260 260 /* no object means success but no data */ 261 261 if (err == -ENOENT) ··· 348 348 struct netfs_io_request *rreq = subreq->rreq; 349 349 struct inode *inode = rreq->inode; 350 350 struct ceph_inode_info *ci = ceph_inode(inode); 351 - struct ceph_fs_client *fsc = ceph_inode_to_client(inode); 351 + struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode); 352 + struct ceph_client *cl = fsc->client; 352 353 struct ceph_osd_request *req = NULL; 353 354 struct ceph_vino vino = ceph_vino(inode); 354 355 struct iov_iter iter; ··· 384 383 goto out; 385 384 } 386 385 387 - dout("%s: pos=%llu orig_len=%zu len=%llu\n", __func__, subreq->start, subreq->len, len); 386 + doutc(cl, "%llx.%llx pos=%llu orig_len=%zu len=%llu\n", 387 + ceph_vinop(inode), subreq->start, subreq->len, len); 388 388 389 389 iov_iter_xarray(&iter, ITER_DEST, &rreq->mapping->i_pages, subreq->start, len); 390 390 ··· 402 400 403 401 err = iov_iter_get_pages_alloc2(&iter, &pages, len, &page_off); 404 402 if (err < 0) { 405 - dout("%s: iov_ter_get_pages_alloc returned %d\n", 406 - __func__, err); 403 + doutc(cl, "%llx.%llx failed to allocate pages, %d\n", 404 + ceph_vinop(inode), err); 407 405 goto out; 408 406 } 409 407 ··· 431 429 ceph_osdc_put_request(req); 432 430 if (err) 433 431 netfs_subreq_terminated(subreq, err, false); 434 - dout("%s: result %d\n", __func__, err); 432 + doutc(cl, "%llx.%llx result %d\n", ceph_vinop(inode), err); 435 433 } 436 434 437 435 static int ceph_init_request(struct netfs_io_request *rreq, struct file *file) 438 436 { 439 437 struct inode *inode = rreq->inode; 438 + struct ceph_client *cl = ceph_inode_to_client(inode); 440 439 int got = 0, want = CEPH_CAP_FILE_CACHE; 441 440 struct ceph_netfs_request_data *priv; 442 441 int ret = 0; ··· 469 466 */ 470 467 ret = ceph_try_get_caps(inode, CEPH_CAP_FILE_RD, want, true, &got); 471 468 if (ret < 0) { 472 - dout("start_read %p, error getting cap\n", inode); 469 + doutc(cl, "%llx.%llx, error getting cap\n", ceph_vinop(inode)); 473 470 goto out; 474 471 } 475 472 476 473 if (!(got & want)) { 477 - dout("start_read %p, no cache cap\n", inode); 474 + doutc(cl, "%llx.%llx, no cache cap\n", ceph_vinop(inode)); 478 475 ret = -EACCES; 479 476 goto out; 480 477 } ··· 566 563 struct ceph_snap_context *page_snapc) 567 564 { 568 565 struct ceph_inode_info *ci = ceph_inode(inode); 566 + struct ceph_client *cl = ceph_inode_to_client(inode); 569 567 struct ceph_snap_context *snapc = NULL; 570 568 struct ceph_cap_snap *capsnap = NULL; 571 569 572 570 spin_lock(&ci->i_ceph_lock); 573 571 list_for_each_entry(capsnap, &ci->i_cap_snaps, ci_item) { 574 - dout(" cap_snap %p snapc %p has %d dirty pages\n", capsnap, 575 - capsnap->context, capsnap->dirty_pages); 572 + doutc(cl, " capsnap %p snapc %p has %d dirty pages\n", 573 + capsnap, capsnap->context, capsnap->dirty_pages); 576 574 if (!capsnap->dirty_pages) 577 575 continue; 578 576 ··· 605 601 } 606 602 if (!snapc && ci->i_wrbuffer_ref_head) { 607 603 snapc = ceph_get_snap_context(ci->i_head_snapc); 608 - dout(" head snapc %p has %d dirty pages\n", 609 - snapc, ci->i_wrbuffer_ref_head); 604 + doutc(cl, " head snapc %p has %d dirty pages\n", snapc, 605 + ci->i_wrbuffer_ref_head); 610 606 if (ctl) { 611 607 ctl->i_size = i_size_read(inode); 612 608 ctl->truncate_size = ci->i_truncate_size; ··· 662 658 struct folio *folio = page_folio(page); 663 659 struct inode *inode = page->mapping->host; 664 660 struct ceph_inode_info *ci = ceph_inode(inode); 665 - struct ceph_fs_client *fsc = ceph_inode_to_client(inode); 661 + struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode); 662 + struct ceph_client *cl = fsc->client; 666 663 struct ceph_snap_context *snapc, *oldest; 667 664 loff_t page_off = page_offset(page); 668 665 int err; ··· 675 670 bool caching = ceph_is_cache_enabled(inode); 676 671 struct page *bounce_page = NULL; 677 672 678 - dout("writepage %p idx %lu\n", page, page->index); 673 + doutc(cl, "%llx.%llx page %p idx %lu\n", ceph_vinop(inode), page, 674 + page->index); 679 675 680 676 if (ceph_inode_is_shutdown(inode)) 681 677 return -EIO; ··· 684 678 /* verify this is a writeable snap context */ 685 679 snapc = page_snap_context(page); 686 680 if (!snapc) { 687 - dout("writepage %p page %p not dirty?\n", inode, page); 681 + doutc(cl, "%llx.%llx page %p not dirty?\n", ceph_vinop(inode), 682 + page); 688 683 return 0; 689 684 } 690 685 oldest = get_oldest_context(inode, &ceph_wbc, snapc); 691 686 if (snapc->seq > oldest->seq) { 692 - dout("writepage %p page %p snapc %p not writeable - noop\n", 693 - inode, page, snapc); 687 + doutc(cl, "%llx.%llx page %p snapc %p not writeable - noop\n", 688 + ceph_vinop(inode), page, snapc); 694 689 /* we should only noop if called by kswapd */ 695 690 WARN_ON(!(current->flags & PF_MEMALLOC)); 696 691 ceph_put_snap_context(oldest); ··· 702 695 703 696 /* is this a partial page at end of file? */ 704 697 if (page_off >= ceph_wbc.i_size) { 705 - dout("folio at %lu beyond eof %llu\n", folio->index, 706 - ceph_wbc.i_size); 698 + doutc(cl, "%llx.%llx folio at %lu beyond eof %llu\n", 699 + ceph_vinop(inode), folio->index, ceph_wbc.i_size); 707 700 folio_invalidate(folio, 0, folio_size(folio)); 708 701 return 0; 709 702 } ··· 712 705 len = ceph_wbc.i_size - page_off; 713 706 714 707 wlen = IS_ENCRYPTED(inode) ? round_up(len, CEPH_FSCRYPT_BLOCK_SIZE) : len; 715 - dout("writepage %p page %p index %lu on %llu~%llu snapc %p seq %lld\n", 716 - inode, page, page->index, page_off, wlen, snapc, snapc->seq); 708 + doutc(cl, "%llx.%llx page %p index %lu on %llu~%llu snapc %p seq %lld\n", 709 + ceph_vinop(inode), page, page->index, page_off, wlen, snapc, 710 + snapc->seq); 717 711 718 712 if (atomic_long_inc_return(&fsc->writeback_count) > 719 713 CONGESTION_ON_THRESH(fsc->mount_options->congestion_kb)) ··· 755 747 osd_req_op_extent_osd_data_pages(req, 0, 756 748 bounce_page ? &bounce_page : &page, wlen, 0, 757 749 false, false); 758 - dout("writepage %llu~%llu (%llu bytes, %sencrypted)\n", 759 - page_off, len, wlen, IS_ENCRYPTED(inode) ? "" : "not "); 750 + doutc(cl, "%llx.%llx %llu~%llu (%llu bytes, %sencrypted)\n", 751 + ceph_vinop(inode), page_off, len, wlen, 752 + IS_ENCRYPTED(inode) ? "" : "not "); 760 753 761 754 req->r_mtime = inode_get_mtime(inode); 762 755 ceph_osdc_start_request(osdc, req); ··· 776 767 wbc = &tmp_wbc; 777 768 if (err == -ERESTARTSYS) { 778 769 /* killed by SIGKILL */ 779 - dout("writepage interrupted page %p\n", page); 770 + doutc(cl, "%llx.%llx interrupted page %p\n", 771 + ceph_vinop(inode), page); 780 772 redirty_page_for_writepage(wbc, page); 781 773 end_page_writeback(page); 782 774 return err; 783 775 } 784 776 if (err == -EBLOCKLISTED) 785 777 fsc->blocklisted = true; 786 - dout("writepage setting page/mapping error %d %p\n", 787 - err, page); 778 + doutc(cl, "%llx.%llx setting page/mapping error %d %p\n", 779 + ceph_vinop(inode), err, page); 788 780 mapping_set_error(&inode->i_data, err); 789 781 wbc->pages_skipped++; 790 782 } else { 791 - dout("writepage cleaned page %p\n", page); 783 + doutc(cl, "%llx.%llx cleaned page %p\n", 784 + ceph_vinop(inode), page); 792 785 err = 0; /* vfs expects us to return 0 */ 793 786 } 794 787 oldest = detach_page_private(page); ··· 814 803 ihold(inode); 815 804 816 805 if (wbc->sync_mode == WB_SYNC_NONE && 817 - ceph_inode_to_client(inode)->write_congested) 806 + ceph_inode_to_fs_client(inode)->write_congested) 818 807 return AOP_WRITEPAGE_ACTIVATE; 819 808 820 809 wait_on_page_fscache(page); ··· 840 829 { 841 830 struct inode *inode = req->r_inode; 842 831 struct ceph_inode_info *ci = ceph_inode(inode); 832 + struct ceph_client *cl = ceph_inode_to_client(inode); 843 833 struct ceph_osd_data *osd_data; 844 834 struct page *page; 845 835 int num_pages, total_pages = 0; ··· 848 836 int rc = req->r_result; 849 837 struct ceph_snap_context *snapc = req->r_snapc; 850 838 struct address_space *mapping = inode->i_mapping; 851 - struct ceph_fs_client *fsc = ceph_inode_to_client(inode); 839 + struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode); 852 840 unsigned int len = 0; 853 841 bool remove_page; 854 842 855 - dout("writepages_finish %p rc %d\n", inode, rc); 843 + doutc(cl, "%llx.%llx rc %d\n", ceph_vinop(inode), rc); 856 844 if (rc < 0) { 857 845 mapping_set_error(mapping, rc); 858 846 ceph_set_error_write(ci); ··· 874 862 /* clean all pages */ 875 863 for (i = 0; i < req->r_num_ops; i++) { 876 864 if (req->r_ops[i].op != CEPH_OSD_OP_WRITE) { 877 - pr_warn("%s incorrect op %d req %p index %d tid %llu\n", 878 - __func__, req->r_ops[i].op, req, i, req->r_tid); 865 + pr_warn_client(cl, 866 + "%llx.%llx incorrect op %d req %p index %d tid %llu\n", 867 + ceph_vinop(inode), req->r_ops[i].op, req, i, 868 + req->r_tid); 879 869 break; 880 870 } 881 871 ··· 904 890 905 891 ceph_put_snap_context(detach_page_private(page)); 906 892 end_page_writeback(page); 907 - dout("unlocking %p\n", page); 893 + doutc(cl, "unlocking %p\n", page); 908 894 909 895 if (remove_page) 910 896 generic_error_remove_page(inode->i_mapping, ··· 912 898 913 899 unlock_page(page); 914 900 } 915 - dout("writepages_finish %p wrote %llu bytes cleaned %d pages\n", 916 - inode, osd_data->length, rc >= 0 ? num_pages : 0); 901 + doutc(cl, "%llx.%llx wrote %llu bytes cleaned %d pages\n", 902 + ceph_vinop(inode), osd_data->length, 903 + rc >= 0 ? num_pages : 0); 917 904 918 905 release_pages(osd_data->pages, num_pages); 919 906 } ··· 941 926 { 942 927 struct inode *inode = mapping->host; 943 928 struct ceph_inode_info *ci = ceph_inode(inode); 944 - struct ceph_fs_client *fsc = ceph_inode_to_client(inode); 929 + struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode); 930 + struct ceph_client *cl = fsc->client; 945 931 struct ceph_vino vino = ceph_vino(inode); 946 932 pgoff_t index, start_index, end = -1; 947 933 struct ceph_snap_context *snapc = NULL, *last_snapc = NULL, *pgsnapc; ··· 960 944 fsc->write_congested) 961 945 return 0; 962 946 963 - dout("writepages_start %p (mode=%s)\n", inode, 964 - wbc->sync_mode == WB_SYNC_NONE ? "NONE" : 965 - (wbc->sync_mode == WB_SYNC_ALL ? "ALL" : "HOLD")); 947 + doutc(cl, "%llx.%llx (mode=%s)\n", ceph_vinop(inode), 948 + wbc->sync_mode == WB_SYNC_NONE ? "NONE" : 949 + (wbc->sync_mode == WB_SYNC_ALL ? "ALL" : "HOLD")); 966 950 967 951 if (ceph_inode_is_shutdown(inode)) { 968 952 if (ci->i_wrbuffer_ref > 0) { 969 - pr_warn_ratelimited( 970 - "writepage_start %p %lld forced umount\n", 971 - inode, ceph_ino(inode)); 953 + pr_warn_ratelimited_client(cl, 954 + "%llx.%llx %lld forced umount\n", 955 + ceph_vinop(inode), ceph_ino(inode)); 972 956 } 973 957 mapping_set_error(mapping, -EIO); 974 958 return -EIO; /* we're in a forced umount, don't write! */ ··· 992 976 if (!snapc) { 993 977 /* hmm, why does writepages get called when there 994 978 is no dirty data? */ 995 - dout(" no snap context with dirty data?\n"); 979 + doutc(cl, " no snap context with dirty data?\n"); 996 980 goto out; 997 981 } 998 - dout(" oldest snapc is %p seq %lld (%d snaps)\n", 999 - snapc, snapc->seq, snapc->num_snaps); 982 + doutc(cl, " oldest snapc is %p seq %lld (%d snaps)\n", snapc, 983 + snapc->seq, snapc->num_snaps); 1000 984 1001 985 should_loop = false; 1002 986 if (ceph_wbc.head_snapc && snapc != last_snapc) { ··· 1006 990 end = -1; 1007 991 if (index > 0) 1008 992 should_loop = true; 1009 - dout(" cyclic, start at %lu\n", index); 993 + doutc(cl, " cyclic, start at %lu\n", index); 1010 994 } else { 1011 995 index = wbc->range_start >> PAGE_SHIFT; 1012 996 end = wbc->range_end >> PAGE_SHIFT; 1013 997 if (wbc->range_start == 0 && wbc->range_end == LLONG_MAX) 1014 998 range_whole = true; 1015 - dout(" not cyclic, %lu to %lu\n", index, end); 999 + doutc(cl, " not cyclic, %lu to %lu\n", index, end); 1016 1000 } 1017 1001 } else if (!ceph_wbc.head_snapc) { 1018 1002 /* Do not respect wbc->range_{start,end}. Dirty pages ··· 1021 1005 * associated with 'snapc' get written */ 1022 1006 if (index > 0) 1023 1007 should_loop = true; 1024 - dout(" non-head snapc, range whole\n"); 1008 + doutc(cl, " non-head snapc, range whole\n"); 1025 1009 } 1026 1010 1027 1011 if (wbc->sync_mode == WB_SYNC_ALL || wbc->tagged_writepages) ··· 1044 1028 get_more_pages: 1045 1029 nr_folios = filemap_get_folios_tag(mapping, &index, 1046 1030 end, tag, &fbatch); 1047 - dout("pagevec_lookup_range_tag got %d\n", nr_folios); 1031 + doutc(cl, "pagevec_lookup_range_tag got %d\n", nr_folios); 1048 1032 if (!nr_folios && !locked_pages) 1049 1033 break; 1050 1034 for (i = 0; i < nr_folios && locked_pages < max_pages; i++) { 1051 1035 page = &fbatch.folios[i]->page; 1052 - dout("? %p idx %lu\n", page, page->index); 1036 + doutc(cl, "? %p idx %lu\n", page, page->index); 1053 1037 if (locked_pages == 0) 1054 1038 lock_page(page); /* first page */ 1055 1039 else if (!trylock_page(page)) ··· 1058 1042 /* only dirty pages, or our accounting breaks */ 1059 1043 if (unlikely(!PageDirty(page)) || 1060 1044 unlikely(page->mapping != mapping)) { 1061 - dout("!dirty or !mapping %p\n", page); 1045 + doutc(cl, "!dirty or !mapping %p\n", page); 1062 1046 unlock_page(page); 1063 1047 continue; 1064 1048 } 1065 1049 /* only if matching snap context */ 1066 1050 pgsnapc = page_snap_context(page); 1067 1051 if (pgsnapc != snapc) { 1068 - dout("page snapc %p %lld != oldest %p %lld\n", 1069 - pgsnapc, pgsnapc->seq, snapc, snapc->seq); 1052 + doutc(cl, "page snapc %p %lld != oldest %p %lld\n", 1053 + pgsnapc, pgsnapc->seq, snapc, snapc->seq); 1070 1054 if (!should_loop && 1071 1055 !ceph_wbc.head_snapc && 1072 1056 wbc->sync_mode != WB_SYNC_NONE) ··· 1077 1061 if (page_offset(page) >= ceph_wbc.i_size) { 1078 1062 struct folio *folio = page_folio(page); 1079 1063 1080 - dout("folio at %lu beyond eof %llu\n", 1081 - folio->index, ceph_wbc.i_size); 1064 + doutc(cl, "folio at %lu beyond eof %llu\n", 1065 + folio->index, ceph_wbc.i_size); 1082 1066 if ((ceph_wbc.size_stable || 1083 1067 folio_pos(folio) >= i_size_read(inode)) && 1084 1068 folio_clear_dirty_for_io(folio)) ··· 1088 1072 continue; 1089 1073 } 1090 1074 if (strip_unit_end && (page->index > strip_unit_end)) { 1091 - dout("end of strip unit %p\n", page); 1075 + doutc(cl, "end of strip unit %p\n", page); 1092 1076 unlock_page(page); 1093 1077 break; 1094 1078 } 1095 1079 if (PageWriteback(page) || PageFsCache(page)) { 1096 1080 if (wbc->sync_mode == WB_SYNC_NONE) { 1097 - dout("%p under writeback\n", page); 1081 + doutc(cl, "%p under writeback\n", page); 1098 1082 unlock_page(page); 1099 1083 continue; 1100 1084 } 1101 - dout("waiting on writeback %p\n", page); 1085 + doutc(cl, "waiting on writeback %p\n", page); 1102 1086 wait_on_page_writeback(page); 1103 1087 wait_on_page_fscache(page); 1104 1088 } 1105 1089 1106 1090 if (!clear_page_dirty_for_io(page)) { 1107 - dout("%p !clear_page_dirty_for_io\n", page); 1091 + doutc(cl, "%p !clear_page_dirty_for_io\n", page); 1108 1092 unlock_page(page); 1109 1093 continue; 1110 1094 } ··· 1159 1143 } 1160 1144 1161 1145 /* note position of first page in fbatch */ 1162 - dout("%p will write page %p idx %lu\n", 1163 - inode, page, page->index); 1146 + doutc(cl, "%llx.%llx will write page %p idx %lu\n", 1147 + ceph_vinop(inode), page, page->index); 1164 1148 1165 1149 if (atomic_long_inc_return(&fsc->writeback_count) > 1166 1150 CONGESTION_ON_THRESH( ··· 1174 1158 locked_pages ? GFP_NOWAIT : GFP_NOFS); 1175 1159 if (IS_ERR(pages[locked_pages])) { 1176 1160 if (PTR_ERR(pages[locked_pages]) == -EINVAL) 1177 - pr_err("%s: inode->i_blkbits=%hhu\n", 1178 - __func__, inode->i_blkbits); 1161 + pr_err_client(cl, 1162 + "inode->i_blkbits=%hhu\n", 1163 + inode->i_blkbits); 1179 1164 /* better not fail on first page! */ 1180 1165 BUG_ON(locked_pages == 0); 1181 1166 pages[locked_pages] = NULL; ··· 1210 1193 1211 1194 if (nr_folios && i == nr_folios && 1212 1195 locked_pages < max_pages) { 1213 - dout("reached end fbatch, trying for more\n"); 1196 + doutc(cl, "reached end fbatch, trying for more\n"); 1214 1197 folio_batch_release(&fbatch); 1215 1198 goto get_more_pages; 1216 1199 } ··· 1271 1254 /* Start a new extent */ 1272 1255 osd_req_op_extent_dup_last(req, op_idx, 1273 1256 cur_offset - offset); 1274 - dout("writepages got pages at %llu~%llu\n", 1275 - offset, len); 1257 + doutc(cl, "got pages at %llu~%llu\n", offset, 1258 + len); 1276 1259 osd_req_op_extent_osd_data_pages(req, op_idx, 1277 1260 data_pages, len, 0, 1278 1261 from_pool, false); ··· 1305 1288 if (IS_ENCRYPTED(inode)) 1306 1289 len = round_up(len, CEPH_FSCRYPT_BLOCK_SIZE); 1307 1290 1308 - dout("writepages got pages at %llu~%llu\n", offset, len); 1291 + doutc(cl, "got pages at %llu~%llu\n", offset, len); 1309 1292 1310 1293 if (IS_ENCRYPTED(inode) && 1311 1294 ((offset | len) & ~CEPH_FSCRYPT_BLOCK_MASK)) 1312 - pr_warn("%s: bad encrypted write offset=%lld len=%llu\n", 1313 - __func__, offset, len); 1295 + pr_warn_client(cl, 1296 + "bad encrypted write offset=%lld len=%llu\n", 1297 + offset, len); 1314 1298 1315 1299 osd_req_op_extent_osd_data_pages(req, op_idx, data_pages, len, 1316 1300 0, from_pool, false); ··· 1363 1345 done = true; 1364 1346 1365 1347 release_folios: 1366 - dout("folio_batch release on %d folios (%p)\n", (int)fbatch.nr, 1367 - fbatch.nr ? fbatch.folios[0] : NULL); 1348 + doutc(cl, "folio_batch release on %d folios (%p)\n", 1349 + (int)fbatch.nr, fbatch.nr ? fbatch.folios[0] : NULL); 1368 1350 folio_batch_release(&fbatch); 1369 1351 } 1370 1352 1371 1353 if (should_loop && !done) { 1372 1354 /* more to do; loop back to beginning of file */ 1373 - dout("writepages looping back to beginning of file\n"); 1355 + doutc(cl, "looping back to beginning of file\n"); 1374 1356 end = start_index - 1; /* OK even when start_index == 0 */ 1375 1357 1376 1358 /* to write dirty pages associated with next snapc, ··· 1408 1390 out: 1409 1391 ceph_osdc_put_request(req); 1410 1392 ceph_put_snap_context(last_snapc); 1411 - dout("writepages dend - startone, rc = %d\n", rc); 1393 + doutc(cl, "%llx.%llx dend - startone, rc = %d\n", ceph_vinop(inode), 1394 + rc); 1412 1395 return rc; 1413 1396 } 1414 1397 ··· 1443 1424 ceph_find_incompatible(struct page *page) 1444 1425 { 1445 1426 struct inode *inode = page->mapping->host; 1427 + struct ceph_client *cl = ceph_inode_to_client(inode); 1446 1428 struct ceph_inode_info *ci = ceph_inode(inode); 1447 1429 1448 1430 if (ceph_inode_is_shutdown(inode)) { 1449 - dout(" page %p %llx:%llx is shutdown\n", page, 1450 - ceph_vinop(inode)); 1431 + doutc(cl, " %llx.%llx page %p is shutdown\n", 1432 + ceph_vinop(inode), page); 1451 1433 return ERR_PTR(-ESTALE); 1452 1434 } 1453 1435 ··· 1469 1449 if (snapc->seq > oldest->seq) { 1470 1450 /* not writeable -- return it for the caller to deal with */ 1471 1451 ceph_put_snap_context(oldest); 1472 - dout(" page %p snapc %p not current or oldest\n", page, snapc); 1452 + doutc(cl, " %llx.%llx page %p snapc %p not current or oldest\n", 1453 + ceph_vinop(inode), page, snapc); 1473 1454 return ceph_get_snap_context(snapc); 1474 1455 } 1475 1456 ceph_put_snap_context(oldest); 1476 1457 1477 1458 /* yay, writeable, do it now (without dropping page lock) */ 1478 - dout(" page %p snapc %p not current, but oldest\n", page, snapc); 1459 + doutc(cl, " %llx.%llx page %p snapc %p not current, but oldest\n", 1460 + ceph_vinop(inode), page, snapc); 1479 1461 if (clear_page_dirty_for_io(page)) { 1480 1462 int r = writepage_nounlock(page, NULL); 1481 1463 if (r < 0) ··· 1546 1524 { 1547 1525 struct folio *folio = page_folio(subpage); 1548 1526 struct inode *inode = file_inode(file); 1527 + struct ceph_client *cl = ceph_inode_to_client(inode); 1549 1528 bool check_cap = false; 1550 1529 1551 - dout("write_end file %p inode %p folio %p %d~%d (%d)\n", file, 1552 - inode, folio, (int)pos, (int)copied, (int)len); 1530 + doutc(cl, "%llx.%llx file %p folio %p %d~%d (%d)\n", ceph_vinop(inode), 1531 + file, folio, (int)pos, (int)copied, (int)len); 1553 1532 1554 1533 if (!folio_test_uptodate(folio)) { 1555 1534 /* just return that nothing was copied on a short copy */ ··· 1610 1587 struct vm_area_struct *vma = vmf->vma; 1611 1588 struct inode *inode = file_inode(vma->vm_file); 1612 1589 struct ceph_inode_info *ci = ceph_inode(inode); 1590 + struct ceph_client *cl = ceph_inode_to_client(inode); 1613 1591 struct ceph_file_info *fi = vma->vm_file->private_data; 1614 1592 loff_t off = (loff_t)vmf->pgoff << PAGE_SHIFT; 1615 1593 int want, got, err; ··· 1622 1598 1623 1599 ceph_block_sigs(&oldset); 1624 1600 1625 - dout("filemap_fault %p %llx.%llx %llu trying to get caps\n", 1626 - inode, ceph_vinop(inode), off); 1601 + doutc(cl, "%llx.%llx %llu trying to get caps\n", 1602 + ceph_vinop(inode), off); 1627 1603 if (fi->fmode & CEPH_FILE_MODE_LAZY) 1628 1604 want = CEPH_CAP_FILE_CACHE | CEPH_CAP_FILE_LAZYIO; 1629 1605 else ··· 1634 1610 if (err < 0) 1635 1611 goto out_restore; 1636 1612 1637 - dout("filemap_fault %p %llu got cap refs on %s\n", 1638 - inode, off, ceph_cap_string(got)); 1613 + doutc(cl, "%llx.%llx %llu got cap refs on %s\n", ceph_vinop(inode), 1614 + off, ceph_cap_string(got)); 1639 1615 1640 1616 if ((got & (CEPH_CAP_FILE_CACHE | CEPH_CAP_FILE_LAZYIO)) || 1641 1617 !ceph_has_inline_data(ci)) { ··· 1643 1619 ceph_add_rw_context(fi, &rw_ctx); 1644 1620 ret = filemap_fault(vmf); 1645 1621 ceph_del_rw_context(fi, &rw_ctx); 1646 - dout("filemap_fault %p %llu drop cap refs %s ret %x\n", 1647 - inode, off, ceph_cap_string(got), ret); 1622 + doutc(cl, "%llx.%llx %llu drop cap refs %s ret %x\n", 1623 + ceph_vinop(inode), off, ceph_cap_string(got), ret); 1648 1624 } else 1649 1625 err = -EAGAIN; 1650 1626 ··· 1685 1661 ret = VM_FAULT_MAJOR | VM_FAULT_LOCKED; 1686 1662 out_inline: 1687 1663 filemap_invalidate_unlock_shared(mapping); 1688 - dout("filemap_fault %p %llu read inline data ret %x\n", 1689 - inode, off, ret); 1664 + doutc(cl, "%llx.%llx %llu read inline data ret %x\n", 1665 + ceph_vinop(inode), off, ret); 1690 1666 } 1691 1667 out_restore: 1692 1668 ceph_restore_sigs(&oldset); ··· 1700 1676 { 1701 1677 struct vm_area_struct *vma = vmf->vma; 1702 1678 struct inode *inode = file_inode(vma->vm_file); 1679 + struct ceph_client *cl = ceph_inode_to_client(inode); 1703 1680 struct ceph_inode_info *ci = ceph_inode(inode); 1704 1681 struct ceph_file_info *fi = vma->vm_file->private_data; 1705 1682 struct ceph_cap_flush *prealloc_cf; ··· 1727 1702 else 1728 1703 len = offset_in_thp(page, size); 1729 1704 1730 - dout("page_mkwrite %p %llx.%llx %llu~%zd getting caps i_size %llu\n", 1731 - inode, ceph_vinop(inode), off, len, size); 1705 + doutc(cl, "%llx.%llx %llu~%zd getting caps i_size %llu\n", 1706 + ceph_vinop(inode), off, len, size); 1732 1707 if (fi->fmode & CEPH_FILE_MODE_LAZY) 1733 1708 want = CEPH_CAP_FILE_BUFFER | CEPH_CAP_FILE_LAZYIO; 1734 1709 else ··· 1739 1714 if (err < 0) 1740 1715 goto out_free; 1741 1716 1742 - dout("page_mkwrite %p %llu~%zd got cap refs on %s\n", 1743 - inode, off, len, ceph_cap_string(got)); 1717 + doutc(cl, "%llx.%llx %llu~%zd got cap refs on %s\n", ceph_vinop(inode), 1718 + off, len, ceph_cap_string(got)); 1744 1719 1745 1720 /* Update time before taking page lock */ 1746 1721 file_update_time(vma->vm_file); ··· 1788 1763 __mark_inode_dirty(inode, dirty); 1789 1764 } 1790 1765 1791 - dout("page_mkwrite %p %llu~%zd dropping cap refs on %s ret %x\n", 1792 - inode, off, len, ceph_cap_string(got), ret); 1766 + doutc(cl, "%llx.%llx %llu~%zd dropping cap refs on %s ret %x\n", 1767 + ceph_vinop(inode), off, len, ceph_cap_string(got), ret); 1793 1768 ceph_put_cap_refs_async(ci, got); 1794 1769 out_free: 1795 1770 ceph_restore_sigs(&oldset); ··· 1803 1778 void ceph_fill_inline_data(struct inode *inode, struct page *locked_page, 1804 1779 char *data, size_t len) 1805 1780 { 1781 + struct ceph_client *cl = ceph_inode_to_client(inode); 1806 1782 struct address_space *mapping = inode->i_mapping; 1807 1783 struct page *page; 1808 1784 ··· 1824 1798 } 1825 1799 } 1826 1800 1827 - dout("fill_inline_data %p %llx.%llx len %zu locked_page %p\n", 1828 - inode, ceph_vinop(inode), len, locked_page); 1801 + doutc(cl, "%p %llx.%llx len %zu locked_page %p\n", inode, 1802 + ceph_vinop(inode), len, locked_page); 1829 1803 1830 1804 if (len > 0) { 1831 1805 void *kaddr = kmap_atomic(page); ··· 1849 1823 { 1850 1824 struct inode *inode = file_inode(file); 1851 1825 struct ceph_inode_info *ci = ceph_inode(inode); 1852 - struct ceph_fs_client *fsc = ceph_inode_to_client(inode); 1826 + struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode); 1827 + struct ceph_client *cl = fsc->client; 1853 1828 struct ceph_osd_request *req = NULL; 1854 1829 struct ceph_cap_flush *prealloc_cf = NULL; 1855 1830 struct folio *folio = NULL; ··· 1863 1836 inline_version = ci->i_inline_version; 1864 1837 spin_unlock(&ci->i_ceph_lock); 1865 1838 1866 - dout("uninline_data %p %llx.%llx inline_version %llu\n", 1867 - inode, ceph_vinop(inode), inline_version); 1839 + doutc(cl, "%llx.%llx inline_version %llu\n", ceph_vinop(inode), 1840 + inline_version); 1868 1841 1869 1842 if (ceph_inode_is_shutdown(inode)) { 1870 1843 err = -EIO; ··· 1976 1949 } 1977 1950 out: 1978 1951 ceph_free_cap_flush(prealloc_cf); 1979 - dout("uninline_data %p %llx.%llx inline_version %llu = %d\n", 1980 - inode, ceph_vinop(inode), inline_version, err); 1952 + doutc(cl, "%llx.%llx inline_version %llu = %d\n", 1953 + ceph_vinop(inode), inline_version, err); 1981 1954 return err; 1982 1955 } 1983 1956 ··· 2004 1977 static int __ceph_pool_perm_get(struct ceph_inode_info *ci, 2005 1978 s64 pool, struct ceph_string *pool_ns) 2006 1979 { 2007 - struct ceph_fs_client *fsc = ceph_inode_to_client(&ci->netfs.inode); 1980 + struct ceph_fs_client *fsc = ceph_inode_to_fs_client(&ci->netfs.inode); 2008 1981 struct ceph_mds_client *mdsc = fsc->mdsc; 1982 + struct ceph_client *cl = fsc->client; 2009 1983 struct ceph_osd_request *rd_req = NULL, *wr_req = NULL; 2010 1984 struct rb_node **p, *parent; 2011 1985 struct ceph_pool_perm *perm; ··· 2041 2013 goto out; 2042 2014 2043 2015 if (pool_ns) 2044 - dout("__ceph_pool_perm_get pool %lld ns %.*s no perm cached\n", 2045 - pool, (int)pool_ns->len, pool_ns->str); 2016 + doutc(cl, "pool %lld ns %.*s no perm cached\n", pool, 2017 + (int)pool_ns->len, pool_ns->str); 2046 2018 else 2047 - dout("__ceph_pool_perm_get pool %lld no perm cached\n", pool); 2019 + doutc(cl, "pool %lld no perm cached\n", pool); 2048 2020 2049 2021 down_write(&mdsc->pool_perm_rwsem); 2050 2022 p = &mdsc->pool_perm_tree.rb_node; ··· 2169 2141 if (!err) 2170 2142 err = have; 2171 2143 if (pool_ns) 2172 - dout("__ceph_pool_perm_get pool %lld ns %.*s result = %d\n", 2173 - pool, (int)pool_ns->len, pool_ns->str, err); 2144 + doutc(cl, "pool %lld ns %.*s result = %d\n", pool, 2145 + (int)pool_ns->len, pool_ns->str, err); 2174 2146 else 2175 - dout("__ceph_pool_perm_get pool %lld result = %d\n", pool, err); 2147 + doutc(cl, "pool %lld result = %d\n", pool, err); 2176 2148 return err; 2177 2149 } 2178 2150 2179 2151 int ceph_pool_perm_check(struct inode *inode, int need) 2180 2152 { 2153 + struct ceph_client *cl = ceph_inode_to_client(inode); 2181 2154 struct ceph_inode_info *ci = ceph_inode(inode); 2182 2155 struct ceph_string *pool_ns; 2183 2156 s64 pool; ··· 2197 2168 return 0; 2198 2169 } 2199 2170 2200 - if (ceph_test_mount_opt(ceph_inode_to_client(inode), 2171 + if (ceph_test_mount_opt(ceph_inode_to_fs_client(inode), 2201 2172 NOPOOLPERM)) 2202 2173 return 0; 2203 2174 ··· 2208 2179 check: 2209 2180 if (flags & CEPH_I_POOL_PERM) { 2210 2181 if ((need & CEPH_CAP_FILE_RD) && !(flags & CEPH_I_POOL_RD)) { 2211 - dout("ceph_pool_perm_check pool %lld no read perm\n", 2212 - pool); 2182 + doutc(cl, "pool %lld no read perm\n", pool); 2213 2183 return -EPERM; 2214 2184 } 2215 2185 if ((need & CEPH_CAP_FILE_WR) && !(flags & CEPH_I_POOL_WR)) { 2216 - dout("ceph_pool_perm_check pool %lld no write perm\n", 2217 - pool); 2186 + doutc(cl, "pool %lld no write perm\n", pool); 2218 2187 return -EPERM; 2219 2188 } 2220 2189 return 0;
+1 -1
fs/ceph/cache.c
··· 15 15 void ceph_fscache_register_inode_cookie(struct inode *inode) 16 16 { 17 17 struct ceph_inode_info *ci = ceph_inode(inode); 18 - struct ceph_fs_client *fsc = ceph_inode_to_client(inode); 18 + struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode); 19 19 20 20 /* No caching for filesystem? */ 21 21 if (!fsc->fscache)
+437 -324
fs/ceph/caps.c
··· 186 186 mdsc->caps_avail_count += nr_caps; 187 187 } 188 188 189 - dout("%s: caps %d = %d used + %d resv + %d avail\n", 190 - __func__, 191 - mdsc->caps_total_count, mdsc->caps_use_count, 192 - mdsc->caps_reserve_count, mdsc->caps_avail_count); 189 + doutc(mdsc->fsc->client, 190 + "caps %d = %d used + %d resv + %d avail\n", 191 + mdsc->caps_total_count, mdsc->caps_use_count, 192 + mdsc->caps_reserve_count, mdsc->caps_avail_count); 193 193 BUG_ON(mdsc->caps_total_count != mdsc->caps_use_count + 194 194 mdsc->caps_reserve_count + 195 195 mdsc->caps_avail_count); ··· 202 202 int ceph_reserve_caps(struct ceph_mds_client *mdsc, 203 203 struct ceph_cap_reservation *ctx, int need) 204 204 { 205 + struct ceph_client *cl = mdsc->fsc->client; 205 206 int i, j; 206 207 struct ceph_cap *cap; 207 208 int have; ··· 213 212 struct ceph_mds_session *s; 214 213 LIST_HEAD(newcaps); 215 214 216 - dout("reserve caps ctx=%p need=%d\n", ctx, need); 215 + doutc(cl, "ctx=%p need=%d\n", ctx, need); 217 216 218 217 /* first reserve any caps that are already allocated */ 219 218 spin_lock(&mdsc->caps_list_lock); ··· 273 272 continue; 274 273 } 275 274 276 - pr_warn("reserve caps ctx=%p ENOMEM need=%d got=%d\n", 277 - ctx, need, have + alloc); 275 + pr_warn_client(cl, "ctx=%p ENOMEM need=%d got=%d\n", ctx, need, 276 + have + alloc); 278 277 err = -ENOMEM; 279 278 break; 280 279 } ··· 299 298 300 299 spin_unlock(&mdsc->caps_list_lock); 301 300 302 - dout("reserve caps ctx=%p %d = %d used + %d resv + %d avail\n", 303 - ctx, mdsc->caps_total_count, mdsc->caps_use_count, 304 - mdsc->caps_reserve_count, mdsc->caps_avail_count); 301 + doutc(cl, "ctx=%p %d = %d used + %d resv + %d avail\n", ctx, 302 + mdsc->caps_total_count, mdsc->caps_use_count, 303 + mdsc->caps_reserve_count, mdsc->caps_avail_count); 305 304 return err; 306 305 } 307 306 308 307 void ceph_unreserve_caps(struct ceph_mds_client *mdsc, 309 308 struct ceph_cap_reservation *ctx) 310 309 { 310 + struct ceph_client *cl = mdsc->fsc->client; 311 311 bool reclaim = false; 312 312 if (!ctx->count) 313 313 return; 314 314 315 - dout("unreserve caps ctx=%p count=%d\n", ctx, ctx->count); 315 + doutc(cl, "ctx=%p count=%d\n", ctx, ctx->count); 316 316 spin_lock(&mdsc->caps_list_lock); 317 317 __ceph_unreserve_caps(mdsc, ctx->count); 318 318 ctx->count = 0; ··· 330 328 struct ceph_cap *ceph_get_cap(struct ceph_mds_client *mdsc, 331 329 struct ceph_cap_reservation *ctx) 332 330 { 331 + struct ceph_client *cl = mdsc->fsc->client; 333 332 struct ceph_cap *cap = NULL; 334 333 335 334 /* temporary, until we do something about cap import/export */ ··· 362 359 } 363 360 364 361 spin_lock(&mdsc->caps_list_lock); 365 - dout("get_cap ctx=%p (%d) %d = %d used + %d resv + %d avail\n", 366 - ctx, ctx->count, mdsc->caps_total_count, mdsc->caps_use_count, 367 - mdsc->caps_reserve_count, mdsc->caps_avail_count); 362 + doutc(cl, "ctx=%p (%d) %d = %d used + %d resv + %d avail\n", ctx, 363 + ctx->count, mdsc->caps_total_count, mdsc->caps_use_count, 364 + mdsc->caps_reserve_count, mdsc->caps_avail_count); 368 365 BUG_ON(!ctx->count); 369 366 BUG_ON(ctx->count > mdsc->caps_reserve_count); 370 367 BUG_ON(list_empty(&mdsc->caps_list)); ··· 385 382 386 383 void ceph_put_cap(struct ceph_mds_client *mdsc, struct ceph_cap *cap) 387 384 { 385 + struct ceph_client *cl = mdsc->fsc->client; 386 + 388 387 spin_lock(&mdsc->caps_list_lock); 389 - dout("put_cap %p %d = %d used + %d resv + %d avail\n", 390 - cap, mdsc->caps_total_count, mdsc->caps_use_count, 391 - mdsc->caps_reserve_count, mdsc->caps_avail_count); 388 + doutc(cl, "%p %d = %d used + %d resv + %d avail\n", cap, 389 + mdsc->caps_total_count, mdsc->caps_use_count, 390 + mdsc->caps_reserve_count, mdsc->caps_avail_count); 392 391 mdsc->caps_use_count--; 393 392 /* 394 393 * Keep some preallocated caps around (ceph_min_count), to ··· 496 491 static void __cap_set_timeouts(struct ceph_mds_client *mdsc, 497 492 struct ceph_inode_info *ci) 498 493 { 494 + struct inode *inode = &ci->netfs.inode; 499 495 struct ceph_mount_options *opt = mdsc->fsc->mount_options; 496 + 500 497 ci->i_hold_caps_max = round_jiffies(jiffies + 501 498 opt->caps_wanted_delay_max * HZ); 502 - dout("__cap_set_timeouts %p %lu\n", &ci->netfs.inode, 503 - ci->i_hold_caps_max - jiffies); 499 + doutc(mdsc->fsc->client, "%p %llx.%llx %lu\n", inode, 500 + ceph_vinop(inode), ci->i_hold_caps_max - jiffies); 504 501 } 505 502 506 503 /* ··· 516 509 static void __cap_delay_requeue(struct ceph_mds_client *mdsc, 517 510 struct ceph_inode_info *ci) 518 511 { 519 - dout("__cap_delay_requeue %p flags 0x%lx at %lu\n", &ci->netfs.inode, 520 - ci->i_ceph_flags, ci->i_hold_caps_max); 512 + struct inode *inode = &ci->netfs.inode; 513 + 514 + doutc(mdsc->fsc->client, "%p %llx.%llx flags 0x%lx at %lu\n", 515 + inode, ceph_vinop(inode), ci->i_ceph_flags, 516 + ci->i_hold_caps_max); 521 517 if (!mdsc->stopping) { 522 518 spin_lock(&mdsc->cap_delay_lock); 523 519 if (!list_empty(&ci->i_cap_delay_list)) { ··· 543 533 static void __cap_delay_requeue_front(struct ceph_mds_client *mdsc, 544 534 struct ceph_inode_info *ci) 545 535 { 546 - dout("__cap_delay_requeue_front %p\n", &ci->netfs.inode); 536 + struct inode *inode = &ci->netfs.inode; 537 + 538 + doutc(mdsc->fsc->client, "%p %llx.%llx\n", inode, ceph_vinop(inode)); 547 539 spin_lock(&mdsc->cap_delay_lock); 548 540 ci->i_ceph_flags |= CEPH_I_FLUSH; 549 541 if (!list_empty(&ci->i_cap_delay_list)) ··· 562 550 static void __cap_delay_cancel(struct ceph_mds_client *mdsc, 563 551 struct ceph_inode_info *ci) 564 552 { 565 - dout("__cap_delay_cancel %p\n", &ci->netfs.inode); 553 + struct inode *inode = &ci->netfs.inode; 554 + 555 + doutc(mdsc->fsc->client, "%p %llx.%llx\n", inode, ceph_vinop(inode)); 566 556 if (list_empty(&ci->i_cap_delay_list)) 567 557 return; 568 558 spin_lock(&mdsc->cap_delay_lock); ··· 576 562 static void __check_cap_issue(struct ceph_inode_info *ci, struct ceph_cap *cap, 577 563 unsigned issued) 578 564 { 565 + struct inode *inode = &ci->netfs.inode; 566 + struct ceph_client *cl = ceph_inode_to_client(inode); 567 + 579 568 unsigned had = __ceph_caps_issued(ci, NULL); 580 569 581 570 lockdep_assert_held(&ci->i_ceph_lock); ··· 603 586 if (issued & CEPH_CAP_FILE_SHARED) 604 587 atomic_inc(&ci->i_shared_gen); 605 588 if (S_ISDIR(ci->netfs.inode.i_mode)) { 606 - dout(" marking %p NOT complete\n", &ci->netfs.inode); 589 + doutc(cl, " marking %p NOT complete\n", inode); 607 590 __ceph_dir_clear_complete(ci); 608 591 } 609 592 } ··· 652 635 unsigned seq, unsigned mseq, u64 realmino, int flags, 653 636 struct ceph_cap **new_cap) 654 637 { 655 - struct ceph_mds_client *mdsc = ceph_inode_to_client(inode)->mdsc; 638 + struct ceph_mds_client *mdsc = ceph_inode_to_fs_client(inode)->mdsc; 639 + struct ceph_client *cl = ceph_inode_to_client(inode); 656 640 struct ceph_inode_info *ci = ceph_inode(inode); 657 641 struct ceph_cap *cap; 658 642 int mds = session->s_mds; ··· 662 644 663 645 lockdep_assert_held(&ci->i_ceph_lock); 664 646 665 - dout("add_cap %p mds%d cap %llx %s seq %d\n", inode, 666 - session->s_mds, cap_id, ceph_cap_string(issued), seq); 647 + doutc(cl, "%p %llx.%llx mds%d cap %llx %s seq %d\n", inode, 648 + ceph_vinop(inode), session->s_mds, cap_id, 649 + ceph_cap_string(issued), seq); 667 650 668 651 gen = atomic_read(&session->s_cap_gen); 669 652 ··· 742 723 actual_wanted = __ceph_caps_wanted(ci); 743 724 if ((wanted & ~actual_wanted) || 744 725 (issued & ~actual_wanted & CEPH_CAP_ANY_WR)) { 745 - dout(" issued %s, mds wanted %s, actual %s, queueing\n", 746 - ceph_cap_string(issued), ceph_cap_string(wanted), 747 - ceph_cap_string(actual_wanted)); 726 + doutc(cl, "issued %s, mds wanted %s, actual %s, queueing\n", 727 + ceph_cap_string(issued), ceph_cap_string(wanted), 728 + ceph_cap_string(actual_wanted)); 748 729 __cap_delay_requeue(mdsc, ci); 749 730 } 750 731 ··· 761 742 WARN_ON(ci->i_auth_cap == cap); 762 743 } 763 744 764 - dout("add_cap inode %p (%llx.%llx) cap %p %s now %s seq %d mds%d\n", 765 - inode, ceph_vinop(inode), cap, ceph_cap_string(issued), 766 - ceph_cap_string(issued|cap->issued), seq, mds); 745 + doutc(cl, "inode %p %llx.%llx cap %p %s now %s seq %d mds%d\n", 746 + inode, ceph_vinop(inode), cap, ceph_cap_string(issued), 747 + ceph_cap_string(issued|cap->issued), seq, mds); 767 748 cap->cap_id = cap_id; 768 749 cap->issued = issued; 769 750 cap->implemented |= issued; ··· 785 766 */ 786 767 static int __cap_is_valid(struct ceph_cap *cap) 787 768 { 769 + struct inode *inode = &cap->ci->netfs.inode; 770 + struct ceph_client *cl = cap->session->s_mdsc->fsc->client; 788 771 unsigned long ttl; 789 772 u32 gen; 790 773 ··· 794 773 ttl = cap->session->s_cap_ttl; 795 774 796 775 if (cap->cap_gen < gen || time_after_eq(jiffies, ttl)) { 797 - dout("__cap_is_valid %p cap %p issued %s " 798 - "but STALE (gen %u vs %u)\n", &cap->ci->netfs.inode, 799 - cap, ceph_cap_string(cap->issued), cap->cap_gen, gen); 776 + doutc(cl, "%p %llx.%llx cap %p issued %s but STALE (gen %u vs %u)\n", 777 + inode, ceph_vinop(inode), cap, 778 + ceph_cap_string(cap->issued), cap->cap_gen, gen); 800 779 return 0; 801 780 } 802 781 ··· 810 789 */ 811 790 int __ceph_caps_issued(struct ceph_inode_info *ci, int *implemented) 812 791 { 792 + struct inode *inode = &ci->netfs.inode; 793 + struct ceph_client *cl = ceph_inode_to_client(inode); 813 794 int have = ci->i_snap_caps; 814 795 struct ceph_cap *cap; 815 796 struct rb_node *p; ··· 822 799 cap = rb_entry(p, struct ceph_cap, ci_node); 823 800 if (!__cap_is_valid(cap)) 824 801 continue; 825 - dout("__ceph_caps_issued %p cap %p issued %s\n", 826 - &ci->netfs.inode, cap, ceph_cap_string(cap->issued)); 802 + doutc(cl, "%p %llx.%llx cap %p issued %s\n", inode, 803 + ceph_vinop(inode), cap, ceph_cap_string(cap->issued)); 827 804 have |= cap->issued; 828 805 if (implemented) 829 806 *implemented |= cap->implemented; ··· 866 843 */ 867 844 static void __touch_cap(struct ceph_cap *cap) 868 845 { 846 + struct inode *inode = &cap->ci->netfs.inode; 869 847 struct ceph_mds_session *s = cap->session; 848 + struct ceph_client *cl = s->s_mdsc->fsc->client; 870 849 871 850 spin_lock(&s->s_cap_lock); 872 851 if (!s->s_cap_iterator) { 873 - dout("__touch_cap %p cap %p mds%d\n", &cap->ci->netfs.inode, cap, 874 - s->s_mds); 852 + doutc(cl, "%p %llx.%llx cap %p mds%d\n", inode, 853 + ceph_vinop(inode), cap, s->s_mds); 875 854 list_move_tail(&cap->session_caps, &s->s_caps); 876 855 } else { 877 - dout("__touch_cap %p cap %p mds%d NOP, iterating over caps\n", 878 - &cap->ci->netfs.inode, cap, s->s_mds); 856 + doutc(cl, "%p %llx.%llx cap %p mds%d NOP, iterating over caps\n", 857 + inode, ceph_vinop(inode), cap, s->s_mds); 879 858 } 880 859 spin_unlock(&s->s_cap_lock); 881 860 } ··· 889 864 */ 890 865 int __ceph_caps_issued_mask(struct ceph_inode_info *ci, int mask, int touch) 891 866 { 867 + struct inode *inode = &ci->netfs.inode; 868 + struct ceph_client *cl = ceph_inode_to_client(inode); 892 869 struct ceph_cap *cap; 893 870 struct rb_node *p; 894 871 int have = ci->i_snap_caps; 895 872 896 873 if ((have & mask) == mask) { 897 - dout("__ceph_caps_issued_mask ino 0x%llx snap issued %s" 898 - " (mask %s)\n", ceph_ino(&ci->netfs.inode), 899 - ceph_cap_string(have), 900 - ceph_cap_string(mask)); 874 + doutc(cl, "mask %p %llx.%llx snap issued %s (mask %s)\n", 875 + inode, ceph_vinop(inode), ceph_cap_string(have), 876 + ceph_cap_string(mask)); 901 877 return 1; 902 878 } 903 879 ··· 907 881 if (!__cap_is_valid(cap)) 908 882 continue; 909 883 if ((cap->issued & mask) == mask) { 910 - dout("__ceph_caps_issued_mask ino 0x%llx cap %p issued %s" 911 - " (mask %s)\n", ceph_ino(&ci->netfs.inode), cap, 912 - ceph_cap_string(cap->issued), 913 - ceph_cap_string(mask)); 884 + doutc(cl, "mask %p %llx.%llx cap %p issued %s (mask %s)\n", 885 + inode, ceph_vinop(inode), cap, 886 + ceph_cap_string(cap->issued), 887 + ceph_cap_string(mask)); 914 888 if (touch) 915 889 __touch_cap(cap); 916 890 return 1; ··· 919 893 /* does a combination of caps satisfy mask? */ 920 894 have |= cap->issued; 921 895 if ((have & mask) == mask) { 922 - dout("__ceph_caps_issued_mask ino 0x%llx combo issued %s" 923 - " (mask %s)\n", ceph_ino(&ci->netfs.inode), 924 - ceph_cap_string(cap->issued), 925 - ceph_cap_string(mask)); 896 + doutc(cl, "mask %p %llx.%llx combo issued %s (mask %s)\n", 897 + inode, ceph_vinop(inode), 898 + ceph_cap_string(cap->issued), 899 + ceph_cap_string(mask)); 926 900 if (touch) { 927 901 struct rb_node *q; 928 902 ··· 948 922 int __ceph_caps_issued_mask_metric(struct ceph_inode_info *ci, int mask, 949 923 int touch) 950 924 { 951 - struct ceph_fs_client *fsc = ceph_sb_to_client(ci->netfs.inode.i_sb); 925 + struct ceph_fs_client *fsc = ceph_sb_to_fs_client(ci->netfs.inode.i_sb); 952 926 int r; 953 927 954 928 r = __ceph_caps_issued_mask(ci, mask, touch); ··· 980 954 int ceph_caps_revoking(struct ceph_inode_info *ci, int mask) 981 955 { 982 956 struct inode *inode = &ci->netfs.inode; 957 + struct ceph_client *cl = ceph_inode_to_client(inode); 983 958 int ret; 984 959 985 960 spin_lock(&ci->i_ceph_lock); 986 961 ret = __ceph_caps_revoking_other(ci, NULL, mask); 987 962 spin_unlock(&ci->i_ceph_lock); 988 - dout("ceph_caps_revoking %p %s = %d\n", inode, 989 - ceph_cap_string(mask), ret); 963 + doutc(cl, "%p %llx.%llx %s = %d\n", inode, ceph_vinop(inode), 964 + ceph_cap_string(mask), ret); 990 965 return ret; 991 966 } 992 967 ··· 1023 996 const int WR_SHIFT = ffs(CEPH_FILE_MODE_WR); 1024 997 const int LAZY_SHIFT = ffs(CEPH_FILE_MODE_LAZY); 1025 998 struct ceph_mount_options *opt = 1026 - ceph_inode_to_client(&ci->netfs.inode)->mount_options; 999 + ceph_inode_to_fs_client(&ci->netfs.inode)->mount_options; 1027 1000 unsigned long used_cutoff = jiffies - opt->caps_wanted_delay_max * HZ; 1028 1001 unsigned long idle_cutoff = jiffies - opt->caps_wanted_delay_min * HZ; 1029 1002 ··· 1134 1107 void __ceph_remove_cap(struct ceph_cap *cap, bool queue_release) 1135 1108 { 1136 1109 struct ceph_mds_session *session = cap->session; 1110 + struct ceph_client *cl = session->s_mdsc->fsc->client; 1137 1111 struct ceph_inode_info *ci = cap->ci; 1112 + struct inode *inode = &ci->netfs.inode; 1138 1113 struct ceph_mds_client *mdsc; 1139 1114 int removed = 0; 1140 1115 1141 1116 /* 'ci' being NULL means the remove have already occurred */ 1142 1117 if (!ci) { 1143 - dout("%s: cap inode is NULL\n", __func__); 1118 + doutc(cl, "inode is NULL\n"); 1144 1119 return; 1145 1120 } 1146 1121 1147 1122 lockdep_assert_held(&ci->i_ceph_lock); 1148 1123 1149 - dout("__ceph_remove_cap %p from %p\n", cap, &ci->netfs.inode); 1124 + doutc(cl, "%p from %p %llx.%llx\n", cap, inode, ceph_vinop(inode)); 1150 1125 1151 - mdsc = ceph_inode_to_client(&ci->netfs.inode)->mdsc; 1126 + mdsc = ceph_inode_to_fs_client(&ci->netfs.inode)->mdsc; 1152 1127 1153 1128 /* remove from inode's cap rbtree, and clear auth cap */ 1154 1129 rb_erase(&cap->ci_node, &ci->i_caps); ··· 1161 1132 spin_lock(&session->s_cap_lock); 1162 1133 if (session->s_cap_iterator == cap) { 1163 1134 /* not yet, we are iterating over this very cap */ 1164 - dout("__ceph_remove_cap delaying %p removal from session %p\n", 1165 - cap, cap->session); 1135 + doutc(cl, "delaying %p removal from session %p\n", cap, 1136 + cap->session); 1166 1137 } else { 1167 1138 list_del_init(&cap->session_caps); 1168 1139 session->s_nr_caps--; ··· 1207 1178 } 1208 1179 } 1209 1180 1210 - void ceph_remove_cap(struct ceph_cap *cap, bool queue_release) 1181 + void ceph_remove_cap(struct ceph_mds_client *mdsc, struct ceph_cap *cap, 1182 + bool queue_release) 1211 1183 { 1212 1184 struct ceph_inode_info *ci = cap->ci; 1213 1185 struct ceph_fs_client *fsc; 1214 1186 1215 1187 /* 'ci' being NULL means the remove have already occurred */ 1216 1188 if (!ci) { 1217 - dout("%s: cap inode is NULL\n", __func__); 1189 + doutc(mdsc->fsc->client, "inode is NULL\n"); 1218 1190 return; 1219 1191 } 1220 1192 1221 1193 lockdep_assert_held(&ci->i_ceph_lock); 1222 1194 1223 - fsc = ceph_inode_to_client(&ci->netfs.inode); 1195 + fsc = ceph_inode_to_fs_client(&ci->netfs.inode); 1224 1196 WARN_ON_ONCE(ci->i_auth_cap == cap && 1225 1197 !list_empty(&ci->i_dirty_item) && 1226 1198 !fsc->blocklisted && ··· 1257 1227 { 1258 1228 struct ceph_mds_caps *fc; 1259 1229 void *p; 1260 - struct ceph_osd_client *osdc = &arg->session->s_mdsc->fsc->client->osdc; 1230 + struct ceph_mds_client *mdsc = arg->session->s_mdsc; 1231 + struct ceph_osd_client *osdc = &mdsc->fsc->client->osdc; 1261 1232 1262 - dout("%s %s %llx %llx caps %s wanted %s dirty %s seq %u/%u tid %llu/%llu mseq %u follows %lld size %llu/%llu xattr_ver %llu xattr_len %d\n", 1263 - __func__, ceph_cap_op_name(arg->op), arg->cid, arg->ino, 1264 - ceph_cap_string(arg->caps), ceph_cap_string(arg->wanted), 1265 - ceph_cap_string(arg->dirty), arg->seq, arg->issue_seq, 1266 - arg->flush_tid, arg->oldest_flush_tid, arg->mseq, arg->follows, 1267 - arg->size, arg->max_size, arg->xattr_version, 1268 - arg->xattr_buf ? (int)arg->xattr_buf->vec.iov_len : 0); 1233 + doutc(mdsc->fsc->client, 1234 + "%s %llx %llx caps %s wanted %s dirty %s seq %u/%u" 1235 + " tid %llu/%llu mseq %u follows %lld size %llu/%llu" 1236 + " xattr_ver %llu xattr_len %d\n", 1237 + ceph_cap_op_name(arg->op), arg->cid, arg->ino, 1238 + ceph_cap_string(arg->caps), ceph_cap_string(arg->wanted), 1239 + ceph_cap_string(arg->dirty), arg->seq, arg->issue_seq, 1240 + arg->flush_tid, arg->oldest_flush_tid, arg->mseq, arg->follows, 1241 + arg->size, arg->max_size, arg->xattr_version, 1242 + arg->xattr_buf ? (int)arg->xattr_buf->vec.iov_len : 0); 1269 1243 1270 1244 msg->hdr.version = cpu_to_le16(12); 1271 1245 msg->hdr.tid = cpu_to_le64(arg->flush_tid); ··· 1376 1342 */ 1377 1343 void __ceph_remove_caps(struct ceph_inode_info *ci) 1378 1344 { 1345 + struct inode *inode = &ci->netfs.inode; 1346 + struct ceph_mds_client *mdsc = ceph_inode_to_fs_client(inode)->mdsc; 1379 1347 struct rb_node *p; 1380 1348 1381 1349 /* lock i_ceph_lock, because ceph_d_revalidate(..., LOOKUP_RCU) ··· 1387 1351 while (p) { 1388 1352 struct ceph_cap *cap = rb_entry(p, struct ceph_cap, ci_node); 1389 1353 p = rb_next(p); 1390 - ceph_remove_cap(cap, true); 1354 + ceph_remove_cap(mdsc, cap, true); 1391 1355 } 1392 1356 spin_unlock(&ci->i_ceph_lock); 1393 1357 } ··· 1406 1370 { 1407 1371 struct ceph_inode_info *ci = cap->ci; 1408 1372 struct inode *inode = &ci->netfs.inode; 1373 + struct ceph_client *cl = ceph_inode_to_client(inode); 1409 1374 int held, revoking; 1410 1375 1411 1376 lockdep_assert_held(&ci->i_ceph_lock); ··· 1415 1378 revoking = cap->implemented & ~cap->issued; 1416 1379 retain &= ~revoking; 1417 1380 1418 - dout("%s %p cap %p session %p %s -> %s (revoking %s)\n", 1419 - __func__, inode, cap, cap->session, 1420 - ceph_cap_string(held), ceph_cap_string(held & retain), 1421 - ceph_cap_string(revoking)); 1381 + doutc(cl, "%p %llx.%llx cap %p session %p %s -> %s (revoking %s)\n", 1382 + inode, ceph_vinop(inode), cap, cap->session, 1383 + ceph_cap_string(held), ceph_cap_string(held & retain), 1384 + ceph_cap_string(revoking)); 1422 1385 BUG_ON((retain & CEPH_CAP_PIN) == 0); 1423 1386 1424 1387 ci->i_ceph_flags &= ~CEPH_I_FLUSH; ··· 1534 1497 { 1535 1498 struct ceph_msg *msg; 1536 1499 struct inode *inode = &ci->netfs.inode; 1500 + struct ceph_client *cl = ceph_inode_to_client(inode); 1537 1501 1538 1502 msg = ceph_msg_new(CEPH_MSG_CLIENT_CAPS, cap_msg_size(arg), GFP_NOFS, 1539 1503 false); 1540 1504 if (!msg) { 1541 - pr_err("error allocating cap msg: ino (%llx.%llx) flushing %s tid %llu, requeuing cap.\n", 1542 - ceph_vinop(inode), ceph_cap_string(arg->dirty), 1543 - arg->flush_tid); 1505 + pr_err_client(cl, 1506 + "error allocating cap msg: ino (%llx.%llx)" 1507 + " flushing %s tid %llu, requeuing cap.\n", 1508 + ceph_vinop(inode), ceph_cap_string(arg->dirty), 1509 + arg->flush_tid); 1544 1510 spin_lock(&ci->i_ceph_lock); 1545 1511 __cap_delay_requeue(arg->session->s_mdsc, ci); 1546 1512 spin_unlock(&ci->i_ceph_lock); ··· 1632 1592 { 1633 1593 struct inode *inode = &ci->netfs.inode; 1634 1594 struct ceph_mds_client *mdsc = session->s_mdsc; 1595 + struct ceph_client *cl = mdsc->fsc->client; 1635 1596 struct ceph_cap_snap *capsnap; 1636 1597 u64 oldest_flush_tid = 0; 1637 1598 u64 first_tid = 1, last_tid = 0; 1638 1599 1639 - dout("__flush_snaps %p session %p\n", inode, session); 1600 + doutc(cl, "%p %llx.%llx session %p\n", inode, ceph_vinop(inode), 1601 + session); 1640 1602 1641 1603 list_for_each_entry(capsnap, &ci->i_cap_snaps, ci_item) { 1642 1604 /* ··· 1653 1611 1654 1612 /* only flush each capsnap once */ 1655 1613 if (capsnap->cap_flush.tid > 0) { 1656 - dout(" already flushed %p, skipping\n", capsnap); 1614 + doutc(cl, "already flushed %p, skipping\n", capsnap); 1657 1615 continue; 1658 1616 } 1659 1617 ··· 1685 1643 int ret; 1686 1644 1687 1645 if (!(cap && cap->session == session)) { 1688 - dout("__flush_snaps %p auth cap %p not mds%d, " 1689 - "stop\n", inode, cap, session->s_mds); 1646 + doutc(cl, "%p %llx.%llx auth cap %p not mds%d, stop\n", 1647 + inode, ceph_vinop(inode), cap, session->s_mds); 1690 1648 break; 1691 1649 } 1692 1650 ··· 1707 1665 refcount_inc(&capsnap->nref); 1708 1666 spin_unlock(&ci->i_ceph_lock); 1709 1667 1710 - dout("__flush_snaps %p capsnap %p tid %llu %s\n", 1711 - inode, capsnap, cf->tid, ceph_cap_string(capsnap->dirty)); 1668 + doutc(cl, "%p %llx.%llx capsnap %p tid %llu %s\n", inode, 1669 + ceph_vinop(inode), capsnap, cf->tid, 1670 + ceph_cap_string(capsnap->dirty)); 1712 1671 1713 1672 ret = __send_flush_snap(inode, session, capsnap, cap->mseq, 1714 1673 oldest_flush_tid); 1715 1674 if (ret < 0) { 1716 - pr_err("__flush_snaps: error sending cap flushsnap, " 1717 - "ino (%llx.%llx) tid %llu follows %llu\n", 1718 - ceph_vinop(inode), cf->tid, capsnap->follows); 1675 + pr_err_client(cl, "error sending cap flushsnap, " 1676 + "ino (%llx.%llx) tid %llu follows %llu\n", 1677 + ceph_vinop(inode), cf->tid, 1678 + capsnap->follows); 1719 1679 } 1720 1680 1721 1681 ceph_put_cap_snap(capsnap); ··· 1729 1685 struct ceph_mds_session **psession) 1730 1686 { 1731 1687 struct inode *inode = &ci->netfs.inode; 1732 - struct ceph_mds_client *mdsc = ceph_inode_to_client(inode)->mdsc; 1688 + struct ceph_mds_client *mdsc = ceph_inode_to_fs_client(inode)->mdsc; 1689 + struct ceph_client *cl = ceph_inode_to_client(inode); 1733 1690 struct ceph_mds_session *session = NULL; 1734 1691 bool need_put = false; 1735 1692 int mds; 1736 1693 1737 - dout("ceph_flush_snaps %p\n", inode); 1694 + doutc(cl, "%p %llx.%llx\n", inode, ceph_vinop(inode)); 1738 1695 if (psession) 1739 1696 session = *psession; 1740 1697 retry: 1741 1698 spin_lock(&ci->i_ceph_lock); 1742 1699 if (!(ci->i_ceph_flags & CEPH_I_FLUSH_SNAPS)) { 1743 - dout(" no capsnap needs flush, doing nothing\n"); 1700 + doutc(cl, " no capsnap needs flush, doing nothing\n"); 1744 1701 goto out; 1745 1702 } 1746 1703 if (!ci->i_auth_cap) { 1747 - dout(" no auth cap (migrating?), doing nothing\n"); 1704 + doutc(cl, " no auth cap (migrating?), doing nothing\n"); 1748 1705 goto out; 1749 1706 } 1750 1707 1751 1708 mds = ci->i_auth_cap->session->s_mds; 1752 1709 if (session && session->s_mds != mds) { 1753 - dout(" oops, wrong session %p mutex\n", session); 1710 + doutc(cl, " oops, wrong session %p mutex\n", session); 1754 1711 ceph_put_mds_session(session); 1755 1712 session = NULL; 1756 1713 } ··· 1795 1750 struct ceph_cap_flush **pcf) 1796 1751 { 1797 1752 struct ceph_mds_client *mdsc = 1798 - ceph_sb_to_client(ci->netfs.inode.i_sb)->mdsc; 1753 + ceph_sb_to_fs_client(ci->netfs.inode.i_sb)->mdsc; 1799 1754 struct inode *inode = &ci->netfs.inode; 1755 + struct ceph_client *cl = ceph_inode_to_client(inode); 1800 1756 int was = ci->i_dirty_caps; 1801 1757 int dirty = 0; 1802 1758 1803 1759 lockdep_assert_held(&ci->i_ceph_lock); 1804 1760 1805 1761 if (!ci->i_auth_cap) { 1806 - pr_warn("__mark_dirty_caps %p %llx mask %s, " 1807 - "but no auth cap (session was closed?)\n", 1808 - inode, ceph_ino(inode), ceph_cap_string(mask)); 1762 + pr_warn_client(cl, "%p %llx.%llx mask %s, " 1763 + "but no auth cap (session was closed?)\n", 1764 + inode, ceph_vinop(inode), 1765 + ceph_cap_string(mask)); 1809 1766 return 0; 1810 1767 } 1811 1768 1812 - dout("__mark_dirty_caps %p %s dirty %s -> %s\n", &ci->netfs.inode, 1813 - ceph_cap_string(mask), ceph_cap_string(was), 1814 - ceph_cap_string(was | mask)); 1769 + doutc(cl, "%p %llx.%llx %s dirty %s -> %s\n", inode, 1770 + ceph_vinop(inode), ceph_cap_string(mask), 1771 + ceph_cap_string(was), ceph_cap_string(was | mask)); 1815 1772 ci->i_dirty_caps |= mask; 1816 1773 if (was == 0) { 1817 1774 struct ceph_mds_session *session = ci->i_auth_cap->session; ··· 1826 1779 ci->i_head_snapc = ceph_get_snap_context( 1827 1780 ci->i_snap_realm->cached_context); 1828 1781 } 1829 - dout(" inode %p now dirty snapc %p auth cap %p\n", 1830 - &ci->netfs.inode, ci->i_head_snapc, ci->i_auth_cap); 1782 + doutc(cl, "%p %llx.%llx now dirty snapc %p auth cap %p\n", 1783 + inode, ceph_vinop(inode), ci->i_head_snapc, 1784 + ci->i_auth_cap); 1831 1785 BUG_ON(!list_empty(&ci->i_dirty_item)); 1832 1786 spin_lock(&mdsc->cap_dirty_lock); 1833 1787 list_add(&ci->i_dirty_item, &session->s_cap_dirty); ··· 1921 1873 struct ceph_mds_session *session, bool wake, 1922 1874 u64 *oldest_flush_tid) 1923 1875 { 1924 - struct ceph_mds_client *mdsc = ceph_sb_to_client(inode->i_sb)->mdsc; 1876 + struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(inode->i_sb)->mdsc; 1877 + struct ceph_client *cl = ceph_inode_to_client(inode); 1925 1878 struct ceph_inode_info *ci = ceph_inode(inode); 1926 1879 struct ceph_cap_flush *cf = NULL; 1927 1880 int flushing; ··· 1933 1884 BUG_ON(!ci->i_prealloc_cap_flush); 1934 1885 1935 1886 flushing = ci->i_dirty_caps; 1936 - dout("__mark_caps_flushing flushing %s, flushing_caps %s -> %s\n", 1937 - ceph_cap_string(flushing), 1938 - ceph_cap_string(ci->i_flushing_caps), 1939 - ceph_cap_string(ci->i_flushing_caps | flushing)); 1887 + doutc(cl, "flushing %s, flushing_caps %s -> %s\n", 1888 + ceph_cap_string(flushing), 1889 + ceph_cap_string(ci->i_flushing_caps), 1890 + ceph_cap_string(ci->i_flushing_caps | flushing)); 1940 1891 ci->i_flushing_caps |= flushing; 1941 1892 ci->i_dirty_caps = 0; 1942 - dout(" inode %p now !dirty\n", inode); 1893 + doutc(cl, "%p %llx.%llx now !dirty\n", inode, ceph_vinop(inode)); 1943 1894 1944 1895 swap(cf, ci->i_prealloc_cap_flush); 1945 1896 cf->caps = flushing; ··· 1970 1921 __releases(ci->i_ceph_lock) 1971 1922 __acquires(ci->i_ceph_lock) 1972 1923 { 1924 + struct ceph_client *cl = ceph_inode_to_client(inode); 1973 1925 struct ceph_inode_info *ci = ceph_inode(inode); 1974 1926 u32 invalidating_gen = ci->i_rdcache_gen; 1975 1927 ··· 1982 1932 if (inode->i_data.nrpages == 0 && 1983 1933 invalidating_gen == ci->i_rdcache_gen) { 1984 1934 /* success. */ 1985 - dout("try_nonblocking_invalidate %p success\n", inode); 1935 + doutc(cl, "%p %llx.%llx success\n", inode, 1936 + ceph_vinop(inode)); 1986 1937 /* save any racing async invalidate some trouble */ 1987 1938 ci->i_rdcache_revoking = ci->i_rdcache_gen - 1; 1988 1939 return 0; 1989 1940 } 1990 - dout("try_nonblocking_invalidate %p failed\n", inode); 1941 + doutc(cl, "%p %llx.%llx failed\n", inode, ceph_vinop(inode)); 1991 1942 return -1; 1992 1943 } 1993 1944 ··· 2020 1969 { 2021 1970 struct inode *inode = &ci->netfs.inode; 2022 1971 struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(inode->i_sb); 1972 + struct ceph_client *cl = ceph_inode_to_client(inode); 2023 1973 struct ceph_cap *cap; 2024 1974 u64 flush_tid, oldest_flush_tid; 2025 1975 int file_wanted, used, cap_used; ··· 2095 2043 } 2096 2044 } 2097 2045 2098 - dout("check_caps %llx.%llx file_want %s used %s dirty %s flushing %s" 2099 - " issued %s revoking %s retain %s %s%s%s\n", ceph_vinop(inode), 2100 - ceph_cap_string(file_wanted), 2046 + doutc(cl, "%p %llx.%llx file_want %s used %s dirty %s " 2047 + "flushing %s issued %s revoking %s retain %s %s%s%s\n", 2048 + inode, ceph_vinop(inode), ceph_cap_string(file_wanted), 2101 2049 ceph_cap_string(used), ceph_cap_string(ci->i_dirty_caps), 2102 2050 ceph_cap_string(ci->i_flushing_caps), 2103 2051 ceph_cap_string(issued), ceph_cap_string(revoking), ··· 2118 2066 (revoking & (CEPH_CAP_FILE_CACHE| 2119 2067 CEPH_CAP_FILE_LAZYIO)) && /* or revoking cache */ 2120 2068 !tried_invalidate) { 2121 - dout("check_caps trying to invalidate on %llx.%llx\n", 2122 - ceph_vinop(inode)); 2069 + doutc(cl, "trying to invalidate on %p %llx.%llx\n", 2070 + inode, ceph_vinop(inode)); 2123 2071 if (try_nonblocking_invalidate(inode) < 0) { 2124 - dout("check_caps queuing invalidate\n"); 2072 + doutc(cl, "queuing invalidate\n"); 2125 2073 queue_invalidate = true; 2126 2074 ci->i_rdcache_revoking = ci->i_rdcache_gen; 2127 2075 } ··· 2149 2097 cap_used &= ~ci->i_auth_cap->issued; 2150 2098 2151 2099 revoking = cap->implemented & ~cap->issued; 2152 - dout(" mds%d cap %p used %s issued %s implemented %s revoking %s\n", 2153 - cap->mds, cap, ceph_cap_string(cap_used), 2154 - ceph_cap_string(cap->issued), 2155 - ceph_cap_string(cap->implemented), 2156 - ceph_cap_string(revoking)); 2100 + doutc(cl, " mds%d cap %p used %s issued %s implemented %s revoking %s\n", 2101 + cap->mds, cap, ceph_cap_string(cap_used), 2102 + ceph_cap_string(cap->issued), 2103 + ceph_cap_string(cap->implemented), 2104 + ceph_cap_string(revoking)); 2157 2105 2158 2106 if (cap == ci->i_auth_cap && 2159 2107 (cap->issued & CEPH_CAP_FILE_WR)) { 2160 2108 /* request larger max_size from MDS? */ 2161 2109 if (ci->i_wanted_max_size > ci->i_max_size && 2162 2110 ci->i_wanted_max_size > ci->i_requested_max_size) { 2163 - dout("requesting new max_size\n"); 2111 + doutc(cl, "requesting new max_size\n"); 2164 2112 goto ack; 2165 2113 } 2166 2114 2167 2115 /* approaching file_max? */ 2168 2116 if (__ceph_should_report_size(ci)) { 2169 - dout("i_size approaching max_size\n"); 2117 + doutc(cl, "i_size approaching max_size\n"); 2170 2118 goto ack; 2171 2119 } 2172 2120 } 2173 2121 /* flush anything dirty? */ 2174 2122 if (cap == ci->i_auth_cap) { 2175 2123 if ((flags & CHECK_CAPS_FLUSH) && ci->i_dirty_caps) { 2176 - dout("flushing dirty caps\n"); 2124 + doutc(cl, "flushing dirty caps\n"); 2177 2125 goto ack; 2178 2126 } 2179 2127 if (ci->i_ceph_flags & CEPH_I_FLUSH_SNAPS) { 2180 - dout("flushing snap caps\n"); 2128 + doutc(cl, "flushing snap caps\n"); 2181 2129 goto ack; 2182 2130 } 2183 2131 } ··· 2185 2133 /* completed revocation? going down and there are no caps? */ 2186 2134 if (revoking) { 2187 2135 if ((revoking & cap_used) == 0) { 2188 - dout("completed revocation of %s\n", 2136 + doutc(cl, "completed revocation of %s\n", 2189 2137 ceph_cap_string(cap->implemented & ~cap->issued)); 2190 2138 goto ack; 2191 2139 } ··· 2284 2232 */ 2285 2233 static int try_flush_caps(struct inode *inode, u64 *ptid) 2286 2234 { 2287 - struct ceph_mds_client *mdsc = ceph_sb_to_client(inode->i_sb)->mdsc; 2235 + struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(inode->i_sb)->mdsc; 2288 2236 struct ceph_inode_info *ci = ceph_inode(inode); 2289 2237 int flushing = 0; 2290 2238 u64 flush_tid = 0, oldest_flush_tid = 0; ··· 2362 2310 */ 2363 2311 static int flush_mdlog_and_wait_inode_unsafe_requests(struct inode *inode) 2364 2312 { 2365 - struct ceph_mds_client *mdsc = ceph_sb_to_client(inode->i_sb)->mdsc; 2313 + struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(inode->i_sb)->mdsc; 2314 + struct ceph_client *cl = ceph_inode_to_client(inode); 2366 2315 struct ceph_inode_info *ci = ceph_inode(inode); 2367 2316 struct ceph_mds_request *req1 = NULL, *req2 = NULL; 2368 2317 int ret, err = 0; ··· 2453 2400 kfree(sessions); 2454 2401 } 2455 2402 2456 - dout("%s %p wait on tid %llu %llu\n", __func__, 2457 - inode, req1 ? req1->r_tid : 0ULL, req2 ? req2->r_tid : 0ULL); 2403 + doutc(cl, "%p %llx.%llx wait on tid %llu %llu\n", inode, 2404 + ceph_vinop(inode), req1 ? req1->r_tid : 0ULL, 2405 + req2 ? req2->r_tid : 0ULL); 2458 2406 if (req1) { 2459 2407 ret = !wait_for_completion_timeout(&req1->r_safe_completion, 2460 2408 ceph_timeout_jiffies(req1->r_timeout)); ··· 2481 2427 { 2482 2428 struct inode *inode = file->f_mapping->host; 2483 2429 struct ceph_inode_info *ci = ceph_inode(inode); 2430 + struct ceph_client *cl = ceph_inode_to_client(inode); 2484 2431 u64 flush_tid; 2485 2432 int ret, err; 2486 2433 int dirty; 2487 2434 2488 - dout("fsync %p%s\n", inode, datasync ? " datasync" : ""); 2435 + doutc(cl, "%p %llx.%llx%s\n", inode, ceph_vinop(inode), 2436 + datasync ? " datasync" : ""); 2489 2437 2490 2438 ret = file_write_and_wait_range(file, start, end); 2491 2439 if (datasync) ··· 2498 2442 goto out; 2499 2443 2500 2444 dirty = try_flush_caps(inode, &flush_tid); 2501 - dout("fsync dirty caps are %s\n", ceph_cap_string(dirty)); 2445 + doutc(cl, "dirty caps are %s\n", ceph_cap_string(dirty)); 2502 2446 2503 2447 err = flush_mdlog_and_wait_inode_unsafe_requests(inode); 2504 2448 ··· 2519 2463 if (err < 0) 2520 2464 ret = err; 2521 2465 out: 2522 - dout("fsync %p%s result=%d\n", inode, datasync ? " datasync" : "", ret); 2466 + doutc(cl, "%p %llx.%llx%s result=%d\n", inode, ceph_vinop(inode), 2467 + datasync ? " datasync" : "", ret); 2523 2468 return ret; 2524 2469 } 2525 2470 ··· 2533 2476 int ceph_write_inode(struct inode *inode, struct writeback_control *wbc) 2534 2477 { 2535 2478 struct ceph_inode_info *ci = ceph_inode(inode); 2479 + struct ceph_client *cl = ceph_inode_to_client(inode); 2536 2480 u64 flush_tid; 2537 2481 int err = 0; 2538 2482 int dirty; 2539 2483 int wait = (wbc->sync_mode == WB_SYNC_ALL && !wbc->for_sync); 2540 2484 2541 - dout("write_inode %p wait=%d\n", inode, wait); 2485 + doutc(cl, "%p %llx.%llx wait=%d\n", inode, ceph_vinop(inode), wait); 2542 2486 ceph_fscache_unpin_writeback(inode, wbc); 2543 2487 if (wait) { 2544 2488 err = ceph_wait_on_async_create(inode); ··· 2551 2493 caps_are_flushed(inode, flush_tid)); 2552 2494 } else { 2553 2495 struct ceph_mds_client *mdsc = 2554 - ceph_sb_to_client(inode->i_sb)->mdsc; 2496 + ceph_sb_to_fs_client(inode->i_sb)->mdsc; 2555 2497 2556 2498 spin_lock(&ci->i_ceph_lock); 2557 2499 if (__ceph_caps_dirty(ci)) ··· 2569 2511 __acquires(ci->i_ceph_lock) 2570 2512 { 2571 2513 struct inode *inode = &ci->netfs.inode; 2514 + struct ceph_client *cl = mdsc->fsc->client; 2572 2515 struct ceph_cap *cap; 2573 2516 struct ceph_cap_flush *cf; 2574 2517 int ret; ··· 2595 2536 2596 2537 cap = ci->i_auth_cap; 2597 2538 if (!(cap && cap->session == session)) { 2598 - pr_err("%p auth cap %p not mds%d ???\n", 2599 - inode, cap, session->s_mds); 2539 + pr_err_client(cl, "%p auth cap %p not mds%d ???\n", 2540 + inode, cap, session->s_mds); 2600 2541 break; 2601 2542 } 2602 2543 ··· 2605 2546 if (!cf->is_capsnap) { 2606 2547 struct cap_msg_args arg; 2607 2548 2608 - dout("kick_flushing_caps %p cap %p tid %llu %s\n", 2609 - inode, cap, cf->tid, ceph_cap_string(cf->caps)); 2549 + doutc(cl, "%p %llx.%llx cap %p tid %llu %s\n", 2550 + inode, ceph_vinop(inode), cap, cf->tid, 2551 + ceph_cap_string(cf->caps)); 2610 2552 __prep_cap(&arg, cap, CEPH_CAP_OP_FLUSH, 2611 2553 (cf->tid < last_snap_flush ? 2612 2554 CEPH_CLIENT_CAPS_PENDING_CAPSNAP : 0), ··· 2621 2561 struct ceph_cap_snap *capsnap = 2622 2562 container_of(cf, struct ceph_cap_snap, 2623 2563 cap_flush); 2624 - dout("kick_flushing_caps %p capsnap %p tid %llu %s\n", 2625 - inode, capsnap, cf->tid, 2626 - ceph_cap_string(capsnap->dirty)); 2564 + doutc(cl, "%p %llx.%llx capsnap %p tid %llu %s\n", 2565 + inode, ceph_vinop(inode), capsnap, cf->tid, 2566 + ceph_cap_string(capsnap->dirty)); 2627 2567 2628 2568 refcount_inc(&capsnap->nref); 2629 2569 spin_unlock(&ci->i_ceph_lock); ··· 2631 2571 ret = __send_flush_snap(inode, session, capsnap, cap->mseq, 2632 2572 oldest_flush_tid); 2633 2573 if (ret < 0) { 2634 - pr_err("kick_flushing_caps: error sending " 2635 - "cap flushsnap, ino (%llx.%llx) " 2636 - "tid %llu follows %llu\n", 2637 - ceph_vinop(inode), cf->tid, 2638 - capsnap->follows); 2574 + pr_err_client(cl, "error sending cap flushsnap," 2575 + " %p %llx.%llx tid %llu follows %llu\n", 2576 + inode, ceph_vinop(inode), cf->tid, 2577 + capsnap->follows); 2639 2578 } 2640 2579 2641 2580 ceph_put_cap_snap(capsnap); ··· 2647 2588 void ceph_early_kick_flushing_caps(struct ceph_mds_client *mdsc, 2648 2589 struct ceph_mds_session *session) 2649 2590 { 2591 + struct ceph_client *cl = mdsc->fsc->client; 2650 2592 struct ceph_inode_info *ci; 2651 2593 struct ceph_cap *cap; 2652 2594 u64 oldest_flush_tid; 2653 2595 2654 - dout("early_kick_flushing_caps mds%d\n", session->s_mds); 2596 + doutc(cl, "mds%d\n", session->s_mds); 2655 2597 2656 2598 spin_lock(&mdsc->cap_dirty_lock); 2657 2599 oldest_flush_tid = __get_oldest_flush_tid(mdsc); 2658 2600 spin_unlock(&mdsc->cap_dirty_lock); 2659 2601 2660 2602 list_for_each_entry(ci, &session->s_cap_flushing, i_flushing_item) { 2603 + struct inode *inode = &ci->netfs.inode; 2604 + 2661 2605 spin_lock(&ci->i_ceph_lock); 2662 2606 cap = ci->i_auth_cap; 2663 2607 if (!(cap && cap->session == session)) { 2664 - pr_err("%p auth cap %p not mds%d ???\n", 2665 - &ci->netfs.inode, cap, session->s_mds); 2608 + pr_err_client(cl, "%p %llx.%llx auth cap %p not mds%d ???\n", 2609 + inode, ceph_vinop(inode), cap, 2610 + session->s_mds); 2666 2611 spin_unlock(&ci->i_ceph_lock); 2667 2612 continue; 2668 2613 } ··· 2699 2636 void ceph_kick_flushing_caps(struct ceph_mds_client *mdsc, 2700 2637 struct ceph_mds_session *session) 2701 2638 { 2639 + struct ceph_client *cl = mdsc->fsc->client; 2702 2640 struct ceph_inode_info *ci; 2703 2641 struct ceph_cap *cap; 2704 2642 u64 oldest_flush_tid; 2705 2643 2706 2644 lockdep_assert_held(&session->s_mutex); 2707 2645 2708 - dout("kick_flushing_caps mds%d\n", session->s_mds); 2646 + doutc(cl, "mds%d\n", session->s_mds); 2709 2647 2710 2648 spin_lock(&mdsc->cap_dirty_lock); 2711 2649 oldest_flush_tid = __get_oldest_flush_tid(mdsc); 2712 2650 spin_unlock(&mdsc->cap_dirty_lock); 2713 2651 2714 2652 list_for_each_entry(ci, &session->s_cap_flushing, i_flushing_item) { 2653 + struct inode *inode = &ci->netfs.inode; 2654 + 2715 2655 spin_lock(&ci->i_ceph_lock); 2716 2656 cap = ci->i_auth_cap; 2717 2657 if (!(cap && cap->session == session)) { 2718 - pr_err("%p auth cap %p not mds%d ???\n", 2719 - &ci->netfs.inode, cap, session->s_mds); 2658 + pr_err_client(cl, "%p %llx.%llx auth cap %p not mds%d ???\n", 2659 + inode, ceph_vinop(inode), cap, 2660 + session->s_mds); 2720 2661 spin_unlock(&ci->i_ceph_lock); 2721 2662 continue; 2722 2663 } ··· 2737 2670 { 2738 2671 struct ceph_mds_client *mdsc = session->s_mdsc; 2739 2672 struct ceph_cap *cap = ci->i_auth_cap; 2673 + struct inode *inode = &ci->netfs.inode; 2740 2674 2741 2675 lockdep_assert_held(&ci->i_ceph_lock); 2742 2676 2743 - dout("%s %p flushing %s\n", __func__, &ci->netfs.inode, 2744 - ceph_cap_string(ci->i_flushing_caps)); 2677 + doutc(mdsc->fsc->client, "%p %llx.%llx flushing %s\n", 2678 + inode, ceph_vinop(inode), 2679 + ceph_cap_string(ci->i_flushing_caps)); 2745 2680 2746 2681 if (!list_empty(&ci->i_cap_flush_list)) { 2747 2682 u64 oldest_flush_tid; ··· 2765 2696 void ceph_take_cap_refs(struct ceph_inode_info *ci, int got, 2766 2697 bool snap_rwsem_locked) 2767 2698 { 2699 + struct inode *inode = &ci->netfs.inode; 2700 + struct ceph_client *cl = ceph_inode_to_client(inode); 2701 + 2768 2702 lockdep_assert_held(&ci->i_ceph_lock); 2769 2703 2770 2704 if (got & CEPH_CAP_PIN) ··· 2788 2716 } 2789 2717 if (got & CEPH_CAP_FILE_BUFFER) { 2790 2718 if (ci->i_wb_ref == 0) 2791 - ihold(&ci->netfs.inode); 2719 + ihold(inode); 2792 2720 ci->i_wb_ref++; 2793 - dout("%s %p wb %d -> %d (?)\n", __func__, 2794 - &ci->netfs.inode, ci->i_wb_ref-1, ci->i_wb_ref); 2721 + doutc(cl, "%p %llx.%llx wb %d -> %d (?)\n", inode, 2722 + ceph_vinop(inode), ci->i_wb_ref-1, ci->i_wb_ref); 2795 2723 } 2796 2724 } 2797 2725 ··· 2818 2746 loff_t endoff, int flags, int *got) 2819 2747 { 2820 2748 struct ceph_inode_info *ci = ceph_inode(inode); 2821 - struct ceph_mds_client *mdsc = ceph_inode_to_client(inode)->mdsc; 2749 + struct ceph_mds_client *mdsc = ceph_inode_to_fs_client(inode)->mdsc; 2750 + struct ceph_client *cl = ceph_inode_to_client(inode); 2822 2751 int ret = 0; 2823 2752 int have, implemented; 2824 2753 bool snap_rwsem_locked = false; 2825 2754 2826 - dout("get_cap_refs %p need %s want %s\n", inode, 2827 - ceph_cap_string(need), ceph_cap_string(want)); 2755 + doutc(cl, "%p %llx.%llx need %s want %s\n", inode, 2756 + ceph_vinop(inode), ceph_cap_string(need), 2757 + ceph_cap_string(want)); 2828 2758 2829 2759 again: 2830 2760 spin_lock(&ci->i_ceph_lock); 2831 2761 2832 2762 if ((flags & CHECK_FILELOCK) && 2833 2763 (ci->i_ceph_flags & CEPH_I_ERROR_FILELOCK)) { 2834 - dout("try_get_cap_refs %p error filelock\n", inode); 2764 + doutc(cl, "%p %llx.%llx error filelock\n", inode, 2765 + ceph_vinop(inode)); 2835 2766 ret = -EIO; 2836 2767 goto out_unlock; 2837 2768 } ··· 2854 2779 2855 2780 if (have & need & CEPH_CAP_FILE_WR) { 2856 2781 if (endoff >= 0 && endoff > (loff_t)ci->i_max_size) { 2857 - dout("get_cap_refs %p endoff %llu > maxsize %llu\n", 2858 - inode, endoff, ci->i_max_size); 2782 + doutc(cl, "%p %llx.%llx endoff %llu > maxsize %llu\n", 2783 + inode, ceph_vinop(inode), endoff, ci->i_max_size); 2859 2784 if (endoff > ci->i_requested_max_size) 2860 2785 ret = ci->i_auth_cap ? -EFBIG : -EUCLEAN; 2861 2786 goto out_unlock; ··· 2865 2790 * can get a final snapshot value for size+mtime. 2866 2791 */ 2867 2792 if (__ceph_have_pending_cap_snap(ci)) { 2868 - dout("get_cap_refs %p cap_snap_pending\n", inode); 2793 + doutc(cl, "%p %llx.%llx cap_snap_pending\n", inode, 2794 + ceph_vinop(inode)); 2869 2795 goto out_unlock; 2870 2796 } 2871 2797 } ··· 2884 2808 int not = want & ~(have & need); 2885 2809 int revoking = implemented & ~have; 2886 2810 int exclude = revoking & not; 2887 - dout("get_cap_refs %p have %s but not %s (revoking %s)\n", 2888 - inode, ceph_cap_string(have), ceph_cap_string(not), 2889 - ceph_cap_string(revoking)); 2811 + doutc(cl, "%p %llx.%llx have %s but not %s (revoking %s)\n", 2812 + inode, ceph_vinop(inode), ceph_cap_string(have), 2813 + ceph_cap_string(not), ceph_cap_string(revoking)); 2890 2814 if (!exclude || !(exclude & CEPH_CAP_FILE_BUFFER)) { 2891 2815 if (!snap_rwsem_locked && 2892 2816 !ci->i_head_snapc && ··· 2926 2850 spin_unlock(&s->s_cap_lock); 2927 2851 } 2928 2852 if (session_readonly) { 2929 - dout("get_cap_refs %p need %s but mds%d readonly\n", 2930 - inode, ceph_cap_string(need), ci->i_auth_cap->mds); 2853 + doutc(cl, "%p %llx.%llx need %s but mds%d readonly\n", 2854 + inode, ceph_vinop(inode), ceph_cap_string(need), 2855 + ci->i_auth_cap->mds); 2931 2856 ret = -EROFS; 2932 2857 goto out_unlock; 2933 2858 } 2934 2859 2935 2860 if (ceph_inode_is_shutdown(inode)) { 2936 - dout("get_cap_refs %p inode is shutdown\n", inode); 2861 + doutc(cl, "%p %llx.%llx inode is shutdown\n", 2862 + inode, ceph_vinop(inode)); 2937 2863 ret = -ESTALE; 2938 2864 goto out_unlock; 2939 2865 } 2940 2866 mds_wanted = __ceph_caps_mds_wanted(ci, false); 2941 2867 if (need & ~mds_wanted) { 2942 - dout("get_cap_refs %p need %s > mds_wanted %s\n", 2943 - inode, ceph_cap_string(need), 2944 - ceph_cap_string(mds_wanted)); 2868 + doutc(cl, "%p %llx.%llx need %s > mds_wanted %s\n", 2869 + inode, ceph_vinop(inode), ceph_cap_string(need), 2870 + ceph_cap_string(mds_wanted)); 2945 2871 ret = -EUCLEAN; 2946 2872 goto out_unlock; 2947 2873 } 2948 2874 2949 - dout("get_cap_refs %p have %s need %s\n", inode, 2950 - ceph_cap_string(have), ceph_cap_string(need)); 2875 + doutc(cl, "%p %llx.%llx have %s need %s\n", inode, 2876 + ceph_vinop(inode), ceph_cap_string(have), 2877 + ceph_cap_string(need)); 2951 2878 } 2952 2879 out_unlock: 2953 2880 ··· 2965 2886 else if (ret == 1) 2966 2887 ceph_update_cap_hit(&mdsc->metric); 2967 2888 2968 - dout("get_cap_refs %p ret %d got %s\n", inode, 2969 - ret, ceph_cap_string(*got)); 2889 + doutc(cl, "%p %llx.%llx ret %d got %s\n", inode, 2890 + ceph_vinop(inode), ret, ceph_cap_string(*got)); 2970 2891 return ret; 2971 2892 } 2972 2893 ··· 2978 2899 static void check_max_size(struct inode *inode, loff_t endoff) 2979 2900 { 2980 2901 struct ceph_inode_info *ci = ceph_inode(inode); 2902 + struct ceph_client *cl = ceph_inode_to_client(inode); 2981 2903 int check = 0; 2982 2904 2983 2905 /* do we need to explicitly request a larger max_size? */ 2984 2906 spin_lock(&ci->i_ceph_lock); 2985 2907 if (endoff >= ci->i_max_size && endoff > ci->i_wanted_max_size) { 2986 - dout("write %p at large endoff %llu, req max_size\n", 2987 - inode, endoff); 2908 + doutc(cl, "write %p %llx.%llx at large endoff %llu, req max_size\n", 2909 + inode, ceph_vinop(inode), endoff); 2988 2910 ci->i_wanted_max_size = endoff; 2989 2911 } 2990 2912 /* duplicate ceph_check_caps()'s logic */ ··· 3044 2964 int want, loff_t endoff, int *got) 3045 2965 { 3046 2966 struct ceph_inode_info *ci = ceph_inode(inode); 3047 - struct ceph_fs_client *fsc = ceph_inode_to_client(inode); 2967 + struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode); 3048 2968 int ret, _got, flags; 3049 2969 3050 2970 ret = ceph_pool_perm_check(inode, need); ··· 3195 3115 static int ceph_try_drop_cap_snap(struct ceph_inode_info *ci, 3196 3116 struct ceph_cap_snap *capsnap) 3197 3117 { 3118 + struct inode *inode = &ci->netfs.inode; 3119 + struct ceph_client *cl = ceph_inode_to_client(inode); 3120 + 3198 3121 if (!capsnap->need_flush && 3199 3122 !capsnap->writing && !capsnap->dirty_pages) { 3200 - dout("dropping cap_snap %p follows %llu\n", 3201 - capsnap, capsnap->follows); 3123 + doutc(cl, "%p follows %llu\n", capsnap, capsnap->follows); 3202 3124 BUG_ON(capsnap->cap_flush.tid > 0); 3203 3125 ceph_put_snap_context(capsnap->context); 3204 3126 if (!list_is_last(&capsnap->ci_item, &ci->i_cap_snaps)) ··· 3232 3150 enum put_cap_refs_mode mode) 3233 3151 { 3234 3152 struct inode *inode = &ci->netfs.inode; 3153 + struct ceph_client *cl = ceph_inode_to_client(inode); 3235 3154 int last = 0, put = 0, flushsnaps = 0, wake = 0; 3236 3155 bool check_flushsnaps = false; 3237 3156 ··· 3255 3172 put++; 3256 3173 check_flushsnaps = true; 3257 3174 } 3258 - dout("put_cap_refs %p wb %d -> %d (?)\n", 3259 - inode, ci->i_wb_ref+1, ci->i_wb_ref); 3175 + doutc(cl, "%p %llx.%llx wb %d -> %d (?)\n", inode, 3176 + ceph_vinop(inode), ci->i_wb_ref+1, ci->i_wb_ref); 3260 3177 } 3261 3178 if (had & CEPH_CAP_FILE_WR) { 3262 3179 if (--ci->i_wr_ref == 0) { ··· 3296 3213 } 3297 3214 spin_unlock(&ci->i_ceph_lock); 3298 3215 3299 - dout("put_cap_refs %p had %s%s%s\n", inode, ceph_cap_string(had), 3300 - last ? " last" : "", put ? " put" : ""); 3216 + doutc(cl, "%p %llx.%llx had %s%s%s\n", inode, ceph_vinop(inode), 3217 + ceph_cap_string(had), last ? " last" : "", put ? " put" : ""); 3301 3218 3302 3219 switch (mode) { 3303 3220 case PUT_CAP_REFS_SYNC: ··· 3347 3264 struct ceph_snap_context *snapc) 3348 3265 { 3349 3266 struct inode *inode = &ci->netfs.inode; 3267 + struct ceph_client *cl = ceph_inode_to_client(inode); 3350 3268 struct ceph_cap_snap *capsnap = NULL, *iter; 3351 3269 int put = 0; 3352 3270 bool last = false; ··· 3371 3287 ceph_put_snap_context(ci->i_head_snapc); 3372 3288 ci->i_head_snapc = NULL; 3373 3289 } 3374 - dout("put_wrbuffer_cap_refs on %p head %d/%d -> %d/%d %s\n", 3375 - inode, 3376 - ci->i_wrbuffer_ref+nr, ci->i_wrbuffer_ref_head+nr, 3377 - ci->i_wrbuffer_ref, ci->i_wrbuffer_ref_head, 3378 - last ? " LAST" : ""); 3290 + doutc(cl, "on %p %llx.%llx head %d/%d -> %d/%d %s\n", 3291 + inode, ceph_vinop(inode), ci->i_wrbuffer_ref+nr, 3292 + ci->i_wrbuffer_ref_head+nr, ci->i_wrbuffer_ref, 3293 + ci->i_wrbuffer_ref_head, last ? " LAST" : ""); 3379 3294 } else { 3380 3295 list_for_each_entry(iter, &ci->i_cap_snaps, ci_item) { 3381 3296 if (iter->context == snapc) { ··· 3404 3321 } 3405 3322 } 3406 3323 } 3407 - dout("put_wrbuffer_cap_refs on %p cap_snap %p " 3408 - " snap %lld %d/%d -> %d/%d %s%s\n", 3409 - inode, capsnap, capsnap->context->seq, 3410 - ci->i_wrbuffer_ref+nr, capsnap->dirty_pages + nr, 3411 - ci->i_wrbuffer_ref, capsnap->dirty_pages, 3412 - last ? " (wrbuffer last)" : "", 3413 - complete_capsnap ? " (complete capsnap)" : ""); 3324 + doutc(cl, "%p %llx.%llx cap_snap %p snap %lld %d/%d -> %d/%d %s%s\n", 3325 + inode, ceph_vinop(inode), capsnap, capsnap->context->seq, 3326 + ci->i_wrbuffer_ref+nr, capsnap->dirty_pages + nr, 3327 + ci->i_wrbuffer_ref, capsnap->dirty_pages, 3328 + last ? " (wrbuffer last)" : "", 3329 + complete_capsnap ? " (complete capsnap)" : ""); 3414 3330 } 3415 3331 3416 3332 unlock: ··· 3432 3350 */ 3433 3351 static void invalidate_aliases(struct inode *inode) 3434 3352 { 3353 + struct ceph_client *cl = ceph_inode_to_client(inode); 3435 3354 struct dentry *dn, *prev = NULL; 3436 3355 3437 - dout("invalidate_aliases inode %p\n", inode); 3356 + doutc(cl, "%p %llx.%llx\n", inode, ceph_vinop(inode)); 3438 3357 d_prune_aliases(inode); 3439 3358 /* 3440 3359 * For non-directory inode, d_find_alias() only returns ··· 3494 3411 __releases(ci->i_ceph_lock) 3495 3412 __releases(session->s_mdsc->snap_rwsem) 3496 3413 { 3414 + struct ceph_client *cl = ceph_inode_to_client(inode); 3497 3415 struct ceph_inode_info *ci = ceph_inode(inode); 3498 3416 int seq = le32_to_cpu(grant->seq); 3499 3417 int newcaps = le32_to_cpu(grant->caps); ··· 3518 3434 if (IS_ENCRYPTED(inode) && size) 3519 3435 size = extra_info->fscrypt_file_size; 3520 3436 3521 - dout("handle_cap_grant inode %p cap %p mds%d seq %d %s\n", 3522 - inode, cap, session->s_mds, seq, ceph_cap_string(newcaps)); 3523 - dout(" size %llu max_size %llu, i_size %llu\n", size, max_size, 3524 - i_size_read(inode)); 3437 + doutc(cl, "%p %llx.%llx cap %p mds%d seq %d %s\n", inode, 3438 + ceph_vinop(inode), cap, session->s_mds, seq, 3439 + ceph_cap_string(newcaps)); 3440 + doutc(cl, " size %llu max_size %llu, i_size %llu\n", size, 3441 + max_size, i_size_read(inode)); 3525 3442 3526 3443 3527 3444 /* ··· 3582 3497 inode->i_uid = make_kuid(&init_user_ns, le32_to_cpu(grant->uid)); 3583 3498 inode->i_gid = make_kgid(&init_user_ns, le32_to_cpu(grant->gid)); 3584 3499 ci->i_btime = extra_info->btime; 3585 - dout("%p mode 0%o uid.gid %d.%d\n", inode, inode->i_mode, 3586 - from_kuid(&init_user_ns, inode->i_uid), 3587 - from_kgid(&init_user_ns, inode->i_gid)); 3500 + doutc(cl, "%p %llx.%llx mode 0%o uid.gid %d.%d\n", inode, 3501 + ceph_vinop(inode), inode->i_mode, 3502 + from_kuid(&init_user_ns, inode->i_uid), 3503 + from_kgid(&init_user_ns, inode->i_gid)); 3588 3504 #if IS_ENABLED(CONFIG_FS_ENCRYPTION) 3589 3505 if (ci->fscrypt_auth_len != extra_info->fscrypt_auth_len || 3590 3506 memcmp(ci->fscrypt_auth, extra_info->fscrypt_auth, 3591 3507 ci->fscrypt_auth_len)) 3592 - pr_warn_ratelimited("%s: cap grant attempt to change fscrypt_auth on non-I_NEW inode (old len %d new len %d)\n", 3593 - __func__, ci->fscrypt_auth_len, 3508 + pr_warn_ratelimited_client(cl, 3509 + "cap grant attempt to change fscrypt_auth on non-I_NEW inode (old len %d new len %d)\n", 3510 + ci->fscrypt_auth_len, 3594 3511 extra_info->fscrypt_auth_len); 3595 3512 #endif 3596 3513 } ··· 3610 3523 u64 version = le64_to_cpu(grant->xattr_version); 3611 3524 3612 3525 if (version > ci->i_xattrs.version) { 3613 - dout(" got new xattrs v%llu on %p len %d\n", 3614 - version, inode, len); 3526 + doutc(cl, " got new xattrs v%llu on %p %llx.%llx len %d\n", 3527 + version, inode, ceph_vinop(inode), len); 3615 3528 if (ci->i_xattrs.blob) 3616 3529 ceph_buffer_put(ci->i_xattrs.blob); 3617 3530 ci->i_xattrs.blob = ceph_buffer_get(xattr_buf); ··· 3662 3575 3663 3576 if (ci->i_auth_cap == cap && (newcaps & CEPH_CAP_ANY_FILE_WR)) { 3664 3577 if (max_size != ci->i_max_size) { 3665 - dout("max_size %lld -> %llu\n", 3666 - ci->i_max_size, max_size); 3578 + doutc(cl, "max_size %lld -> %llu\n", ci->i_max_size, 3579 + max_size); 3667 3580 ci->i_max_size = max_size; 3668 3581 if (max_size >= ci->i_wanted_max_size) { 3669 3582 ci->i_wanted_max_size = 0; /* reset */ ··· 3677 3590 wanted = __ceph_caps_wanted(ci); 3678 3591 used = __ceph_caps_used(ci); 3679 3592 dirty = __ceph_caps_dirty(ci); 3680 - dout(" my wanted = %s, used = %s, dirty %s\n", 3681 - ceph_cap_string(wanted), 3682 - ceph_cap_string(used), 3683 - ceph_cap_string(dirty)); 3593 + doutc(cl, " my wanted = %s, used = %s, dirty %s\n", 3594 + ceph_cap_string(wanted), ceph_cap_string(used), 3595 + ceph_cap_string(dirty)); 3684 3596 3685 3597 if ((was_stale || le32_to_cpu(grant->op) == CEPH_CAP_OP_IMPORT) && 3686 3598 (wanted & ~(cap->mds_wanted | newcaps))) { ··· 3700 3614 if (cap->issued & ~newcaps) { 3701 3615 int revoking = cap->issued & ~newcaps; 3702 3616 3703 - dout("revocation: %s -> %s (revoking %s)\n", 3704 - ceph_cap_string(cap->issued), 3705 - ceph_cap_string(newcaps), 3706 - ceph_cap_string(revoking)); 3617 + doutc(cl, "revocation: %s -> %s (revoking %s)\n", 3618 + ceph_cap_string(cap->issued), ceph_cap_string(newcaps), 3619 + ceph_cap_string(revoking)); 3707 3620 if (S_ISREG(inode->i_mode) && 3708 3621 (revoking & used & CEPH_CAP_FILE_BUFFER)) 3709 3622 writeback = true; /* initiate writeback; will delay ack */ ··· 3720 3635 cap->issued = newcaps; 3721 3636 cap->implemented |= newcaps; 3722 3637 } else if (cap->issued == newcaps) { 3723 - dout("caps unchanged: %s -> %s\n", 3724 - ceph_cap_string(cap->issued), ceph_cap_string(newcaps)); 3638 + doutc(cl, "caps unchanged: %s -> %s\n", 3639 + ceph_cap_string(cap->issued), 3640 + ceph_cap_string(newcaps)); 3725 3641 } else { 3726 - dout("grant: %s -> %s\n", ceph_cap_string(cap->issued), 3727 - ceph_cap_string(newcaps)); 3642 + doutc(cl, "grant: %s -> %s\n", ceph_cap_string(cap->issued), 3643 + ceph_cap_string(newcaps)); 3728 3644 /* non-auth MDS is revoking the newly grant caps ? */ 3729 3645 if (cap == ci->i_auth_cap && 3730 3646 __ceph_caps_revoking_other(ci, cap, newcaps)) ··· 3813 3727 __releases(ci->i_ceph_lock) 3814 3728 { 3815 3729 struct ceph_inode_info *ci = ceph_inode(inode); 3816 - struct ceph_mds_client *mdsc = ceph_sb_to_client(inode->i_sb)->mdsc; 3730 + struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(inode->i_sb)->mdsc; 3731 + struct ceph_client *cl = mdsc->fsc->client; 3817 3732 struct ceph_cap_flush *cf, *tmp_cf; 3818 3733 LIST_HEAD(to_remove); 3819 3734 unsigned seq = le32_to_cpu(m->seq); ··· 3851 3764 } 3852 3765 } 3853 3766 3854 - dout("handle_cap_flush_ack inode %p mds%d seq %d on %s cleaned %s," 3855 - " flushing %s -> %s\n", 3856 - inode, session->s_mds, seq, ceph_cap_string(dirty), 3857 - ceph_cap_string(cleaned), ceph_cap_string(ci->i_flushing_caps), 3858 - ceph_cap_string(ci->i_flushing_caps & ~cleaned)); 3767 + doutc(cl, "%p %llx.%llx mds%d seq %d on %s cleaned %s, flushing %s -> %s\n", 3768 + inode, ceph_vinop(inode), session->s_mds, seq, 3769 + ceph_cap_string(dirty), ceph_cap_string(cleaned), 3770 + ceph_cap_string(ci->i_flushing_caps), 3771 + ceph_cap_string(ci->i_flushing_caps & ~cleaned)); 3859 3772 3860 3773 if (list_empty(&to_remove) && !cleaned) 3861 3774 goto out; ··· 3871 3784 if (list_empty(&ci->i_cap_flush_list)) { 3872 3785 list_del_init(&ci->i_flushing_item); 3873 3786 if (!list_empty(&session->s_cap_flushing)) { 3874 - dout(" mds%d still flushing cap on %p\n", 3875 - session->s_mds, 3876 - &list_first_entry(&session->s_cap_flushing, 3877 - struct ceph_inode_info, 3878 - i_flushing_item)->netfs.inode); 3787 + struct inode *inode = 3788 + &list_first_entry(&session->s_cap_flushing, 3789 + struct ceph_inode_info, 3790 + i_flushing_item)->netfs.inode; 3791 + doutc(cl, " mds%d still flushing cap on %p %llx.%llx\n", 3792 + session->s_mds, inode, ceph_vinop(inode)); 3879 3793 } 3880 3794 } 3881 3795 mdsc->num_cap_flushing--; 3882 - dout(" inode %p now !flushing\n", inode); 3796 + doutc(cl, " %p %llx.%llx now !flushing\n", inode, 3797 + ceph_vinop(inode)); 3883 3798 3884 3799 if (ci->i_dirty_caps == 0) { 3885 - dout(" inode %p now clean\n", inode); 3800 + doutc(cl, " %p %llx.%llx now clean\n", inode, 3801 + ceph_vinop(inode)); 3886 3802 BUG_ON(!list_empty(&ci->i_dirty_item)); 3887 3803 drop = true; 3888 3804 if (ci->i_wr_ref == 0 && ··· 3923 3833 bool *wake_ci, bool *wake_mdsc) 3924 3834 { 3925 3835 struct ceph_inode_info *ci = ceph_inode(inode); 3926 - struct ceph_mds_client *mdsc = ceph_sb_to_client(inode->i_sb)->mdsc; 3836 + struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(inode->i_sb)->mdsc; 3837 + struct ceph_client *cl = mdsc->fsc->client; 3927 3838 bool ret; 3928 3839 3929 3840 lockdep_assert_held(&ci->i_ceph_lock); 3930 3841 3931 - dout("removing capsnap %p, inode %p ci %p\n", capsnap, inode, ci); 3842 + doutc(cl, "removing capsnap %p, %p %llx.%llx ci %p\n", capsnap, 3843 + inode, ceph_vinop(inode), ci); 3932 3844 3933 3845 list_del_init(&capsnap->ci_item); 3934 3846 ret = __detach_cap_flush_from_ci(ci, &capsnap->cap_flush); ··· 3969 3877 struct ceph_mds_session *session) 3970 3878 { 3971 3879 struct ceph_inode_info *ci = ceph_inode(inode); 3972 - struct ceph_mds_client *mdsc = ceph_sb_to_client(inode->i_sb)->mdsc; 3880 + struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(inode->i_sb)->mdsc; 3881 + struct ceph_client *cl = mdsc->fsc->client; 3973 3882 u64 follows = le64_to_cpu(m->snap_follows); 3974 3883 struct ceph_cap_snap *capsnap = NULL, *iter; 3975 3884 bool wake_ci = false; 3976 3885 bool wake_mdsc = false; 3977 3886 3978 - dout("handle_cap_flushsnap_ack inode %p ci %p mds%d follows %lld\n", 3979 - inode, ci, session->s_mds, follows); 3887 + doutc(cl, "%p %llx.%llx ci %p mds%d follows %lld\n", inode, 3888 + ceph_vinop(inode), ci, session->s_mds, follows); 3980 3889 3981 3890 spin_lock(&ci->i_ceph_lock); 3982 3891 list_for_each_entry(iter, &ci->i_cap_snaps, ci_item) { 3983 3892 if (iter->follows == follows) { 3984 3893 if (iter->cap_flush.tid != flush_tid) { 3985 - dout(" cap_snap %p follows %lld tid %lld !=" 3986 - " %lld\n", iter, follows, 3987 - flush_tid, iter->cap_flush.tid); 3894 + doutc(cl, " cap_snap %p follows %lld " 3895 + "tid %lld != %lld\n", iter, 3896 + follows, flush_tid, 3897 + iter->cap_flush.tid); 3988 3898 break; 3989 3899 } 3990 3900 capsnap = iter; 3991 3901 break; 3992 3902 } else { 3993 - dout(" skipping cap_snap %p follows %lld\n", 3994 - iter, iter->follows); 3903 + doutc(cl, " skipping cap_snap %p follows %lld\n", 3904 + iter, iter->follows); 3995 3905 } 3996 3906 } 3997 3907 if (capsnap) ··· 4022 3928 struct cap_extra_info *extra_info) 4023 3929 { 4024 3930 struct ceph_inode_info *ci = ceph_inode(inode); 3931 + struct ceph_client *cl = ceph_inode_to_client(inode); 4025 3932 int mds = session->s_mds; 4026 3933 int seq = le32_to_cpu(trunc->seq); 4027 3934 u32 truncate_seq = le32_to_cpu(trunc->truncate_seq); ··· 4045 3950 if (IS_ENCRYPTED(inode) && size) 4046 3951 size = extra_info->fscrypt_file_size; 4047 3952 4048 - dout("%s inode %p mds%d seq %d to %lld truncate seq %d\n", 4049 - __func__, inode, mds, seq, truncate_size, truncate_seq); 3953 + doutc(cl, "%p %llx.%llx mds%d seq %d to %lld truncate seq %d\n", 3954 + inode, ceph_vinop(inode), mds, seq, truncate_size, truncate_seq); 4050 3955 queue_trunc = ceph_fill_file_size(inode, issued, 4051 3956 truncate_seq, truncate_size, size); 4052 3957 return queue_trunc; ··· 4064 3969 struct ceph_mds_cap_peer *ph, 4065 3970 struct ceph_mds_session *session) 4066 3971 { 4067 - struct ceph_mds_client *mdsc = ceph_inode_to_client(inode)->mdsc; 3972 + struct ceph_mds_client *mdsc = ceph_inode_to_fs_client(inode)->mdsc; 3973 + struct ceph_client *cl = mdsc->fsc->client; 4068 3974 struct ceph_mds_session *tsession = NULL; 4069 3975 struct ceph_cap *cap, *tcap, *new_cap = NULL; 4070 3976 struct ceph_inode_info *ci = ceph_inode(inode); ··· 4085 3989 target = -1; 4086 3990 } 4087 3991 4088 - dout("handle_cap_export inode %p ci %p mds%d mseq %d target %d\n", 4089 - inode, ci, mds, mseq, target); 3992 + doutc(cl, "%p %llx.%llx ci %p mds%d mseq %d target %d\n", 3993 + inode, ceph_vinop(inode), ci, mds, mseq, target); 4090 3994 retry: 4091 3995 down_read(&mdsc->snap_rwsem); 4092 3996 spin_lock(&ci->i_ceph_lock); ··· 4095 3999 goto out_unlock; 4096 4000 4097 4001 if (target < 0) { 4098 - ceph_remove_cap(cap, false); 4002 + ceph_remove_cap(mdsc, cap, false); 4099 4003 goto out_unlock; 4100 4004 } 4101 4005 ··· 4106 4010 4107 4011 issued = cap->issued; 4108 4012 if (issued != cap->implemented) 4109 - pr_err_ratelimited("handle_cap_export: issued != implemented: " 4110 - "ino (%llx.%llx) mds%d seq %d mseq %d " 4111 - "issued %s implemented %s\n", 4112 - ceph_vinop(inode), mds, cap->seq, cap->mseq, 4113 - ceph_cap_string(issued), 4114 - ceph_cap_string(cap->implemented)); 4013 + pr_err_ratelimited_client(cl, "issued != implemented: " 4014 + "%p %llx.%llx mds%d seq %d mseq %d" 4015 + " issued %s implemented %s\n", 4016 + inode, ceph_vinop(inode), mds, 4017 + cap->seq, cap->mseq, 4018 + ceph_cap_string(issued), 4019 + ceph_cap_string(cap->implemented)); 4115 4020 4116 4021 4117 4022 tcap = __get_cap_for_mds(ci, target); ··· 4120 4023 /* already have caps from the target */ 4121 4024 if (tcap->cap_id == t_cap_id && 4122 4025 ceph_seq_cmp(tcap->seq, t_seq) < 0) { 4123 - dout(" updating import cap %p mds%d\n", tcap, target); 4026 + doutc(cl, " updating import cap %p mds%d\n", tcap, 4027 + target); 4124 4028 tcap->cap_id = t_cap_id; 4125 4029 tcap->seq = t_seq - 1; 4126 4030 tcap->issue_seq = t_seq - 1; ··· 4132 4034 change_auth_cap_ses(ci, tcap->session); 4133 4035 } 4134 4036 } 4135 - ceph_remove_cap(cap, false); 4037 + ceph_remove_cap(mdsc, cap, false); 4136 4038 goto out_unlock; 4137 4039 } else if (tsession) { 4138 4040 /* add placeholder for the export tagert */ ··· 4149 4051 spin_unlock(&mdsc->cap_dirty_lock); 4150 4052 } 4151 4053 4152 - ceph_remove_cap(cap, false); 4054 + ceph_remove_cap(mdsc, cap, false); 4153 4055 goto out_unlock; 4154 4056 } 4155 4057 ··· 4202 4104 struct ceph_cap **target_cap, int *old_issued) 4203 4105 { 4204 4106 struct ceph_inode_info *ci = ceph_inode(inode); 4107 + struct ceph_client *cl = mdsc->fsc->client; 4205 4108 struct ceph_cap *cap, *ocap, *new_cap = NULL; 4206 4109 int mds = session->s_mds; 4207 4110 int issued; ··· 4223 4124 peer = -1; 4224 4125 } 4225 4126 4226 - dout("handle_cap_import inode %p ci %p mds%d mseq %d peer %d\n", 4227 - inode, ci, mds, mseq, peer); 4127 + doutc(cl, "%p %llx.%llx ci %p mds%d mseq %d peer %d\n", 4128 + inode, ceph_vinop(inode), ci, mds, mseq, peer); 4228 4129 retry: 4229 4130 cap = __get_cap_for_mds(ci, mds); 4230 4131 if (!cap) { ··· 4250 4151 4251 4152 ocap = peer >= 0 ? __get_cap_for_mds(ci, peer) : NULL; 4252 4153 if (ocap && ocap->cap_id == p_cap_id) { 4253 - dout(" remove export cap %p mds%d flags %d\n", 4254 - ocap, peer, ph->flags); 4154 + doutc(cl, " remove export cap %p mds%d flags %d\n", 4155 + ocap, peer, ph->flags); 4255 4156 if ((ph->flags & CEPH_CAP_FLAG_AUTH) && 4256 4157 (ocap->seq != le32_to_cpu(ph->seq) || 4257 4158 ocap->mseq != le32_to_cpu(ph->mseq))) { 4258 - pr_err_ratelimited("handle_cap_import: " 4259 - "mismatched seq/mseq: ino (%llx.%llx) " 4260 - "mds%d seq %d mseq %d importer mds%d " 4261 - "has peer seq %d mseq %d\n", 4262 - ceph_vinop(inode), peer, ocap->seq, 4263 - ocap->mseq, mds, le32_to_cpu(ph->seq), 4159 + pr_err_ratelimited_client(cl, "mismatched seq/mseq: " 4160 + "%p %llx.%llx mds%d seq %d mseq %d" 4161 + " importer mds%d has peer seq %d mseq %d\n", 4162 + inode, ceph_vinop(inode), peer, 4163 + ocap->seq, ocap->mseq, mds, 4164 + le32_to_cpu(ph->seq), 4264 4165 le32_to_cpu(ph->mseq)); 4265 4166 } 4266 - ceph_remove_cap(ocap, (ph->flags & CEPH_CAP_FLAG_RELEASE)); 4167 + ceph_remove_cap(mdsc, ocap, (ph->flags & CEPH_CAP_FLAG_RELEASE)); 4267 4168 } 4268 4169 4269 4170 *old_issued = issued; ··· 4326 4227 struct ceph_msg *msg) 4327 4228 { 4328 4229 struct ceph_mds_client *mdsc = session->s_mdsc; 4230 + struct ceph_client *cl = mdsc->fsc->client; 4329 4231 struct inode *inode; 4330 4232 struct ceph_inode_info *ci; 4331 4233 struct ceph_cap *cap; ··· 4345 4245 bool close_sessions = false; 4346 4246 bool do_cap_release = false; 4347 4247 4348 - dout("handle_caps from mds%d\n", session->s_mds); 4248 + doutc(cl, "from mds%d\n", session->s_mds); 4349 4249 4350 4250 if (!ceph_inc_mds_stopping_blocker(mdsc, session)) 4351 4251 return; ··· 4447 4347 4448 4348 /* lookup ino */ 4449 4349 inode = ceph_find_inode(mdsc->fsc->sb, vino); 4450 - dout(" op %s ino %llx.%llx inode %p\n", ceph_cap_op_name(op), vino.ino, 4451 - vino.snap, inode); 4350 + doutc(cl, " op %s ino %llx.%llx inode %p\n", ceph_cap_op_name(op), 4351 + vino.ino, vino.snap, inode); 4452 4352 4453 4353 mutex_lock(&session->s_mutex); 4454 - dout(" mds%d seq %lld cap seq %u\n", session->s_mds, session->s_seq, 4455 - (unsigned)seq); 4354 + doutc(cl, " mds%d seq %lld cap seq %u\n", session->s_mds, 4355 + session->s_seq, (unsigned)seq); 4456 4356 4457 4357 if (!inode) { 4458 - dout(" i don't have ino %llx\n", vino.ino); 4358 + doutc(cl, " i don't have ino %llx\n", vino.ino); 4459 4359 4460 4360 switch (op) { 4461 4361 case CEPH_CAP_OP_IMPORT: ··· 4510 4410 spin_lock(&ci->i_ceph_lock); 4511 4411 cap = __get_cap_for_mds(ceph_inode(inode), session->s_mds); 4512 4412 if (!cap) { 4513 - dout(" no cap on %p ino %llx.%llx from mds%d\n", 4514 - inode, ceph_ino(inode), ceph_snap(inode), 4515 - session->s_mds); 4413 + doutc(cl, " no cap on %p ino %llx.%llx from mds%d\n", 4414 + inode, ceph_ino(inode), ceph_snap(inode), 4415 + session->s_mds); 4516 4416 spin_unlock(&ci->i_ceph_lock); 4517 4417 switch (op) { 4518 4418 case CEPH_CAP_OP_REVOKE: ··· 4550 4450 4551 4451 default: 4552 4452 spin_unlock(&ci->i_ceph_lock); 4553 - pr_err("ceph_handle_caps: unknown cap op %d %s\n", op, 4554 - ceph_cap_op_name(op)); 4453 + pr_err_client(cl, "unknown cap op %d %s\n", op, 4454 + ceph_cap_op_name(op)); 4555 4455 } 4556 4456 4557 4457 done: ··· 4592 4492 goto done; 4593 4493 4594 4494 bad: 4595 - pr_err("ceph_handle_caps: corrupt message\n"); 4495 + pr_err_client(cl, "corrupt message\n"); 4596 4496 ceph_msg_dump(msg); 4597 4497 goto out; 4598 4498 } ··· 4606 4506 */ 4607 4507 unsigned long ceph_check_delayed_caps(struct ceph_mds_client *mdsc) 4608 4508 { 4509 + struct ceph_client *cl = mdsc->fsc->client; 4609 4510 struct inode *inode; 4610 4511 struct ceph_inode_info *ci; 4611 4512 struct ceph_mount_options *opt = mdsc->fsc->mount_options; ··· 4614 4513 unsigned long loop_start = jiffies; 4615 4514 unsigned long delay = 0; 4616 4515 4617 - dout("check_delayed_caps\n"); 4516 + doutc(cl, "begin\n"); 4618 4517 spin_lock(&mdsc->cap_delay_lock); 4619 4518 while (!list_empty(&mdsc->cap_delay_list)) { 4620 4519 ci = list_first_entry(&mdsc->cap_delay_list, 4621 4520 struct ceph_inode_info, 4622 4521 i_cap_delay_list); 4623 4522 if (time_before(loop_start, ci->i_hold_caps_max - delay_max)) { 4624 - dout("%s caps added recently. Exiting loop", __func__); 4523 + doutc(cl, "caps added recently. Exiting loop"); 4625 4524 delay = ci->i_hold_caps_max; 4626 4525 break; 4627 4526 } ··· 4633 4532 inode = igrab(&ci->netfs.inode); 4634 4533 if (inode) { 4635 4534 spin_unlock(&mdsc->cap_delay_lock); 4636 - dout("check_delayed_caps on %p\n", inode); 4535 + doutc(cl, "on %p %llx.%llx\n", inode, 4536 + ceph_vinop(inode)); 4637 4537 ceph_check_caps(ci, 0); 4638 4538 iput(inode); 4639 4539 spin_lock(&mdsc->cap_delay_lock); 4640 4540 } 4641 4541 } 4642 4542 spin_unlock(&mdsc->cap_delay_lock); 4543 + doutc(cl, "done\n"); 4643 4544 4644 4545 return delay; 4645 4546 } ··· 4652 4549 static void flush_dirty_session_caps(struct ceph_mds_session *s) 4653 4550 { 4654 4551 struct ceph_mds_client *mdsc = s->s_mdsc; 4552 + struct ceph_client *cl = mdsc->fsc->client; 4655 4553 struct ceph_inode_info *ci; 4656 4554 struct inode *inode; 4657 4555 4658 - dout("flush_dirty_caps\n"); 4556 + doutc(cl, "begin\n"); 4659 4557 spin_lock(&mdsc->cap_dirty_lock); 4660 4558 while (!list_empty(&s->s_cap_dirty)) { 4661 4559 ci = list_first_entry(&s->s_cap_dirty, struct ceph_inode_info, 4662 4560 i_dirty_item); 4663 4561 inode = &ci->netfs.inode; 4664 4562 ihold(inode); 4665 - dout("flush_dirty_caps %llx.%llx\n", ceph_vinop(inode)); 4563 + doutc(cl, "%p %llx.%llx\n", inode, ceph_vinop(inode)); 4666 4564 spin_unlock(&mdsc->cap_dirty_lock); 4667 4565 ceph_wait_on_async_create(inode); 4668 4566 ceph_check_caps(ci, CHECK_CAPS_FLUSH); ··· 4671 4567 spin_lock(&mdsc->cap_dirty_lock); 4672 4568 } 4673 4569 spin_unlock(&mdsc->cap_dirty_lock); 4674 - dout("flush_dirty_caps done\n"); 4570 + doutc(cl, "done\n"); 4675 4571 } 4676 4572 4677 4573 void ceph_flush_dirty_caps(struct ceph_mds_client *mdsc) ··· 4776 4672 4777 4673 if (__ceph_caps_dirty(ci)) { 4778 4674 struct ceph_mds_client *mdsc = 4779 - ceph_inode_to_client(inode)->mdsc; 4675 + ceph_inode_to_fs_client(inode)->mdsc; 4780 4676 __cap_delay_requeue_front(mdsc, ci); 4781 4677 } 4782 4678 } ··· 4796 4692 int mds, int drop, int unless, int force) 4797 4693 { 4798 4694 struct ceph_inode_info *ci = ceph_inode(inode); 4695 + struct ceph_client *cl = ceph_inode_to_client(inode); 4799 4696 struct ceph_cap *cap; 4800 4697 struct ceph_mds_request_release *rel = *p; 4801 4698 int used, dirty; ··· 4806 4701 used = __ceph_caps_used(ci); 4807 4702 dirty = __ceph_caps_dirty(ci); 4808 4703 4809 - dout("encode_inode_release %p mds%d used|dirty %s drop %s unless %s\n", 4810 - inode, mds, ceph_cap_string(used|dirty), ceph_cap_string(drop), 4811 - ceph_cap_string(unless)); 4704 + doutc(cl, "%p %llx.%llx mds%d used|dirty %s drop %s unless %s\n", 4705 + inode, ceph_vinop(inode), mds, ceph_cap_string(used|dirty), 4706 + ceph_cap_string(drop), ceph_cap_string(unless)); 4812 4707 4813 4708 /* only drop unused, clean caps */ 4814 4709 drop &= ~(used | dirty); ··· 4830 4725 if (force || (cap->issued & drop)) { 4831 4726 if (cap->issued & drop) { 4832 4727 int wanted = __ceph_caps_wanted(ci); 4833 - dout("encode_inode_release %p cap %p " 4834 - "%s -> %s, wanted %s -> %s\n", inode, cap, 4835 - ceph_cap_string(cap->issued), 4836 - ceph_cap_string(cap->issued & ~drop), 4837 - ceph_cap_string(cap->mds_wanted), 4838 - ceph_cap_string(wanted)); 4728 + doutc(cl, "%p %llx.%llx cap %p %s -> %s, " 4729 + "wanted %s -> %s\n", inode, 4730 + ceph_vinop(inode), cap, 4731 + ceph_cap_string(cap->issued), 4732 + ceph_cap_string(cap->issued & ~drop), 4733 + ceph_cap_string(cap->mds_wanted), 4734 + ceph_cap_string(wanted)); 4839 4735 4840 4736 cap->issued &= ~drop; 4841 4737 cap->implemented &= ~drop; ··· 4845 4739 !(wanted & CEPH_CAP_ANY_FILE_WR)) 4846 4740 ci->i_requested_max_size = 0; 4847 4741 } else { 4848 - dout("encode_inode_release %p cap %p %s" 4849 - " (force)\n", inode, cap, 4850 - ceph_cap_string(cap->issued)); 4742 + doutc(cl, "%p %llx.%llx cap %p %s (force)\n", 4743 + inode, ceph_vinop(inode), cap, 4744 + ceph_cap_string(cap->issued)); 4851 4745 } 4852 4746 4853 4747 rel->ino = cpu_to_le64(ceph_ino(inode)); ··· 4862 4756 *p += sizeof(*rel); 4863 4757 ret = 1; 4864 4758 } else { 4865 - dout("encode_inode_release %p cap %p %s (noop)\n", 4866 - inode, cap, ceph_cap_string(cap->issued)); 4759 + doutc(cl, "%p %llx.%llx cap %p %s (noop)\n", 4760 + inode, ceph_vinop(inode), cap, 4761 + ceph_cap_string(cap->issued)); 4867 4762 } 4868 4763 } 4869 4764 spin_unlock(&ci->i_ceph_lock); ··· 4890 4783 struct dentry *parent = NULL; 4891 4784 struct ceph_mds_request_release *rel = *p; 4892 4785 struct ceph_dentry_info *di = ceph_dentry(dentry); 4786 + struct ceph_client *cl; 4893 4787 int force = 0; 4894 4788 int ret; 4895 4789 ··· 4912 4804 ret = ceph_encode_inode_release(p, dir, mds, drop, unless, force); 4913 4805 dput(parent); 4914 4806 4807 + cl = ceph_inode_to_client(dir); 4915 4808 spin_lock(&dentry->d_lock); 4916 4809 if (ret && di->lease_session && di->lease_session->s_mds == mds) { 4917 - dout("encode_dentry_release %p mds%d seq %d\n", 4918 - dentry, mds, (int)di->lease_seq); 4810 + doutc(cl, "%p mds%d seq %d\n", dentry, mds, 4811 + (int)di->lease_seq); 4919 4812 rel->dname_seq = cpu_to_le32(di->lease_seq); 4920 4813 __ceph_mdsc_drop_dentry_lease(dentry); 4921 4814 spin_unlock(&dentry->d_lock); ··· 4942 4833 static int remove_capsnaps(struct ceph_mds_client *mdsc, struct inode *inode) 4943 4834 { 4944 4835 struct ceph_inode_info *ci = ceph_inode(inode); 4836 + struct ceph_client *cl = mdsc->fsc->client; 4945 4837 struct ceph_cap_snap *capsnap; 4946 4838 int capsnap_release = 0; 4947 4839 4948 4840 lockdep_assert_held(&ci->i_ceph_lock); 4949 4841 4950 - dout("removing capsnaps, ci is %p, inode is %p\n", ci, inode); 4842 + doutc(cl, "removing capsnaps, ci is %p, %p %llx.%llx\n", 4843 + ci, inode, ceph_vinop(inode)); 4951 4844 4952 4845 while (!list_empty(&ci->i_cap_snaps)) { 4953 4846 capsnap = list_first_entry(&ci->i_cap_snaps, ··· 4966 4855 4967 4856 int ceph_purge_inode_cap(struct inode *inode, struct ceph_cap *cap, bool *invalidate) 4968 4857 { 4969 - struct ceph_fs_client *fsc = ceph_inode_to_client(inode); 4858 + struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode); 4970 4859 struct ceph_mds_client *mdsc = fsc->mdsc; 4860 + struct ceph_client *cl = fsc->client; 4971 4861 struct ceph_inode_info *ci = ceph_inode(inode); 4972 4862 bool is_auth; 4973 4863 bool dirty_dropped = false; ··· 4976 4864 4977 4865 lockdep_assert_held(&ci->i_ceph_lock); 4978 4866 4979 - dout("removing cap %p, ci is %p, inode is %p\n", 4980 - cap, ci, &ci->netfs.inode); 4867 + doutc(cl, "removing cap %p, ci is %p, %p %llx.%llx\n", 4868 + cap, ci, inode, ceph_vinop(inode)); 4981 4869 4982 4870 is_auth = (cap == ci->i_auth_cap); 4983 4871 __ceph_remove_cap(cap, false); ··· 5004 4892 } 5005 4893 5006 4894 if (!list_empty(&ci->i_dirty_item)) { 5007 - pr_warn_ratelimited( 5008 - " dropping dirty %s state for %p %lld\n", 4895 + pr_warn_ratelimited_client(cl, 4896 + " dropping dirty %s state for %p %llx.%llx\n", 5009 4897 ceph_cap_string(ci->i_dirty_caps), 5010 - inode, ceph_ino(inode)); 4898 + inode, ceph_vinop(inode)); 5011 4899 ci->i_dirty_caps = 0; 5012 4900 list_del_init(&ci->i_dirty_item); 5013 4901 dirty_dropped = true; 5014 4902 } 5015 4903 if (!list_empty(&ci->i_flushing_item)) { 5016 - pr_warn_ratelimited( 5017 - " dropping dirty+flushing %s state for %p %lld\n", 4904 + pr_warn_ratelimited_client(cl, 4905 + " dropping dirty+flushing %s state for %p %llx.%llx\n", 5018 4906 ceph_cap_string(ci->i_flushing_caps), 5019 - inode, ceph_ino(inode)); 4907 + inode, ceph_vinop(inode)); 5020 4908 ci->i_flushing_caps = 0; 5021 4909 list_del_init(&ci->i_flushing_item); 5022 4910 mdsc->num_cap_flushing--; ··· 5039 4927 if (atomic_read(&ci->i_filelock_ref) > 0) { 5040 4928 /* make further file lock syscall return -EIO */ 5041 4929 ci->i_ceph_flags |= CEPH_I_ERROR_FILELOCK; 5042 - pr_warn_ratelimited(" dropping file locks for %p %lld\n", 5043 - inode, ceph_ino(inode)); 4930 + pr_warn_ratelimited_client(cl, 4931 + " dropping file locks for %p %llx.%llx\n", 4932 + inode, ceph_vinop(inode)); 5044 4933 } 5045 4934 5046 4935 if (!ci->i_dirty_caps && ci->i_prealloc_cap_flush) {
+28 -15
fs/ceph/crypto.c
··· 113 113 114 114 cia.fscrypt_auth = cfa; 115 115 116 - ret = __ceph_setattr(inode, &attr, &cia); 116 + ret = __ceph_setattr(&nop_mnt_idmap, inode, &attr, &cia); 117 117 if (ret == 0) 118 118 inode_set_flags(inode, S_ENCRYPTED, S_ENCRYPTED); 119 119 kfree(cia.fscrypt_auth); ··· 129 129 130 130 static const union fscrypt_policy *ceph_get_dummy_policy(struct super_block *sb) 131 131 { 132 - return ceph_sb_to_client(sb)->fsc_dummy_enc_policy.policy; 132 + return ceph_sb_to_fs_client(sb)->fsc_dummy_enc_policy.policy; 133 133 } 134 134 135 135 static struct fscrypt_operations ceph_fscrypt_ops = { ··· 212 212 static struct inode *parse_longname(const struct inode *parent, 213 213 const char *name, int *name_len) 214 214 { 215 + struct ceph_client *cl = ceph_inode_to_client(parent); 215 216 struct inode *dir = NULL; 216 217 struct ceph_vino vino = { .snap = CEPH_NOSNAP }; 217 218 char *inode_number; ··· 224 223 name++; 225 224 name_end = strrchr(name, '_'); 226 225 if (!name_end) { 227 - dout("Failed to parse long snapshot name: %s\n", name); 226 + doutc(cl, "failed to parse long snapshot name: %s\n", name); 228 227 return ERR_PTR(-EIO); 229 228 } 230 229 *name_len = (name_end - name); 231 230 if (*name_len <= 0) { 232 - pr_err("Failed to parse long snapshot name\n"); 231 + pr_err_client(cl, "failed to parse long snapshot name\n"); 233 232 return ERR_PTR(-EIO); 234 233 } 235 234 ··· 241 240 return ERR_PTR(-ENOMEM); 242 241 ret = kstrtou64(inode_number, 10, &vino.ino); 243 242 if (ret) { 244 - dout("Failed to parse inode number: %s\n", name); 243 + doutc(cl, "failed to parse inode number: %s\n", name); 245 244 dir = ERR_PTR(ret); 246 245 goto out; 247 246 } ··· 252 251 /* This can happen if we're not mounting cephfs on the root */ 253 252 dir = ceph_get_inode(parent->i_sb, vino, NULL); 254 253 if (IS_ERR(dir)) 255 - dout("Can't find inode %s (%s)\n", inode_number, name); 254 + doutc(cl, "can't find inode %s (%s)\n", inode_number, name); 256 255 } 257 256 258 257 out: ··· 263 262 int ceph_encode_encrypted_dname(struct inode *parent, struct qstr *d_name, 264 263 char *buf) 265 264 { 265 + struct ceph_client *cl = ceph_inode_to_client(parent); 266 266 struct inode *dir = parent; 267 267 struct qstr iname; 268 268 u32 len; ··· 332 330 333 331 /* base64 encode the encrypted name */ 334 332 elen = ceph_base64_encode(cryptbuf, len, buf); 335 - dout("base64-encoded ciphertext name = %.*s\n", elen, buf); 333 + doutc(cl, "base64-encoded ciphertext name = %.*s\n", elen, buf); 336 334 337 335 /* To understand the 240 limit, see CEPH_NOHASH_NAME_MAX comments */ 338 336 WARN_ON(elen > 240); ··· 507 505 struct page *page, unsigned int len, 508 506 unsigned int offs, u64 lblk_num) 509 507 { 510 - dout("%s: len %u offs %u blk %llu\n", __func__, len, offs, lblk_num); 508 + struct ceph_client *cl = ceph_inode_to_client(inode); 509 + 510 + doutc(cl, "%p %llx.%llx len %u offs %u blk %llu\n", inode, 511 + ceph_vinop(inode), len, offs, lblk_num); 511 512 return fscrypt_decrypt_block_inplace(inode, page, len, offs, lblk_num); 512 513 } 513 514 ··· 519 514 unsigned int offs, u64 lblk_num, 520 515 gfp_t gfp_flags) 521 516 { 522 - dout("%s: len %u offs %u blk %llu\n", __func__, len, offs, lblk_num); 517 + struct ceph_client *cl = ceph_inode_to_client(inode); 518 + 519 + doutc(cl, "%p %llx.%llx len %u offs %u blk %llu\n", inode, 520 + ceph_vinop(inode), len, offs, lblk_num); 523 521 return fscrypt_encrypt_block_inplace(inode, page, len, offs, lblk_num, 524 522 gfp_flags); 525 523 } ··· 591 583 u64 off, struct ceph_sparse_extent *map, 592 584 u32 ext_cnt) 593 585 { 586 + struct ceph_client *cl = ceph_inode_to_client(inode); 594 587 int i, ret = 0; 595 588 struct ceph_inode_info *ci = ceph_inode(inode); 596 589 u64 objno, objoff; ··· 599 590 600 591 /* Nothing to do for empty array */ 601 592 if (ext_cnt == 0) { 602 - dout("%s: empty array, ret 0\n", __func__); 593 + doutc(cl, "%p %llx.%llx empty array, ret 0\n", inode, 594 + ceph_vinop(inode)); 603 595 return 0; 604 596 } 605 597 ··· 614 604 int fret; 615 605 616 606 if ((ext->off | ext->len) & ~CEPH_FSCRYPT_BLOCK_MASK) { 617 - pr_warn("%s: bad encrypted sparse extent idx %d off %llx len %llx\n", 618 - __func__, i, ext->off, ext->len); 607 + pr_warn_client(cl, 608 + "%p %llx.%llx bad encrypted sparse extent " 609 + "idx %d off %llx len %llx\n", 610 + inode, ceph_vinop(inode), i, ext->off, 611 + ext->len); 619 612 return -EIO; 620 613 } 621 614 fret = ceph_fscrypt_decrypt_pages(inode, &page[pgidx], 622 615 off + pgsoff, ext->len); 623 - dout("%s: [%d] 0x%llx~0x%llx fret %d\n", __func__, i, 624 - ext->off, ext->len, fret); 616 + doutc(cl, "%p %llx.%llx [%d] 0x%llx~0x%llx fret %d\n", inode, 617 + ceph_vinop(inode), i, ext->off, ext->len, fret); 625 618 if (fret < 0) { 626 619 if (ret == 0) 627 620 ret = fret; ··· 632 619 } 633 620 ret = pgsoff + fret; 634 621 } 635 - dout("%s: ret %d\n", __func__, ret); 622 + doutc(cl, "ret %d\n", ret); 636 623 return ret; 637 624 } 638 625
+6 -4
fs/ceph/debugfs.c
··· 81 81 if (req->r_inode) { 82 82 seq_printf(s, " #%llx", ceph_ino(req->r_inode)); 83 83 } else if (req->r_dentry) { 84 - path = ceph_mdsc_build_path(req->r_dentry, &pathlen, 84 + path = ceph_mdsc_build_path(mdsc, req->r_dentry, &pathlen, 85 85 &pathbase, 0); 86 86 if (IS_ERR(path)) 87 87 path = NULL; ··· 100 100 } 101 101 102 102 if (req->r_old_dentry) { 103 - path = ceph_mdsc_build_path(req->r_old_dentry, &pathlen, 103 + path = ceph_mdsc_build_path(mdsc, req->r_old_dentry, &pathlen, 104 104 &pathbase, 0); 105 105 if (IS_ERR(path)) 106 106 path = NULL; ··· 398 398 399 399 void ceph_fs_debugfs_cleanup(struct ceph_fs_client *fsc) 400 400 { 401 - dout("ceph_fs_debugfs_cleanup\n"); 401 + doutc(fsc->client, "begin\n"); 402 402 debugfs_remove(fsc->debugfs_bdi); 403 403 debugfs_remove(fsc->debugfs_congestion_kb); 404 404 debugfs_remove(fsc->debugfs_mdsmap); ··· 407 407 debugfs_remove(fsc->debugfs_status); 408 408 debugfs_remove(fsc->debugfs_mdsc); 409 409 debugfs_remove_recursive(fsc->debugfs_metrics_dir); 410 + doutc(fsc->client, "done\n"); 410 411 } 411 412 412 413 void ceph_fs_debugfs_init(struct ceph_fs_client *fsc) 413 414 { 414 415 char name[100]; 415 416 416 - dout("ceph_fs_debugfs_init\n"); 417 + doutc(fsc->client, "begin\n"); 417 418 fsc->debugfs_congestion_kb = 418 419 debugfs_create_file("writeback_congestion_kb", 419 420 0600, ··· 470 469 &metrics_size_fops); 471 470 debugfs_create_file("caps", 0400, fsc->debugfs_metrics_dir, fsc, 472 471 &metrics_caps_fops); 472 + doutc(fsc->client, "done\n"); 473 473 } 474 474 475 475
+146 -96
fs/ceph/dir.c
··· 109 109 * regardless of what dir changes take place on the 110 110 * server. 111 111 */ 112 - static int note_last_dentry(struct ceph_dir_file_info *dfi, const char *name, 112 + static int note_last_dentry(struct ceph_fs_client *fsc, 113 + struct ceph_dir_file_info *dfi, 114 + const char *name, 113 115 int len, unsigned next_offset) 114 116 { 115 117 char *buf = kmalloc(len+1, GFP_KERNEL); ··· 122 120 memcpy(dfi->last_name, name, len); 123 121 dfi->last_name[len] = 0; 124 122 dfi->next_offset = next_offset; 125 - dout("note_last_dentry '%s'\n", dfi->last_name); 123 + doutc(fsc->client, "'%s'\n", dfi->last_name); 126 124 return 0; 127 125 } 128 126 ··· 132 130 struct ceph_readdir_cache_control *cache_ctl) 133 131 { 134 132 struct inode *dir = d_inode(parent); 133 + struct ceph_client *cl = ceph_inode_to_client(dir); 135 134 struct dentry *dentry; 136 135 unsigned idx_mask = (PAGE_SIZE / sizeof(struct dentry *)) - 1; 137 136 loff_t ptr_pos = idx * sizeof(struct dentry *); ··· 145 142 ceph_readdir_cache_release(cache_ctl); 146 143 cache_ctl->page = find_lock_page(&dir->i_data, ptr_pgoff); 147 144 if (!cache_ctl->page) { 148 - dout(" page %lu not found\n", ptr_pgoff); 145 + doutc(cl, " page %lu not found\n", ptr_pgoff); 149 146 return ERR_PTR(-EAGAIN); 150 147 } 151 148 /* reading/filling the cache are serialized by ··· 188 185 struct ceph_dir_file_info *dfi = file->private_data; 189 186 struct dentry *parent = file->f_path.dentry; 190 187 struct inode *dir = d_inode(parent); 188 + struct ceph_fs_client *fsc = ceph_inode_to_fs_client(dir); 189 + struct ceph_client *cl = ceph_inode_to_client(dir); 191 190 struct dentry *dentry, *last = NULL; 192 191 struct ceph_dentry_info *di; 193 192 struct ceph_readdir_cache_control cache_ctl = {}; 194 193 u64 idx = 0; 195 194 int err = 0; 196 195 197 - dout("__dcache_readdir %p v%u at %llx\n", dir, (unsigned)shared_gen, ctx->pos); 196 + doutc(cl, "%p %llx.%llx v%u at %llx\n", dir, ceph_vinop(dir), 197 + (unsigned)shared_gen, ctx->pos); 198 198 199 199 /* search start position */ 200 200 if (ctx->pos > 2) { ··· 227 221 dput(dentry); 228 222 } 229 223 230 - dout("__dcache_readdir %p cache idx %llu\n", dir, idx); 224 + doutc(cl, "%p %llx.%llx cache idx %llu\n", dir, 225 + ceph_vinop(dir), idx); 231 226 } 232 227 233 228 ··· 264 257 spin_unlock(&dentry->d_lock); 265 258 266 259 if (emit_dentry) { 267 - dout(" %llx dentry %p %pd %p\n", di->offset, 268 - dentry, dentry, d_inode(dentry)); 260 + doutc(cl, " %llx dentry %p %pd %p\n", di->offset, 261 + dentry, dentry, d_inode(dentry)); 269 262 ctx->pos = di->offset; 270 263 if (!dir_emit(ctx, dentry->d_name.name, 271 264 dentry->d_name.len, ceph_present_inode(d_inode(dentry)), ··· 288 281 if (last) { 289 282 int ret; 290 283 di = ceph_dentry(last); 291 - ret = note_last_dentry(dfi, last->d_name.name, last->d_name.len, 284 + ret = note_last_dentry(fsc, dfi, last->d_name.name, 285 + last->d_name.len, 292 286 fpos_off(di->offset) + 1); 293 287 if (ret < 0) 294 288 err = ret; ··· 318 310 struct ceph_dir_file_info *dfi = file->private_data; 319 311 struct inode *inode = file_inode(file); 320 312 struct ceph_inode_info *ci = ceph_inode(inode); 321 - struct ceph_fs_client *fsc = ceph_inode_to_client(inode); 313 + struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode); 322 314 struct ceph_mds_client *mdsc = fsc->mdsc; 315 + struct ceph_client *cl = fsc->client; 323 316 int i; 324 317 int err; 325 318 unsigned frag = -1; 326 319 struct ceph_mds_reply_info_parsed *rinfo; 327 320 328 - dout("readdir %p file %p pos %llx\n", inode, file, ctx->pos); 321 + doutc(cl, "%p %llx.%llx file %p pos %llx\n", inode, 322 + ceph_vinop(inode), file, ctx->pos); 329 323 if (dfi->file_info.flags & CEPH_F_ATEND) 330 324 return 0; 331 325 332 326 /* always start with . and .. */ 333 327 if (ctx->pos == 0) { 334 - dout("readdir off 0 -> '.'\n"); 328 + doutc(cl, "%p %llx.%llx off 0 -> '.'\n", inode, 329 + ceph_vinop(inode)); 335 330 if (!dir_emit(ctx, ".", 1, ceph_present_inode(inode), 336 331 inode->i_mode >> 12)) 337 332 return 0; ··· 348 337 ino = ceph_present_inode(dentry->d_parent->d_inode); 349 338 spin_unlock(&dentry->d_lock); 350 339 351 - dout("readdir off 1 -> '..'\n"); 340 + doutc(cl, "%p %llx.%llx off 1 -> '..'\n", inode, 341 + ceph_vinop(inode)); 352 342 if (!dir_emit(ctx, "..", 2, ino, inode->i_mode >> 12)) 353 343 return 0; 354 344 ctx->pos = 2; ··· 403 391 frag = fpos_frag(ctx->pos); 404 392 } 405 393 406 - dout("readdir fetching %llx.%llx frag %x offset '%s'\n", 407 - ceph_vinop(inode), frag, dfi->last_name); 394 + doutc(cl, "fetching %p %llx.%llx frag %x offset '%s'\n", 395 + inode, ceph_vinop(inode), frag, dfi->last_name); 408 396 req = ceph_mdsc_create_request(mdsc, op, USE_AUTH_MDS); 409 397 if (IS_ERR(req)) 410 398 return PTR_ERR(req); ··· 458 446 ceph_mdsc_put_request(req); 459 447 return err; 460 448 } 461 - dout("readdir got and parsed readdir result=%d on " 462 - "frag %x, end=%d, complete=%d, hash_order=%d\n", 463 - err, frag, 464 - (int)req->r_reply_info.dir_end, 465 - (int)req->r_reply_info.dir_complete, 466 - (int)req->r_reply_info.hash_order); 449 + doutc(cl, "%p %llx.%llx got and parsed readdir result=%d" 450 + "on frag %x, end=%d, complete=%d, hash_order=%d\n", 451 + inode, ceph_vinop(inode), err, frag, 452 + (int)req->r_reply_info.dir_end, 453 + (int)req->r_reply_info.dir_complete, 454 + (int)req->r_reply_info.hash_order); 467 455 468 456 rinfo = &req->r_reply_info; 469 457 if (le32_to_cpu(rinfo->dir_dir->frag) != frag) { ··· 493 481 dfi->dir_ordered_count = req->r_dir_ordered_cnt; 494 482 } 495 483 } else { 496 - dout("readdir !did_prepopulate\n"); 484 + doutc(cl, "%p %llx.%llx !did_prepopulate\n", inode, 485 + ceph_vinop(inode)); 497 486 /* disable readdir cache */ 498 487 dfi->readdir_cache_idx = -1; 499 488 /* preclude from marking dir complete */ ··· 507 494 rinfo->dir_entries + (rinfo->dir_nr-1); 508 495 unsigned next_offset = req->r_reply_info.dir_end ? 509 496 2 : (fpos_off(rde->offset) + 1); 510 - err = note_last_dentry(dfi, rde->name, rde->name_len, 511 - next_offset); 497 + err = note_last_dentry(fsc, dfi, rde->name, 498 + rde->name_len, next_offset); 512 499 if (err) { 513 500 ceph_mdsc_put_request(dfi->last_readdir); 514 501 dfi->last_readdir = NULL; ··· 521 508 } 522 509 523 510 rinfo = &dfi->last_readdir->r_reply_info; 524 - dout("readdir frag %x num %d pos %llx chunk first %llx\n", 525 - dfi->frag, rinfo->dir_nr, ctx->pos, 526 - rinfo->dir_nr ? rinfo->dir_entries[0].offset : 0LL); 511 + doutc(cl, "%p %llx.%llx frag %x num %d pos %llx chunk first %llx\n", 512 + inode, ceph_vinop(inode), dfi->frag, rinfo->dir_nr, ctx->pos, 513 + rinfo->dir_nr ? rinfo->dir_entries[0].offset : 0LL); 527 514 528 515 i = 0; 529 516 /* search start position */ ··· 543 530 struct ceph_mds_reply_dir_entry *rde = rinfo->dir_entries + i; 544 531 545 532 if (rde->offset < ctx->pos) { 546 - pr_warn("%s: rde->offset 0x%llx ctx->pos 0x%llx\n", 547 - __func__, rde->offset, ctx->pos); 533 + pr_warn_client(cl, 534 + "%p %llx.%llx rde->offset 0x%llx ctx->pos 0x%llx\n", 535 + inode, ceph_vinop(inode), rde->offset, ctx->pos); 548 536 return -EIO; 549 537 } 550 538 ··· 553 539 return -EIO; 554 540 555 541 ctx->pos = rde->offset; 556 - dout("readdir (%d/%d) -> %llx '%.*s' %p\n", 557 - i, rinfo->dir_nr, ctx->pos, 558 - rde->name_len, rde->name, &rde->inode.in); 542 + doutc(cl, "%p %llx.%llx (%d/%d) -> %llx '%.*s' %p\n", inode, 543 + ceph_vinop(inode), i, rinfo->dir_nr, ctx->pos, 544 + rde->name_len, rde->name, &rde->inode.in); 559 545 560 546 if (!dir_emit(ctx, rde->name, rde->name_len, 561 547 ceph_present_ino(inode->i_sb, le64_to_cpu(rde->inode.in->ino)), ··· 566 552 * doesn't have enough memory, etc. So for next readdir 567 553 * it will continue. 568 554 */ 569 - dout("filldir stopping us...\n"); 555 + doutc(cl, "filldir stopping us...\n"); 570 556 return 0; 571 557 } 572 558 ··· 597 583 kfree(dfi->last_name); 598 584 dfi->last_name = NULL; 599 585 } 600 - dout("readdir next frag is %x\n", frag); 586 + doutc(cl, "%p %llx.%llx next frag is %x\n", inode, 587 + ceph_vinop(inode), frag); 601 588 goto more; 602 589 } 603 590 dfi->file_info.flags |= CEPH_F_ATEND; ··· 613 598 spin_lock(&ci->i_ceph_lock); 614 599 if (dfi->dir_ordered_count == 615 600 atomic64_read(&ci->i_ordered_count)) { 616 - dout(" marking %p complete and ordered\n", inode); 601 + doutc(cl, " marking %p %llx.%llx complete and ordered\n", 602 + inode, ceph_vinop(inode)); 617 603 /* use i_size to track number of entries in 618 604 * readdir cache */ 619 605 BUG_ON(dfi->readdir_cache_idx < 0); 620 606 i_size_write(inode, dfi->readdir_cache_idx * 621 607 sizeof(struct dentry*)); 622 608 } else { 623 - dout(" marking %p complete\n", inode); 609 + doutc(cl, " marking %llx.%llx complete\n", 610 + ceph_vinop(inode)); 624 611 } 625 612 __ceph_dir_set_complete(ci, dfi->dir_release_count, 626 613 dfi->dir_ordered_count); 627 614 spin_unlock(&ci->i_ceph_lock); 628 615 } 629 - dout("readdir %p file %p done.\n", inode, file); 616 + doutc(cl, "%p %llx.%llx file %p done.\n", inode, ceph_vinop(inode), 617 + file); 630 618 return 0; 631 619 } 632 620 ··· 675 657 { 676 658 struct ceph_dir_file_info *dfi = file->private_data; 677 659 struct inode *inode = file->f_mapping->host; 660 + struct ceph_client *cl = ceph_inode_to_client(inode); 678 661 loff_t retval; 679 662 680 663 inode_lock(inode); ··· 695 676 696 677 if (offset >= 0) { 697 678 if (need_reset_readdir(dfi, offset)) { 698 - dout("dir_llseek dropping %p content\n", file); 679 + doutc(cl, "%p %llx.%llx dropping %p content\n", 680 + inode, ceph_vinop(inode), file); 699 681 reset_readdir(dfi); 700 682 } else if (is_hash_order(offset) && offset > file->f_pos) { 701 683 /* for hash offset, we don't know if a forward seek ··· 723 703 struct dentry *ceph_handle_snapdir(struct ceph_mds_request *req, 724 704 struct dentry *dentry) 725 705 { 726 - struct ceph_fs_client *fsc = ceph_sb_to_client(dentry->d_sb); 706 + struct ceph_fs_client *fsc = ceph_sb_to_fs_client(dentry->d_sb); 727 707 struct inode *parent = d_inode(dentry->d_parent); /* we hold i_rwsem */ 708 + struct ceph_client *cl = ceph_inode_to_client(parent); 728 709 729 710 /* .snap dir? */ 730 711 if (ceph_snap(parent) == CEPH_NOSNAP && ··· 734 713 struct inode *inode = ceph_get_snapdir(parent); 735 714 736 715 res = d_splice_alias(inode, dentry); 737 - dout("ENOENT on snapdir %p '%pd', linking to snapdir %p. Spliced dentry %p\n", 738 - dentry, dentry, inode, res); 716 + doutc(cl, "ENOENT on snapdir %p '%pd', linking to " 717 + "snapdir %p %llx.%llx. Spliced dentry %p\n", 718 + dentry, dentry, inode, ceph_vinop(inode), res); 739 719 if (res) 740 720 dentry = res; 741 721 } ··· 757 735 struct dentry *ceph_finish_lookup(struct ceph_mds_request *req, 758 736 struct dentry *dentry, int err) 759 737 { 738 + struct ceph_client *cl = req->r_mdsc->fsc->client; 739 + 760 740 if (err == -ENOENT) { 761 741 /* no trace? */ 762 742 err = 0; 763 743 if (!req->r_reply_info.head->is_dentry) { 764 - dout("ENOENT and no trace, dentry %p inode %p\n", 765 - dentry, d_inode(dentry)); 744 + doutc(cl, 745 + "ENOENT and no trace, dentry %p inode %llx.%llx\n", 746 + dentry, ceph_vinop(d_inode(dentry))); 766 747 if (d_really_is_positive(dentry)) { 767 748 d_drop(dentry); 768 749 err = -ENOENT; ··· 796 771 static struct dentry *ceph_lookup(struct inode *dir, struct dentry *dentry, 797 772 unsigned int flags) 798 773 { 799 - struct ceph_fs_client *fsc = ceph_sb_to_client(dir->i_sb); 774 + struct ceph_fs_client *fsc = ceph_sb_to_fs_client(dir->i_sb); 800 775 struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(dir->i_sb); 776 + struct ceph_client *cl = fsc->client; 801 777 struct ceph_mds_request *req; 802 778 int op; 803 779 int mask; 804 780 int err; 805 781 806 - dout("lookup %p dentry %p '%pd'\n", 807 - dir, dentry, dentry); 782 + doutc(cl, "%p %llx.%llx/'%pd' dentry %p\n", dir, ceph_vinop(dir), 783 + dentry, dentry); 808 784 809 785 if (dentry->d_name.len > NAME_MAX) 810 786 return ERR_PTR(-ENAMETOOLONG); ··· 828 802 struct ceph_dentry_info *di = ceph_dentry(dentry); 829 803 830 804 spin_lock(&ci->i_ceph_lock); 831 - dout(" dir %p flags are 0x%lx\n", dir, ci->i_ceph_flags); 805 + doutc(cl, " dir %llx.%llx flags are 0x%lx\n", 806 + ceph_vinop(dir), ci->i_ceph_flags); 832 807 if (strncmp(dentry->d_name.name, 833 808 fsc->mount_options->snapdir_name, 834 809 dentry->d_name.len) && ··· 839 812 __ceph_caps_issued_mask_metric(ci, CEPH_CAP_FILE_SHARED, 1)) { 840 813 __ceph_touch_fmode(ci, mdsc, CEPH_FILE_MODE_RD); 841 814 spin_unlock(&ci->i_ceph_lock); 842 - dout(" dir %p complete, -ENOENT\n", dir); 815 + doutc(cl, " dir %llx.%llx complete, -ENOENT\n", 816 + ceph_vinop(dir)); 843 817 d_add(dentry, NULL); 844 818 di->lease_shared_gen = atomic_read(&ci->i_shared_gen); 845 819 return NULL; ··· 878 850 } 879 851 dentry = ceph_finish_lookup(req, dentry, err); 880 852 ceph_mdsc_put_request(req); /* will dput(dentry) */ 881 - dout("lookup result=%p\n", dentry); 853 + doutc(cl, "result=%p\n", dentry); 882 854 return dentry; 883 855 } 884 856 ··· 913 885 struct dentry *dentry, umode_t mode, dev_t rdev) 914 886 { 915 887 struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(dir->i_sb); 888 + struct ceph_client *cl = mdsc->fsc->client; 916 889 struct ceph_mds_request *req; 917 890 struct ceph_acl_sec_ctx as_ctx = {}; 918 891 int err; ··· 930 901 goto out; 931 902 } 932 903 933 - dout("mknod in dir %p dentry %p mode 0%ho rdev %d\n", 934 - dir, dentry, mode, rdev); 904 + doutc(cl, "%p %llx.%llx/'%pd' dentry %p mode 0%ho rdev %d\n", 905 + dir, ceph_vinop(dir), dentry, dentry, mode, rdev); 935 906 req = ceph_mdsc_create_request(mdsc, CEPH_MDS_OP_MKNOD, USE_AUTH_MDS); 936 907 if (IS_ERR(req)) { 937 908 err = PTR_ERR(req); ··· 953 924 req->r_parent = dir; 954 925 ihold(dir); 955 926 set_bit(CEPH_MDS_R_PARENT_LOCKED, &req->r_req_flags); 927 + req->r_mnt_idmap = mnt_idmap_get(idmap); 956 928 req->r_args.mknod.mode = cpu_to_le32(mode); 957 929 req->r_args.mknod.rdev = cpu_to_le32(rdev); 958 930 req->r_dentry_drop = CEPH_CAP_FILE_SHARED | CEPH_CAP_AUTH_EXCL | ··· 1023 993 struct dentry *dentry, const char *dest) 1024 994 { 1025 995 struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(dir->i_sb); 996 + struct ceph_client *cl = mdsc->fsc->client; 1026 997 struct ceph_mds_request *req; 1027 998 struct ceph_acl_sec_ctx as_ctx = {}; 1028 999 umode_t mode = S_IFLNK | 0777; ··· 1041 1010 goto out; 1042 1011 } 1043 1012 1044 - dout("symlink in dir %p dentry %p to '%s'\n", dir, dentry, dest); 1013 + doutc(cl, "%p %llx.%llx/'%pd' to '%s'\n", dir, ceph_vinop(dir), dentry, 1014 + dest); 1045 1015 req = ceph_mdsc_create_request(mdsc, CEPH_MDS_OP_SYMLINK, USE_AUTH_MDS); 1046 1016 if (IS_ERR(req)) { 1047 1017 err = PTR_ERR(req); ··· 1072 1040 } 1073 1041 1074 1042 set_bit(CEPH_MDS_R_PARENT_LOCKED, &req->r_req_flags); 1043 + req->r_mnt_idmap = mnt_idmap_get(idmap); 1075 1044 req->r_dentry = dget(dentry); 1076 1045 req->r_num_caps = 2; 1077 1046 req->r_dentry_drop = CEPH_CAP_FILE_SHARED | CEPH_CAP_AUTH_EXCL | ··· 1097 1064 struct dentry *dentry, umode_t mode) 1098 1065 { 1099 1066 struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(dir->i_sb); 1067 + struct ceph_client *cl = mdsc->fsc->client; 1100 1068 struct ceph_mds_request *req; 1101 1069 struct ceph_acl_sec_ctx as_ctx = {}; 1102 1070 int err; ··· 1110 1076 if (ceph_snap(dir) == CEPH_SNAPDIR) { 1111 1077 /* mkdir .snap/foo is a MKSNAP */ 1112 1078 op = CEPH_MDS_OP_MKSNAP; 1113 - dout("mksnap dir %p snap '%pd' dn %p\n", dir, 1114 - dentry, dentry); 1079 + doutc(cl, "mksnap %llx.%llx/'%pd' dentry %p\n", 1080 + ceph_vinop(dir), dentry, dentry); 1115 1081 } else if (ceph_snap(dir) == CEPH_NOSNAP) { 1116 - dout("mkdir dir %p dn %p mode 0%ho\n", dir, dentry, mode); 1082 + doutc(cl, "mkdir %llx.%llx/'%pd' dentry %p mode 0%ho\n", 1083 + ceph_vinop(dir), dentry, dentry, mode); 1117 1084 op = CEPH_MDS_OP_MKDIR; 1118 1085 } else { 1119 1086 err = -EROFS; ··· 1152 1117 req->r_parent = dir; 1153 1118 ihold(dir); 1154 1119 set_bit(CEPH_MDS_R_PARENT_LOCKED, &req->r_req_flags); 1120 + if (op == CEPH_MDS_OP_MKDIR) 1121 + req->r_mnt_idmap = mnt_idmap_get(idmap); 1155 1122 req->r_args.mkdir.mode = cpu_to_le32(mode); 1156 1123 req->r_dentry_drop = CEPH_CAP_FILE_SHARED | CEPH_CAP_AUTH_EXCL | 1157 1124 CEPH_CAP_XATTR_EXCL; ··· 1181 1144 struct dentry *dentry) 1182 1145 { 1183 1146 struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(dir->i_sb); 1147 + struct ceph_client *cl = mdsc->fsc->client; 1184 1148 struct ceph_mds_request *req; 1185 1149 int err; 1186 1150 ··· 1199 1161 if (err) 1200 1162 return err; 1201 1163 1202 - dout("link in dir %p %llx.%llx old_dentry %p:'%pd' dentry %p:'%pd'\n", 1203 - dir, ceph_vinop(dir), old_dentry, old_dentry, dentry, dentry); 1164 + doutc(cl, "%p %llx.%llx/'%pd' to '%pd'\n", dir, ceph_vinop(dir), 1165 + old_dentry, dentry); 1204 1166 req = ceph_mdsc_create_request(mdsc, CEPH_MDS_OP_LINK, USE_AUTH_MDS); 1205 1167 if (IS_ERR(req)) { 1206 1168 d_drop(dentry); ··· 1237 1199 struct ceph_mds_request *req) 1238 1200 { 1239 1201 struct dentry *dentry = req->r_dentry; 1240 - struct ceph_fs_client *fsc = ceph_sb_to_client(dentry->d_sb); 1202 + struct ceph_fs_client *fsc = ceph_sb_to_fs_client(dentry->d_sb); 1203 + struct ceph_client *cl = fsc->client; 1241 1204 struct ceph_dentry_info *di = ceph_dentry(dentry); 1242 1205 int result = req->r_err ? req->r_err : 1243 1206 le32_to_cpu(req->r_reply_info.head->result); 1244 1207 1245 1208 if (!test_bit(CEPH_DENTRY_ASYNC_UNLINK_BIT, &di->flags)) 1246 - pr_warn("%s dentry %p:%pd async unlink bit is not set\n", 1247 - __func__, dentry, dentry); 1209 + pr_warn_client(cl, 1210 + "dentry %p:%pd async unlink bit is not set\n", 1211 + dentry, dentry); 1248 1212 1249 1213 spin_lock(&fsc->async_unlink_conflict_lock); 1250 1214 hash_del_rcu(&di->hnode); ··· 1266 1226 if (result) { 1267 1227 int pathlen = 0; 1268 1228 u64 base = 0; 1269 - char *path = ceph_mdsc_build_path(dentry, &pathlen, 1229 + char *path = ceph_mdsc_build_path(mdsc, dentry, &pathlen, 1270 1230 &base, 0); 1271 1231 1272 1232 /* mark error on parent + clear complete */ ··· 1280 1240 /* mark inode itself for an error (since metadata is bogus) */ 1281 1241 mapping_set_error(req->r_old_inode->i_mapping, result); 1282 1242 1283 - pr_warn("async unlink failure path=(%llx)%s result=%d!\n", 1284 - base, IS_ERR(path) ? "<<bad>>" : path, result); 1243 + pr_warn_client(cl, "failure path=(%llx)%s result=%d!\n", 1244 + base, IS_ERR(path) ? "<<bad>>" : path, result); 1285 1245 ceph_mdsc_free_path(path, pathlen); 1286 1246 } 1287 1247 out: ··· 1330 1290 */ 1331 1291 static int ceph_unlink(struct inode *dir, struct dentry *dentry) 1332 1292 { 1333 - struct ceph_fs_client *fsc = ceph_sb_to_client(dir->i_sb); 1293 + struct ceph_fs_client *fsc = ceph_sb_to_fs_client(dir->i_sb); 1294 + struct ceph_client *cl = fsc->client; 1334 1295 struct ceph_mds_client *mdsc = fsc->mdsc; 1335 1296 struct inode *inode = d_inode(dentry); 1336 1297 struct ceph_mds_request *req; ··· 1341 1300 1342 1301 if (ceph_snap(dir) == CEPH_SNAPDIR) { 1343 1302 /* rmdir .snap/foo is RMSNAP */ 1344 - dout("rmsnap dir %p '%pd' dn %p\n", dir, dentry, dentry); 1303 + doutc(cl, "rmsnap %llx.%llx/'%pd' dn\n", ceph_vinop(dir), 1304 + dentry); 1345 1305 op = CEPH_MDS_OP_RMSNAP; 1346 1306 } else if (ceph_snap(dir) == CEPH_NOSNAP) { 1347 - dout("unlink/rmdir dir %p dn %p inode %p\n", 1348 - dir, dentry, inode); 1307 + doutc(cl, "unlink/rmdir %llx.%llx/'%pd' inode %llx.%llx\n", 1308 + ceph_vinop(dir), dentry, ceph_vinop(inode)); 1349 1309 op = d_is_dir(dentry) ? 1350 1310 CEPH_MDS_OP_RMDIR : CEPH_MDS_OP_UNLINK; 1351 1311 } else ··· 1369 1327 (req->r_dir_caps = get_caps_for_async_unlink(dir, dentry))) { 1370 1328 struct ceph_dentry_info *di = ceph_dentry(dentry); 1371 1329 1372 - dout("async unlink on %llu/%.*s caps=%s", ceph_ino(dir), 1373 - dentry->d_name.len, dentry->d_name.name, 1374 - ceph_cap_string(req->r_dir_caps)); 1330 + doutc(cl, "async unlink on %llx.%llx/'%pd' caps=%s", 1331 + ceph_vinop(dir), dentry, 1332 + ceph_cap_string(req->r_dir_caps)); 1375 1333 set_bit(CEPH_MDS_R_ASYNC, &req->r_req_flags); 1376 1334 req->r_callback = ceph_async_unlink_cb; 1377 1335 req->r_old_inode = d_inode(dentry); ··· 1426 1384 struct dentry *new_dentry, unsigned int flags) 1427 1385 { 1428 1386 struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(old_dir->i_sb); 1387 + struct ceph_client *cl = mdsc->fsc->client; 1429 1388 struct ceph_mds_request *req; 1430 1389 int op = CEPH_MDS_OP_RENAME; 1431 1390 int err; ··· 1456 1413 if (err) 1457 1414 return err; 1458 1415 1459 - dout("rename dir %p dentry %p to dir %p dentry %p\n", 1460 - old_dir, old_dentry, new_dir, new_dentry); 1416 + doutc(cl, "%llx.%llx/'%pd' to %llx.%llx/'%pd'\n", 1417 + ceph_vinop(old_dir), old_dentry, ceph_vinop(new_dir), 1418 + new_dentry); 1461 1419 req = ceph_mdsc_create_request(mdsc, op, USE_AUTH_MDS); 1462 1420 if (IS_ERR(req)) 1463 1421 return PTR_ERR(req); ··· 1503 1459 void __ceph_dentry_lease_touch(struct ceph_dentry_info *di) 1504 1460 { 1505 1461 struct dentry *dn = di->dentry; 1506 - struct ceph_mds_client *mdsc; 1462 + struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(dn->d_sb)->mdsc; 1463 + struct ceph_client *cl = mdsc->fsc->client; 1507 1464 1508 - dout("dentry_lease_touch %p %p '%pd'\n", di, dn, dn); 1465 + doutc(cl, "%p %p '%pd'\n", di, dn, dn); 1509 1466 1510 1467 di->flags |= CEPH_DENTRY_LEASE_LIST; 1511 1468 if (di->flags & CEPH_DENTRY_SHRINK_LIST) { ··· 1514 1469 return; 1515 1470 } 1516 1471 1517 - mdsc = ceph_sb_to_client(dn->d_sb)->mdsc; 1518 1472 spin_lock(&mdsc->dentry_list_lock); 1519 1473 list_move_tail(&di->lease_list, &mdsc->dentry_leases); 1520 1474 spin_unlock(&mdsc->dentry_list_lock); ··· 1537 1493 void __ceph_dentry_dir_lease_touch(struct ceph_dentry_info *di) 1538 1494 { 1539 1495 struct dentry *dn = di->dentry; 1540 - struct ceph_mds_client *mdsc; 1496 + struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(dn->d_sb)->mdsc; 1497 + struct ceph_client *cl = mdsc->fsc->client; 1541 1498 1542 - dout("dentry_dir_lease_touch %p %p '%pd' (offset 0x%llx)\n", 1543 - di, dn, dn, di->offset); 1499 + doutc(cl, "%p %p '%pd' (offset 0x%llx)\n", di, dn, dn, di->offset); 1544 1500 1545 1501 if (!list_empty(&di->lease_list)) { 1546 1502 if (di->flags & CEPH_DENTRY_LEASE_LIST) { ··· 1560 1516 return; 1561 1517 } 1562 1518 1563 - mdsc = ceph_sb_to_client(dn->d_sb)->mdsc; 1564 1519 spin_lock(&mdsc->dentry_list_lock); 1565 1520 __dentry_dir_lease_touch(mdsc, di), 1566 1521 spin_unlock(&mdsc->dentry_list_lock); ··· 1573 1530 if (list_empty(&di->lease_list)) 1574 1531 return; 1575 1532 1576 - mdsc = ceph_sb_to_client(di->dentry->d_sb)->mdsc; 1533 + mdsc = ceph_sb_to_fs_client(di->dentry->d_sb)->mdsc; 1577 1534 spin_lock(&mdsc->dentry_list_lock); 1578 1535 list_del_init(&di->lease_list); 1579 1536 spin_unlock(&mdsc->dentry_list_lock); ··· 1800 1757 { 1801 1758 struct ceph_dentry_info *di; 1802 1759 struct ceph_mds_session *session = NULL; 1760 + struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(dentry->d_sb)->mdsc; 1761 + struct ceph_client *cl = mdsc->fsc->client; 1803 1762 u32 seq = 0; 1804 1763 int valid = 0; 1805 1764 ··· 1834 1789 CEPH_MDS_LEASE_RENEW, seq); 1835 1790 ceph_put_mds_session(session); 1836 1791 } 1837 - dout("dentry_lease_is_valid - dentry %p = %d\n", dentry, valid); 1792 + doutc(cl, "dentry %p = %d\n", dentry, valid); 1838 1793 return valid; 1839 1794 } 1840 1795 ··· 1877 1832 struct ceph_mds_client *mdsc) 1878 1833 { 1879 1834 struct ceph_inode_info *ci = ceph_inode(dir); 1835 + struct ceph_client *cl = mdsc->fsc->client; 1880 1836 int valid; 1881 1837 int shared_gen; 1882 1838 ··· 1899 1853 valid = 0; 1900 1854 spin_unlock(&dentry->d_lock); 1901 1855 } 1902 - dout("dir_lease_is_valid dir %p v%u dentry %p = %d\n", 1903 - dir, (unsigned)atomic_read(&ci->i_shared_gen), dentry, valid); 1856 + doutc(cl, "dir %p %llx.%llx v%u dentry %p '%pd' = %d\n", dir, 1857 + ceph_vinop(dir), (unsigned)atomic_read(&ci->i_shared_gen), 1858 + dentry, dentry, valid); 1904 1859 return valid; 1905 1860 } 1906 1861 ··· 1910 1863 */ 1911 1864 static int ceph_d_revalidate(struct dentry *dentry, unsigned int flags) 1912 1865 { 1866 + struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(dentry->d_sb)->mdsc; 1867 + struct ceph_client *cl = mdsc->fsc->client; 1913 1868 int valid = 0; 1914 1869 struct dentry *parent; 1915 1870 struct inode *dir, *inode; 1916 - struct ceph_mds_client *mdsc; 1917 1871 1918 1872 valid = fscrypt_d_revalidate(dentry, flags); 1919 1873 if (valid <= 0) ··· 1932 1884 inode = d_inode(dentry); 1933 1885 } 1934 1886 1935 - dout("d_revalidate %p '%pd' inode %p offset 0x%llx nokey %d\n", dentry, 1936 - dentry, inode, ceph_dentry(dentry)->offset, 1937 - !!(dentry->d_flags & DCACHE_NOKEY_NAME)); 1887 + doutc(cl, "%p '%pd' inode %p offset 0x%llx nokey %d\n", 1888 + dentry, dentry, inode, ceph_dentry(dentry)->offset, 1889 + !!(dentry->d_flags & DCACHE_NOKEY_NAME)); 1938 1890 1939 - mdsc = ceph_sb_to_client(dir->i_sb)->mdsc; 1891 + mdsc = ceph_sb_to_fs_client(dir->i_sb)->mdsc; 1940 1892 1941 1893 /* always trust cached snapped dentries, snapdir dentry */ 1942 1894 if (ceph_snap(dir) != CEPH_NOSNAP) { 1943 - dout("d_revalidate %p '%pd' inode %p is SNAPPED\n", dentry, 1944 - dentry, inode); 1895 + doutc(cl, "%p '%pd' inode %p is SNAPPED\n", dentry, 1896 + dentry, inode); 1945 1897 valid = 1; 1946 1898 } else if (inode && ceph_snap(inode) == CEPH_SNAPDIR) { 1947 1899 valid = 1; ··· 1996 1948 break; 1997 1949 } 1998 1950 ceph_mdsc_put_request(req); 1999 - dout("d_revalidate %p lookup result=%d\n", 2000 - dentry, err); 1951 + doutc(cl, "%p '%pd', lookup result=%d\n", dentry, 1952 + dentry, err); 2001 1953 } 2002 1954 } else { 2003 1955 percpu_counter_inc(&mdsc->metric.d_lease_hit); 2004 1956 } 2005 1957 2006 - dout("d_revalidate %p %s\n", dentry, valid ? "valid" : "invalid"); 1958 + doutc(cl, "%p '%pd' %s\n", dentry, dentry, valid ? "valid" : "invalid"); 2007 1959 if (!valid) 2008 1960 ceph_dir_clear_complete(dir); 2009 1961 ··· 2043 1995 static void ceph_d_release(struct dentry *dentry) 2044 1996 { 2045 1997 struct ceph_dentry_info *di = ceph_dentry(dentry); 2046 - struct ceph_fs_client *fsc = ceph_sb_to_client(dentry->d_sb); 1998 + struct ceph_fs_client *fsc = ceph_sb_to_fs_client(dentry->d_sb); 2047 1999 2048 - dout("d_release %p\n", dentry); 2000 + doutc(fsc->client, "dentry %p '%pd'\n", dentry, dentry); 2049 2001 2050 2002 atomic64_dec(&fsc->mdsc->metric.total_dentries); 2051 2003 ··· 2066 2018 */ 2067 2019 static void ceph_d_prune(struct dentry *dentry) 2068 2020 { 2021 + struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(dentry->d_sb); 2022 + struct ceph_client *cl = mdsc->fsc->client; 2069 2023 struct ceph_inode_info *dir_ci; 2070 2024 struct ceph_dentry_info *di; 2071 2025 2072 - dout("ceph_d_prune %pd %p\n", dentry, dentry); 2026 + doutc(cl, "dentry %p '%pd'\n", dentry, dentry); 2073 2027 2074 2028 /* do we have a valid parent? */ 2075 2029 if (IS_ROOT(dentry)) ··· 2114 2064 int left; 2115 2065 const int bufsize = 1024; 2116 2066 2117 - if (!ceph_test_mount_opt(ceph_sb_to_client(inode->i_sb), DIRSTAT)) 2067 + if (!ceph_test_mount_opt(ceph_sb_to_fs_client(inode->i_sb), DIRSTAT)) 2118 2068 return -EISDIR; 2119 2069 2120 2070 if (!dfi->dir_info) {
+27 -22
fs/ceph/export.c
··· 36 36 static int ceph_encode_snapfh(struct inode *inode, u32 *rawfh, int *max_len, 37 37 struct inode *parent_inode) 38 38 { 39 + struct ceph_client *cl = ceph_inode_to_client(inode); 39 40 static const int snap_handle_length = 40 41 sizeof(struct ceph_nfs_snapfh) >> 2; 41 42 struct ceph_nfs_snapfh *sfh = (void *)rawfh; ··· 80 79 *max_len = snap_handle_length; 81 80 ret = FILEID_BTRFS_WITH_PARENT; 82 81 out: 83 - dout("encode_snapfh %llx.%llx ret=%d\n", ceph_vinop(inode), ret); 82 + doutc(cl, "%p %llx.%llx ret=%d\n", inode, ceph_vinop(inode), ret); 84 83 return ret; 85 84 } 86 85 87 86 static int ceph_encode_fh(struct inode *inode, u32 *rawfh, int *max_len, 88 87 struct inode *parent_inode) 89 88 { 89 + struct ceph_client *cl = ceph_inode_to_client(inode); 90 90 static const int handle_length = 91 91 sizeof(struct ceph_nfs_fh) >> 2; 92 92 static const int connected_handle_length = ··· 107 105 108 106 if (parent_inode) { 109 107 struct ceph_nfs_confh *cfh = (void *)rawfh; 110 - dout("encode_fh %llx with parent %llx\n", 111 - ceph_ino(inode), ceph_ino(parent_inode)); 108 + doutc(cl, "%p %llx.%llx with parent %p %llx.%llx\n", inode, 109 + ceph_vinop(inode), parent_inode, ceph_vinop(parent_inode)); 112 110 cfh->ino = ceph_ino(inode); 113 111 cfh->parent_ino = ceph_ino(parent_inode); 114 112 *max_len = connected_handle_length; 115 113 type = FILEID_INO32_GEN_PARENT; 116 114 } else { 117 115 struct ceph_nfs_fh *fh = (void *)rawfh; 118 - dout("encode_fh %llx\n", ceph_ino(inode)); 116 + doutc(cl, "%p %llx.%llx\n", inode, ceph_vinop(inode)); 119 117 fh->ino = ceph_ino(inode); 120 118 *max_len = handle_length; 121 119 type = FILEID_INO32_GEN; ··· 125 123 126 124 static struct inode *__lookup_inode(struct super_block *sb, u64 ino) 127 125 { 128 - struct ceph_mds_client *mdsc = ceph_sb_to_client(sb)->mdsc; 126 + struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(sb)->mdsc; 129 127 struct inode *inode; 130 128 struct ceph_vino vino; 131 129 int err; ··· 207 205 struct ceph_nfs_snapfh *sfh, 208 206 bool want_parent) 209 207 { 210 - struct ceph_mds_client *mdsc = ceph_sb_to_client(sb)->mdsc; 208 + struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(sb)->mdsc; 209 + struct ceph_client *cl = mdsc->fsc->client; 211 210 struct ceph_mds_request *req; 212 211 struct inode *inode; 213 212 struct ceph_vino vino; ··· 281 278 ceph_mdsc_put_request(req); 282 279 283 280 if (want_parent) { 284 - dout("snapfh_to_parent %llx.%llx\n err=%d\n", 285 - vino.ino, vino.snap, err); 281 + doutc(cl, "%llx.%llx\n err=%d\n", vino.ino, vino.snap, err); 286 282 } else { 287 - dout("snapfh_to_dentry %llx.%llx parent %llx hash %x err=%d", 288 - vino.ino, vino.snap, sfh->parent_ino, sfh->hash, err); 283 + doutc(cl, "%llx.%llx parent %llx hash %x err=%d", vino.ino, 284 + vino.snap, sfh->parent_ino, sfh->hash, err); 289 285 } 290 286 if (IS_ERR(inode)) 291 287 return ERR_CAST(inode); ··· 299 297 struct fid *fid, 300 298 int fh_len, int fh_type) 301 299 { 300 + struct ceph_fs_client *fsc = ceph_sb_to_fs_client(sb); 302 301 struct ceph_nfs_fh *fh = (void *)fid->raw; 303 302 304 303 if (fh_type == FILEID_BTRFS_WITH_PARENT) { ··· 313 310 if (fh_len < sizeof(*fh) / 4) 314 311 return NULL; 315 312 316 - dout("fh_to_dentry %llx\n", fh->ino); 313 + doutc(fsc->client, "%llx\n", fh->ino); 317 314 return __fh_to_dentry(sb, fh->ino); 318 315 } 319 316 320 317 static struct dentry *__get_parent(struct super_block *sb, 321 318 struct dentry *child, u64 ino) 322 319 { 323 - struct ceph_mds_client *mdsc = ceph_sb_to_client(sb)->mdsc; 320 + struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(sb)->mdsc; 324 321 struct ceph_mds_request *req; 325 322 struct inode *inode; 326 323 int mask; ··· 366 363 static struct dentry *ceph_get_parent(struct dentry *child) 367 364 { 368 365 struct inode *inode = d_inode(child); 366 + struct ceph_client *cl = ceph_inode_to_client(inode); 369 367 struct dentry *dn; 370 368 371 369 if (ceph_snap(inode) != CEPH_NOSNAP) { ··· 406 402 dn = __get_parent(child->d_sb, child, 0); 407 403 } 408 404 out: 409 - dout("get_parent %p ino %llx.%llx err=%ld\n", 410 - child, ceph_vinop(inode), (long)PTR_ERR_OR_ZERO(dn)); 405 + doutc(cl, "child %p %p %llx.%llx err=%ld\n", child, inode, 406 + ceph_vinop(inode), (long)PTR_ERR_OR_ZERO(dn)); 411 407 return dn; 412 408 } 413 409 ··· 418 414 struct fid *fid, 419 415 int fh_len, int fh_type) 420 416 { 417 + struct ceph_fs_client *fsc = ceph_sb_to_fs_client(sb); 421 418 struct ceph_nfs_confh *cfh = (void *)fid->raw; 422 419 struct dentry *dentry; 423 420 ··· 432 427 if (fh_len < sizeof(*cfh) / 4) 433 428 return NULL; 434 429 435 - dout("fh_to_parent %llx\n", cfh->parent_ino); 430 + doutc(fsc->client, "%llx\n", cfh->parent_ino); 436 431 dentry = __get_parent(sb, NULL, cfh->ino); 437 432 if (unlikely(dentry == ERR_PTR(-ENOENT))) 438 433 dentry = __fh_to_dentry(sb, cfh->parent_ino); ··· 444 439 { 445 440 struct inode *inode = d_inode(child); 446 441 struct inode *dir = d_inode(parent); 447 - struct ceph_fs_client *fsc = ceph_inode_to_client(inode); 442 + struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode); 448 443 struct ceph_mds_request *req = NULL; 449 444 char *last_name = NULL; 450 445 unsigned next_offset = 2; ··· 531 526 if (req) 532 527 ceph_mdsc_put_request(req); 533 528 kfree(last_name); 534 - dout("get_snap_name %p ino %llx.%llx err=%d\n", 535 - child, ceph_vinop(inode), err); 529 + doutc(fsc->client, "child dentry %p %p %llx.%llx err=%d\n", child, 530 + inode, ceph_vinop(inode), err); 536 531 return err; 537 532 } 538 533 ··· 549 544 if (ceph_snap(inode) != CEPH_NOSNAP) 550 545 return __get_snap_name(parent, name, child); 551 546 552 - mdsc = ceph_inode_to_client(inode)->mdsc; 547 + mdsc = ceph_inode_to_fs_client(inode)->mdsc; 553 548 req = ceph_mdsc_create_request(mdsc, CEPH_MDS_OP_LOOKUPNAME, 554 549 USE_ANY_MDS); 555 550 if (IS_ERR(req)) ··· 593 588 ceph_fname_free_buffer(dir, &oname); 594 589 } 595 590 out: 596 - dout("get_name %p ino %llx.%llx err %d %s%s\n", 597 - child, ceph_vinop(inode), err, 598 - err ? "" : "name ", err ? "" : name); 591 + doutc(mdsc->fsc->client, "child dentry %p %p %llx.%llx err %d %s%s\n", 592 + child, inode, ceph_vinop(inode), err, err ? "" : "name ", 593 + err ? "" : name); 599 594 ceph_mdsc_put_request(req); 600 595 return err; 601 596 }
+163 -119
fs/ceph/file.c
··· 19 19 #include "io.h" 20 20 #include "metric.h" 21 21 22 - static __le32 ceph_flags_sys2wire(u32 flags) 22 + static __le32 ceph_flags_sys2wire(struct ceph_mds_client *mdsc, u32 flags) 23 23 { 24 + struct ceph_client *cl = mdsc->fsc->client; 24 25 u32 wire_flags = 0; 25 26 26 27 switch (flags & O_ACCMODE) { ··· 49 48 #undef ceph_sys2wire 50 49 51 50 if (flags) 52 - dout("unused open flags: %x\n", flags); 51 + doutc(cl, "unused open flags: %x\n", flags); 53 52 54 53 return cpu_to_le32(wire_flags); 55 54 } ··· 190 189 if (IS_ERR(req)) 191 190 goto out; 192 191 req->r_fmode = ceph_flags_to_mode(flags); 193 - req->r_args.open.flags = ceph_flags_sys2wire(flags); 192 + req->r_args.open.flags = ceph_flags_sys2wire(mdsc, flags); 194 193 req->r_args.open.mode = cpu_to_le32(create_mode); 195 194 out: 196 195 return req; ··· 201 200 { 202 201 struct ceph_inode_info *ci = ceph_inode(inode); 203 202 struct ceph_mount_options *opt = 204 - ceph_inode_to_client(&ci->netfs.inode)->mount_options; 203 + ceph_inode_to_fs_client(&ci->netfs.inode)->mount_options; 204 + struct ceph_client *cl = ceph_inode_to_client(inode); 205 205 struct ceph_file_info *fi; 206 206 int ret; 207 207 208 - dout("%s %p %p 0%o (%s)\n", __func__, inode, file, 209 - inode->i_mode, isdir ? "dir" : "regular"); 208 + doutc(cl, "%p %llx.%llx %p 0%o (%s)\n", inode, ceph_vinop(inode), 209 + file, inode->i_mode, isdir ? "dir" : "regular"); 210 210 BUG_ON(inode->i_fop->release != ceph_release); 211 211 212 212 if (isdir) { ··· 236 234 237 235 spin_lock_init(&fi->rw_contexts_lock); 238 236 INIT_LIST_HEAD(&fi->rw_contexts); 239 - fi->filp_gen = READ_ONCE(ceph_inode_to_client(inode)->filp_gen); 237 + fi->filp_gen = READ_ONCE(ceph_inode_to_fs_client(inode)->filp_gen); 240 238 241 239 if ((file->f_mode & FMODE_WRITE) && ceph_has_inline_data(ci)) { 242 240 ret = ceph_uninline_data(file); ··· 261 259 */ 262 260 static int ceph_init_file(struct inode *inode, struct file *file, int fmode) 263 261 { 262 + struct ceph_client *cl = ceph_inode_to_client(inode); 264 263 int ret = 0; 265 264 266 265 switch (inode->i_mode & S_IFMT) { ··· 274 271 break; 275 272 276 273 case S_IFLNK: 277 - dout("init_file %p %p 0%o (symlink)\n", inode, file, 278 - inode->i_mode); 274 + doutc(cl, "%p %llx.%llx %p 0%o (symlink)\n", inode, 275 + ceph_vinop(inode), file, inode->i_mode); 279 276 break; 280 277 281 278 default: 282 - dout("init_file %p %p 0%o (special)\n", inode, file, 283 - inode->i_mode); 279 + doutc(cl, "%p %llx.%llx %p 0%o (special)\n", inode, 280 + ceph_vinop(inode), file, inode->i_mode); 284 281 /* 285 282 * we need to drop the open ref now, since we don't 286 283 * have .release set to ceph_release. ··· 299 296 int ceph_renew_caps(struct inode *inode, int fmode) 300 297 { 301 298 struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(inode->i_sb); 299 + struct ceph_client *cl = mdsc->fsc->client; 302 300 struct ceph_inode_info *ci = ceph_inode(inode); 303 301 struct ceph_mds_request *req; 304 302 int err, flags, wanted; ··· 311 307 (!(wanted & CEPH_CAP_ANY_WR) || ci->i_auth_cap)) { 312 308 int issued = __ceph_caps_issued(ci, NULL); 313 309 spin_unlock(&ci->i_ceph_lock); 314 - dout("renew caps %p want %s issued %s updating mds_wanted\n", 315 - inode, ceph_cap_string(wanted), ceph_cap_string(issued)); 310 + doutc(cl, "%p %llx.%llx want %s issued %s updating mds_wanted\n", 311 + inode, ceph_vinop(inode), ceph_cap_string(wanted), 312 + ceph_cap_string(issued)); 316 313 ceph_check_caps(ci, 0); 317 314 return 0; 318 315 } ··· 344 339 err = ceph_mdsc_do_request(mdsc, NULL, req); 345 340 ceph_mdsc_put_request(req); 346 341 out: 347 - dout("renew caps %p open result=%d\n", inode, err); 342 + doutc(cl, "%p %llx.%llx open result=%d\n", inode, ceph_vinop(inode), 343 + err); 348 344 return err < 0 ? err : 0; 349 345 } 350 346 ··· 358 352 int ceph_open(struct inode *inode, struct file *file) 359 353 { 360 354 struct ceph_inode_info *ci = ceph_inode(inode); 361 - struct ceph_fs_client *fsc = ceph_sb_to_client(inode->i_sb); 355 + struct ceph_fs_client *fsc = ceph_sb_to_fs_client(inode->i_sb); 356 + struct ceph_client *cl = fsc->client; 362 357 struct ceph_mds_client *mdsc = fsc->mdsc; 363 358 struct ceph_mds_request *req; 364 359 struct ceph_file_info *fi = file->private_data; ··· 367 360 int flags, fmode, wanted; 368 361 369 362 if (fi) { 370 - dout("open file %p is already opened\n", file); 363 + doutc(cl, "file %p is already opened\n", file); 371 364 return 0; 372 365 } 373 366 ··· 381 374 return err; 382 375 } 383 376 384 - dout("open inode %p ino %llx.%llx file %p flags %d (%d)\n", inode, 385 - ceph_vinop(inode), file, flags, file->f_flags); 377 + doutc(cl, "%p %llx.%llx file %p flags %d (%d)\n", inode, 378 + ceph_vinop(inode), file, flags, file->f_flags); 386 379 fmode = ceph_flags_to_mode(flags); 387 380 wanted = ceph_caps_for_mode(fmode); 388 381 ··· 406 399 int mds_wanted = __ceph_caps_mds_wanted(ci, true); 407 400 int issued = __ceph_caps_issued(ci, NULL); 408 401 409 - dout("open %p fmode %d want %s issued %s using existing\n", 410 - inode, fmode, ceph_cap_string(wanted), 411 - ceph_cap_string(issued)); 402 + doutc(cl, "open %p fmode %d want %s issued %s using existing\n", 403 + inode, fmode, ceph_cap_string(wanted), 404 + ceph_cap_string(issued)); 412 405 __ceph_touch_fmode(ci, mdsc, fmode); 413 406 spin_unlock(&ci->i_ceph_lock); 414 407 ··· 428 421 429 422 spin_unlock(&ci->i_ceph_lock); 430 423 431 - dout("open fmode %d wants %s\n", fmode, ceph_cap_string(wanted)); 424 + doutc(cl, "open fmode %d wants %s\n", fmode, ceph_cap_string(wanted)); 432 425 req = prepare_open_request(inode->i_sb, flags, 0); 433 426 if (IS_ERR(req)) { 434 427 err = PTR_ERR(req); ··· 442 435 if (!err) 443 436 err = ceph_init_file(inode, file, req->r_fmode); 444 437 ceph_mdsc_put_request(req); 445 - dout("open result=%d on %llx.%llx\n", err, ceph_vinop(inode)); 438 + doutc(cl, "open result=%d on %llx.%llx\n", err, ceph_vinop(inode)); 446 439 out: 447 440 return err; 448 441 } ··· 522 515 523 516 static void restore_deleg_ino(struct inode *dir, u64 ino) 524 517 { 518 + struct ceph_client *cl = ceph_inode_to_client(dir); 525 519 struct ceph_inode_info *ci = ceph_inode(dir); 526 520 struct ceph_mds_session *s = NULL; 527 521 ··· 533 525 if (s) { 534 526 int err = ceph_restore_deleg_ino(s, ino); 535 527 if (err) 536 - pr_warn("ceph: unable to restore delegated ino 0x%llx to session: %d\n", 528 + pr_warn_client(cl, 529 + "unable to restore delegated ino 0x%llx to session: %d\n", 537 530 ino, err); 538 531 ceph_put_mds_session(s); 539 532 } ··· 566 557 static void ceph_async_create_cb(struct ceph_mds_client *mdsc, 567 558 struct ceph_mds_request *req) 568 559 { 560 + struct ceph_client *cl = mdsc->fsc->client; 569 561 struct dentry *dentry = req->r_dentry; 570 562 struct inode *dinode = d_inode(dentry); 571 563 struct inode *tinode = req->r_target_inode; ··· 584 574 if (result) { 585 575 int pathlen = 0; 586 576 u64 base = 0; 587 - char *path = ceph_mdsc_build_path(req->r_dentry, &pathlen, 577 + char *path = ceph_mdsc_build_path(mdsc, req->r_dentry, &pathlen, 588 578 &base, 0); 589 579 590 - pr_warn("async create failure path=(%llx)%s result=%d!\n", 580 + pr_warn_client(cl, 581 + "async create failure path=(%llx)%s result=%d!\n", 591 582 base, IS_ERR(path) ? "<<bad>>" : path, result); 592 583 ceph_mdsc_free_path(path, pathlen); 593 584 ··· 607 596 u64 ino = ceph_vino(tinode).ino; 608 597 609 598 if (req->r_deleg_ino != ino) 610 - pr_warn("%s: inode number mismatch! err=%d deleg_ino=0x%llx target=0x%llx\n", 611 - __func__, req->r_err, req->r_deleg_ino, ino); 599 + pr_warn_client(cl, 600 + "inode number mismatch! err=%d deleg_ino=0x%llx target=0x%llx\n", 601 + req->r_err, req->r_deleg_ino, ino); 612 602 613 603 mapping_set_error(tinode->i_mapping, result); 614 604 wake_async_create_waiters(tinode, req->r_session); 615 605 } else if (!result) { 616 - pr_warn("%s: no req->r_target_inode for 0x%llx\n", __func__, 617 - req->r_deleg_ino); 606 + pr_warn_client(cl, "no req->r_target_inode for 0x%llx\n", 607 + req->r_deleg_ino); 618 608 } 619 609 out: 620 610 ceph_mdsc_release_dir_caps(req); ··· 637 625 struct timespec64 now; 638 626 struct ceph_string *pool_ns; 639 627 struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(dir->i_sb); 628 + struct ceph_client *cl = mdsc->fsc->client; 640 629 struct ceph_vino vino = { .ino = req->r_deleg_ino, 641 630 .snap = CEPH_NOSNAP }; 642 631 ··· 668 655 in.truncate_seq = cpu_to_le32(1); 669 656 in.truncate_size = cpu_to_le64(-1ULL); 670 657 in.xattr_version = cpu_to_le64(1); 671 - in.uid = cpu_to_le32(from_kuid(&init_user_ns, current_fsuid())); 658 + in.uid = cpu_to_le32(from_kuid(&init_user_ns, 659 + mapped_fsuid(req->r_mnt_idmap, 660 + &init_user_ns))); 672 661 if (dir->i_mode & S_ISGID) { 673 662 in.gid = cpu_to_le32(from_kgid(&init_user_ns, dir->i_gid)); 674 663 ··· 678 663 if (S_ISDIR(mode)) 679 664 mode |= S_ISGID; 680 665 } else { 681 - in.gid = cpu_to_le32(from_kgid(&init_user_ns, current_fsgid())); 666 + in.gid = cpu_to_le32(from_kgid(&init_user_ns, 667 + mapped_fsgid(req->r_mnt_idmap, 668 + &init_user_ns))); 682 669 } 683 670 in.mode = cpu_to_le32((u32)mode); 684 671 ··· 700 683 req->r_fmode, NULL); 701 684 up_read(&mdsc->snap_rwsem); 702 685 if (ret) { 703 - dout("%s failed to fill inode: %d\n", __func__, ret); 686 + doutc(cl, "failed to fill inode: %d\n", ret); 704 687 ceph_dir_clear_complete(dir); 705 688 if (!d_unhashed(dentry)) 706 689 d_drop(dentry); ··· 708 691 } else { 709 692 struct dentry *dn; 710 693 711 - dout("%s d_adding new inode 0x%llx to 0x%llx/%s\n", __func__, 712 - vino.ino, ceph_ino(dir), dentry->d_name.name); 694 + doutc(cl, "d_adding new inode 0x%llx to 0x%llx/%s\n", 695 + vino.ino, ceph_ino(dir), dentry->d_name.name); 713 696 ceph_dir_clear_ordered(dir); 714 697 ceph_init_inode_acls(inode, as_ctx); 715 698 if (inode->i_state & I_NEW) { ··· 747 730 int ceph_atomic_open(struct inode *dir, struct dentry *dentry, 748 731 struct file *file, unsigned flags, umode_t mode) 749 732 { 750 - struct ceph_fs_client *fsc = ceph_sb_to_client(dir->i_sb); 733 + struct mnt_idmap *idmap = file_mnt_idmap(file); 734 + struct ceph_fs_client *fsc = ceph_sb_to_fs_client(dir->i_sb); 735 + struct ceph_client *cl = fsc->client; 751 736 struct ceph_mds_client *mdsc = fsc->mdsc; 752 737 struct ceph_mds_request *req; 753 738 struct inode *new_inode = NULL; ··· 759 740 int mask; 760 741 int err; 761 742 762 - dout("atomic_open %p dentry %p '%pd' %s flags %d mode 0%o\n", 763 - dir, dentry, dentry, 764 - d_unhashed(dentry) ? "unhashed" : "hashed", flags, mode); 743 + doutc(cl, "%p %llx.%llx dentry %p '%pd' %s flags %d mode 0%o\n", 744 + dir, ceph_vinop(dir), dentry, dentry, 745 + d_unhashed(dentry) ? "unhashed" : "hashed", flags, mode); 765 746 766 747 if (dentry->d_name.len > NAME_MAX) 767 748 return -ENAMETOOLONG; ··· 807 788 mask |= CEPH_CAP_XATTR_SHARED; 808 789 req->r_args.open.mask = cpu_to_le32(mask); 809 790 req->r_parent = dir; 791 + if (req->r_op == CEPH_MDS_OP_CREATE) 792 + req->r_mnt_idmap = mnt_idmap_get(idmap); 810 793 ihold(dir); 811 794 if (IS_ENCRYPTED(dir)) { 812 795 set_bit(CEPH_MDS_R_FSCRYPT_FILE, &req->r_req_flags); ··· 901 880 goto out_req; 902 881 if (dn || d_really_is_negative(dentry) || d_is_symlink(dentry)) { 903 882 /* make vfs retry on splice, ENOENT, or symlink */ 904 - dout("atomic_open finish_no_open on dn %p\n", dn); 883 + doutc(cl, "finish_no_open on dn %p\n", dn); 905 884 err = finish_no_open(file, dn); 906 885 } else { 907 886 if (IS_ENCRYPTED(dir) && 908 887 !fscrypt_has_permitted_context(dir, d_inode(dentry))) { 909 - pr_warn("Inconsistent encryption context (parent %llx:%llx child %llx:%llx)\n", 888 + pr_warn_client(cl, 889 + "Inconsistent encryption context (parent %llx:%llx child %llx:%llx)\n", 910 890 ceph_vinop(dir), ceph_vinop(d_inode(dentry))); 911 891 goto out_req; 912 892 } 913 893 914 - dout("atomic_open finish_open on dn %p\n", dn); 894 + doutc(cl, "finish_open on dn %p\n", dn); 915 895 if (req->r_op == CEPH_MDS_OP_CREATE && req->r_reply_info.has_create_ino) { 916 896 struct inode *newino = d_inode(dentry); 917 897 ··· 927 905 iput(new_inode); 928 906 out_ctx: 929 907 ceph_release_acl_sec_ctx(&as_ctx); 930 - dout("atomic_open result=%d\n", err); 908 + doutc(cl, "result=%d\n", err); 931 909 return err; 932 910 } 933 911 934 912 int ceph_release(struct inode *inode, struct file *file) 935 913 { 914 + struct ceph_client *cl = ceph_inode_to_client(inode); 936 915 struct ceph_inode_info *ci = ceph_inode(inode); 937 916 938 917 if (S_ISDIR(inode->i_mode)) { 939 918 struct ceph_dir_file_info *dfi = file->private_data; 940 - dout("release inode %p dir file %p\n", inode, file); 919 + doutc(cl, "%p %llx.%llx dir file %p\n", inode, 920 + ceph_vinop(inode), file); 941 921 WARN_ON(!list_empty(&dfi->file_info.rw_contexts)); 942 922 943 923 ceph_put_fmode(ci, dfi->file_info.fmode, 1); ··· 951 927 kmem_cache_free(ceph_dir_file_cachep, dfi); 952 928 } else { 953 929 struct ceph_file_info *fi = file->private_data; 954 - dout("release inode %p regular file %p\n", inode, file); 930 + doutc(cl, "%p %llx.%llx regular file %p\n", inode, 931 + ceph_vinop(inode), file); 955 932 WARN_ON(!list_empty(&fi->rw_contexts)); 956 933 957 934 ceph_fscache_unuse_cookie(inode, file->f_mode & FMODE_WRITE); ··· 987 962 u64 *last_objver) 988 963 { 989 964 struct ceph_inode_info *ci = ceph_inode(inode); 990 - struct ceph_fs_client *fsc = ceph_inode_to_client(inode); 965 + struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode); 966 + struct ceph_client *cl = fsc->client; 991 967 struct ceph_osd_client *osdc = &fsc->client->osdc; 992 968 ssize_t ret; 993 969 u64 off = *ki_pos; ··· 997 971 bool sparse = IS_ENCRYPTED(inode) || ceph_test_mount_opt(fsc, SPARSEREAD); 998 972 u64 objver = 0; 999 973 1000 - dout("sync_read on inode %p %llx~%llx\n", inode, *ki_pos, len); 974 + doutc(cl, "on inode %p %llx.%llx %llx~%llx\n", inode, 975 + ceph_vinop(inode), *ki_pos, len); 1001 976 1002 977 if (ceph_inode_is_shutdown(inode)) 1003 978 return -EIO; ··· 1032 1005 /* determine new offset/length if encrypted */ 1033 1006 ceph_fscrypt_adjust_off_and_len(inode, &read_off, &read_len); 1034 1007 1035 - dout("sync_read orig %llu~%llu reading %llu~%llu", 1036 - off, len, read_off, read_len); 1008 + doutc(cl, "orig %llu~%llu reading %llu~%llu", off, len, 1009 + read_off, read_len); 1037 1010 1038 1011 req = ceph_osdc_new_request(osdc, &ci->i_layout, 1039 1012 ci->i_vino, read_off, &read_len, 0, 1, ··· 1086 1059 objver = req->r_version; 1087 1060 1088 1061 i_size = i_size_read(inode); 1089 - dout("sync_read %llu~%llu got %zd i_size %llu%s\n", 1090 - off, len, ret, i_size, (more ? " MORE" : "")); 1062 + doutc(cl, "%llu~%llu got %zd i_size %llu%s\n", off, len, 1063 + ret, i_size, (more ? " MORE" : "")); 1091 1064 1092 1065 /* Fix it to go to end of extent map */ 1093 1066 if (sparse && ret >= 0) ··· 1128 1101 int zlen = min(len - ret, i_size - off - ret); 1129 1102 int zoff = page_off + ret; 1130 1103 1131 - dout("sync_read zero gap %llu~%llu\n", 1132 - off + ret, off + ret + zlen); 1104 + doutc(cl, "zero gap %llu~%llu\n", off + ret, 1105 + off + ret + zlen); 1133 1106 ceph_zero_page_vector_range(zoff, zlen, pages); 1134 1107 ret += zlen; 1135 1108 } ··· 1178 1151 if (last_objver) 1179 1152 *last_objver = objver; 1180 1153 } 1181 - dout("sync_read result %zd retry_op %d\n", ret, *retry_op); 1154 + doutc(cl, "result %zd retry_op %d\n", ret, *retry_op); 1182 1155 return ret; 1183 1156 } 1184 1157 ··· 1187 1160 { 1188 1161 struct file *file = iocb->ki_filp; 1189 1162 struct inode *inode = file_inode(file); 1163 + struct ceph_client *cl = ceph_inode_to_client(inode); 1190 1164 1191 - dout("sync_read on file %p %llx~%zx %s\n", file, iocb->ki_pos, 1192 - iov_iter_count(to), (file->f_flags & O_DIRECT) ? "O_DIRECT" : ""); 1165 + doutc(cl, "on file %p %llx~%zx %s\n", file, iocb->ki_pos, 1166 + iov_iter_count(to), 1167 + (file->f_flags & O_DIRECT) ? "O_DIRECT" : ""); 1193 1168 1194 1169 return __ceph_sync_read(inode, &iocb->ki_pos, to, retry_op, NULL); 1195 1170 } ··· 1219 1190 static void ceph_aio_complete(struct inode *inode, 1220 1191 struct ceph_aio_request *aio_req) 1221 1192 { 1193 + struct ceph_client *cl = ceph_inode_to_client(inode); 1222 1194 struct ceph_inode_info *ci = ceph_inode(inode); 1223 1195 int ret; 1224 1196 ··· 1233 1203 if (!ret) 1234 1204 ret = aio_req->total_len; 1235 1205 1236 - dout("ceph_aio_complete %p rc %d\n", inode, ret); 1206 + doutc(cl, "%p %llx.%llx rc %d\n", inode, ceph_vinop(inode), ret); 1237 1207 1238 1208 if (ret >= 0 && aio_req->write) { 1239 1209 int dirty; ··· 1272 1242 struct ceph_client_metric *metric = &ceph_sb_to_mdsc(inode->i_sb)->metric; 1273 1243 unsigned int len = osd_data->bvec_pos.iter.bi_size; 1274 1244 bool sparse = (op->op == CEPH_OSD_OP_SPARSE_READ); 1245 + struct ceph_client *cl = ceph_inode_to_client(inode); 1275 1246 1276 1247 BUG_ON(osd_data->type != CEPH_OSD_DATA_TYPE_BVECS); 1277 1248 BUG_ON(!osd_data->num_bvecs); 1278 1249 1279 - dout("ceph_aio_complete_req %p rc %d bytes %u\n", inode, rc, len); 1250 + doutc(cl, "req %p inode %p %llx.%llx, rc %d bytes %u\n", req, 1251 + inode, ceph_vinop(inode), rc, len); 1280 1252 1281 1253 if (rc == -EOLDSNAPC) { 1282 1254 struct ceph_aio_work *aio_work; ··· 1288 1256 if (aio_work) { 1289 1257 INIT_WORK(&aio_work->work, ceph_aio_retry_work); 1290 1258 aio_work->req = req; 1291 - queue_work(ceph_inode_to_client(inode)->inode_wq, 1259 + queue_work(ceph_inode_to_fs_client(inode)->inode_wq, 1292 1260 &aio_work->work); 1293 1261 return; 1294 1262 } ··· 1418 1386 struct file *file = iocb->ki_filp; 1419 1387 struct inode *inode = file_inode(file); 1420 1388 struct ceph_inode_info *ci = ceph_inode(inode); 1421 - struct ceph_fs_client *fsc = ceph_inode_to_client(inode); 1389 + struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode); 1390 + struct ceph_client *cl = fsc->client; 1422 1391 struct ceph_client_metric *metric = &fsc->mdsc->metric; 1423 1392 struct ceph_vino vino; 1424 1393 struct ceph_osd_request *req; ··· 1438 1405 if (write && ceph_snap(file_inode(file)) != CEPH_NOSNAP) 1439 1406 return -EROFS; 1440 1407 1441 - dout("sync_direct_%s on file %p %lld~%u snapc %p seq %lld\n", 1442 - (write ? "write" : "read"), file, pos, (unsigned)count, 1443 - snapc, snapc ? snapc->seq : 0); 1408 + doutc(cl, "sync_direct_%s on file %p %lld~%u snapc %p seq %lld\n", 1409 + (write ? "write" : "read"), file, pos, (unsigned)count, 1410 + snapc, snapc ? snapc->seq : 0); 1444 1411 1445 1412 if (write) { 1446 1413 int ret2; ··· 1451 1418 pos >> PAGE_SHIFT, 1452 1419 (pos + count - 1) >> PAGE_SHIFT); 1453 1420 if (ret2 < 0) 1454 - dout("invalidate_inode_pages2_range returned %d\n", ret2); 1421 + doutc(cl, "invalidate_inode_pages2_range returned %d\n", 1422 + ret2); 1455 1423 1456 1424 flags = /* CEPH_OSD_FLAG_ORDERSNAP | */ CEPH_OSD_FLAG_WRITE; 1457 1425 } else { ··· 1644 1610 struct file *file = iocb->ki_filp; 1645 1611 struct inode *inode = file_inode(file); 1646 1612 struct ceph_inode_info *ci = ceph_inode(inode); 1647 - struct ceph_fs_client *fsc = ceph_inode_to_client(inode); 1613 + struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode); 1614 + struct ceph_client *cl = fsc->client; 1648 1615 struct ceph_osd_client *osdc = &fsc->client->osdc; 1649 1616 struct ceph_osd_request *req; 1650 1617 struct page **pages; ··· 1660 1625 if (ceph_snap(file_inode(file)) != CEPH_NOSNAP) 1661 1626 return -EROFS; 1662 1627 1663 - dout("sync_write on file %p %lld~%u snapc %p seq %lld\n", 1664 - file, pos, (unsigned)count, snapc, snapc->seq); 1628 + doutc(cl, "on file %p %lld~%u snapc %p seq %lld\n", file, pos, 1629 + (unsigned)count, snapc, snapc->seq); 1665 1630 1666 1631 ret = filemap_write_and_wait_range(inode->i_mapping, 1667 1632 pos, pos + count - 1); ··· 1705 1670 last = (pos + len) != (write_pos + write_len); 1706 1671 rmw = first || last; 1707 1672 1708 - dout("sync_write ino %llx %lld~%llu adjusted %lld~%llu -- %srmw\n", 1709 - ci->i_vino.ino, pos, len, write_pos, write_len, 1710 - rmw ? "" : "no "); 1673 + doutc(cl, "ino %llx %lld~%llu adjusted %lld~%llu -- %srmw\n", 1674 + ci->i_vino.ino, pos, len, write_pos, write_len, 1675 + rmw ? "" : "no "); 1711 1676 1712 1677 /* 1713 1678 * The data is emplaced into the page as it would be if it were ··· 1916 1881 left -= ret; 1917 1882 } 1918 1883 if (ret < 0) { 1919 - dout("sync_write write failed with %d\n", ret); 1884 + doutc(cl, "write failed with %d\n", ret); 1920 1885 ceph_release_page_vector(pages, num_pages); 1921 1886 break; 1922 1887 } ··· 1926 1891 write_pos, write_len, 1927 1892 GFP_KERNEL); 1928 1893 if (ret < 0) { 1929 - dout("encryption failed with %d\n", ret); 1894 + doutc(cl, "encryption failed with %d\n", ret); 1930 1895 ceph_release_page_vector(pages, num_pages); 1931 1896 break; 1932 1897 } ··· 1945 1910 break; 1946 1911 } 1947 1912 1948 - dout("sync_write write op %lld~%llu\n", write_pos, write_len); 1913 + doutc(cl, "write op %lld~%llu\n", write_pos, write_len); 1949 1914 osd_req_op_extent_osd_data_pages(req, rmw ? 1 : 0, pages, write_len, 1950 1915 offset_in_page(write_pos), false, 1951 1916 true); ··· 1976 1941 req->r_end_latency, len, ret); 1977 1942 ceph_osdc_put_request(req); 1978 1943 if (ret != 0) { 1979 - dout("sync_write osd write returned %d\n", ret); 1944 + doutc(cl, "osd write returned %d\n", ret); 1980 1945 /* Version changed! Must re-do the rmw cycle */ 1981 1946 if ((assert_ver && (ret == -ERANGE || ret == -EOVERFLOW)) || 1982 1947 (!assert_ver && ret == -EEXIST)) { ··· 2006 1971 pos >> PAGE_SHIFT, 2007 1972 (pos + len - 1) >> PAGE_SHIFT); 2008 1973 if (ret < 0) { 2009 - dout("invalidate_inode_pages2_range returned %d\n", 2010 - ret); 1974 + doutc(cl, "invalidate_inode_pages2_range returned %d\n", 1975 + ret); 2011 1976 ret = 0; 2012 1977 } 2013 1978 pos += len; 2014 1979 written += len; 2015 - dout("sync_write written %d\n", written); 1980 + doutc(cl, "written %d\n", written); 2016 1981 if (pos > i_size_read(inode)) { 2017 1982 check_caps = ceph_inode_set_size(inode, pos); 2018 1983 if (check_caps) ··· 2026 1991 ret = written; 2027 1992 iocb->ki_pos = pos; 2028 1993 } 2029 - dout("sync_write returning %d\n", ret); 1994 + doutc(cl, "returning %d\n", ret); 2030 1995 return ret; 2031 1996 } 2032 1997 ··· 2045 2010 struct inode *inode = file_inode(filp); 2046 2011 struct ceph_inode_info *ci = ceph_inode(inode); 2047 2012 bool direct_lock = iocb->ki_flags & IOCB_DIRECT; 2013 + struct ceph_client *cl = ceph_inode_to_client(inode); 2048 2014 ssize_t ret; 2049 2015 int want = 0, got = 0; 2050 2016 int retry_op = 0, read = 0; 2051 2017 2052 2018 again: 2053 - dout("aio_read %p %llx.%llx %llu~%u trying to get caps on %p\n", 2054 - inode, ceph_vinop(inode), iocb->ki_pos, (unsigned)len, inode); 2019 + doutc(cl, "%llu~%u trying to get caps on %p %llx.%llx\n", 2020 + iocb->ki_pos, (unsigned)len, inode, ceph_vinop(inode)); 2055 2021 2056 2022 if (ceph_inode_is_shutdown(inode)) 2057 2023 return -ESTALE; ··· 2080 2044 (iocb->ki_flags & IOCB_DIRECT) || 2081 2045 (fi->flags & CEPH_F_SYNC)) { 2082 2046 2083 - dout("aio_sync_read %p %llx.%llx %llu~%u got cap refs on %s\n", 2084 - inode, ceph_vinop(inode), iocb->ki_pos, (unsigned)len, 2085 - ceph_cap_string(got)); 2047 + doutc(cl, "sync %p %llx.%llx %llu~%u got cap refs on %s\n", 2048 + inode, ceph_vinop(inode), iocb->ki_pos, (unsigned)len, 2049 + ceph_cap_string(got)); 2086 2050 2087 2051 if (!ceph_has_inline_data(ci)) { 2088 2052 if (!retry_op && ··· 2100 2064 } 2101 2065 } else { 2102 2066 CEPH_DEFINE_RW_CONTEXT(rw_ctx, got); 2103 - dout("aio_read %p %llx.%llx %llu~%u got cap refs on %s\n", 2104 - inode, ceph_vinop(inode), iocb->ki_pos, (unsigned)len, 2105 - ceph_cap_string(got)); 2067 + doutc(cl, "async %p %llx.%llx %llu~%u got cap refs on %s\n", 2068 + inode, ceph_vinop(inode), iocb->ki_pos, (unsigned)len, 2069 + ceph_cap_string(got)); 2106 2070 ceph_add_rw_context(fi, &rw_ctx); 2107 2071 ret = generic_file_read_iter(iocb, to); 2108 2072 ceph_del_rw_context(fi, &rw_ctx); 2109 2073 } 2110 2074 2111 - dout("aio_read %p %llx.%llx dropping cap refs on %s = %d\n", 2112 - inode, ceph_vinop(inode), ceph_cap_string(got), (int)ret); 2075 + doutc(cl, "%p %llx.%llx dropping cap refs on %s = %d\n", 2076 + inode, ceph_vinop(inode), ceph_cap_string(got), (int)ret); 2113 2077 ceph_put_cap_refs(ci, got); 2114 2078 2115 2079 if (direct_lock) ··· 2169 2133 /* hit EOF or hole? */ 2170 2134 if (retry_op == CHECK_EOF && iocb->ki_pos < i_size && 2171 2135 ret < len) { 2172 - dout("sync_read hit hole, ppos %lld < size %lld" 2173 - ", reading more\n", iocb->ki_pos, i_size); 2136 + doutc(cl, "hit hole, ppos %lld < size %lld, reading more\n", 2137 + iocb->ki_pos, i_size); 2174 2138 2175 2139 read += ret; 2176 2140 len -= ret; ··· 2264 2228 struct ceph_file_info *fi = file->private_data; 2265 2229 struct inode *inode = file_inode(file); 2266 2230 struct ceph_inode_info *ci = ceph_inode(inode); 2267 - struct ceph_fs_client *fsc = ceph_inode_to_client(inode); 2231 + struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode); 2232 + struct ceph_client *cl = fsc->client; 2268 2233 struct ceph_osd_client *osdc = &fsc->client->osdc; 2269 2234 struct ceph_cap_flush *prealloc_cf; 2270 2235 ssize_t count, written = 0; ··· 2333 2296 if (err) 2334 2297 goto out; 2335 2298 2336 - dout("aio_write %p %llx.%llx %llu~%zd getting caps. i_size %llu\n", 2337 - inode, ceph_vinop(inode), pos, count, i_size_read(inode)); 2299 + doutc(cl, "%p %llx.%llx %llu~%zd getting caps. i_size %llu\n", 2300 + inode, ceph_vinop(inode), pos, count, 2301 + i_size_read(inode)); 2338 2302 if (!(fi->flags & CEPH_F_SYNC) && !direct_lock) 2339 2303 want |= CEPH_CAP_FILE_BUFFER; 2340 2304 if (fi->fmode & CEPH_FILE_MODE_LAZY) ··· 2351 2313 2352 2314 inode_inc_iversion_raw(inode); 2353 2315 2354 - dout("aio_write %p %llx.%llx %llu~%zd got cap refs on %s\n", 2355 - inode, ceph_vinop(inode), pos, count, ceph_cap_string(got)); 2316 + doutc(cl, "%p %llx.%llx %llu~%zd got cap refs on %s\n", 2317 + inode, ceph_vinop(inode), pos, count, ceph_cap_string(got)); 2356 2318 2357 2319 if ((got & (CEPH_CAP_FILE_BUFFER|CEPH_CAP_FILE_LAZYIO)) == 0 || 2358 2320 (iocb->ki_flags & IOCB_DIRECT) || (fi->flags & CEPH_F_SYNC) || ··· 2412 2374 ceph_check_caps(ci, CHECK_CAPS_FLUSH); 2413 2375 } 2414 2376 2415 - dout("aio_write %p %llx.%llx %llu~%u dropping cap refs on %s\n", 2416 - inode, ceph_vinop(inode), pos, (unsigned)count, 2417 - ceph_cap_string(got)); 2377 + doutc(cl, "%p %llx.%llx %llu~%u dropping cap refs on %s\n", 2378 + inode, ceph_vinop(inode), pos, (unsigned)count, 2379 + ceph_cap_string(got)); 2418 2380 ceph_put_cap_refs(ci, got); 2419 2381 2420 2382 if (written == -EOLDSNAPC) { 2421 - dout("aio_write %p %llx.%llx %llu~%u" "got EOLDSNAPC, retrying\n", 2422 - inode, ceph_vinop(inode), pos, (unsigned)count); 2383 + doutc(cl, "%p %llx.%llx %llu~%u" "got EOLDSNAPC, retrying\n", 2384 + inode, ceph_vinop(inode), pos, (unsigned)count); 2423 2385 goto retry_snap; 2424 2386 } 2425 2387 ··· 2500 2462 loff_t offset, loff_t *length) 2501 2463 { 2502 2464 struct ceph_inode_info *ci = ceph_inode(inode); 2503 - struct ceph_fs_client *fsc = ceph_inode_to_client(inode); 2465 + struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode); 2504 2466 struct ceph_osd_request *req; 2505 2467 int ret = 0; 2506 2468 loff_t zero = 0; ··· 2591 2553 struct inode *inode = file_inode(file); 2592 2554 struct ceph_inode_info *ci = ceph_inode(inode); 2593 2555 struct ceph_cap_flush *prealloc_cf; 2556 + struct ceph_client *cl = ceph_inode_to_client(inode); 2594 2557 int want, got = 0; 2595 2558 int dirty; 2596 2559 int ret = 0; 2597 2560 loff_t endoff = 0; 2598 2561 loff_t size; 2599 2562 2600 - dout("%s %p %llx.%llx mode %x, offset %llu length %llu\n", __func__, 2601 - inode, ceph_vinop(inode), mode, offset, length); 2563 + doutc(cl, "%p %llx.%llx mode %x, offset %llu length %llu\n", 2564 + inode, ceph_vinop(inode), mode, offset, length); 2602 2565 2603 2566 if (mode != (FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE)) 2604 2567 return -EOPNOTSUPP; ··· 2728 2689 static int is_file_size_ok(struct inode *src_inode, struct inode *dst_inode, 2729 2690 loff_t src_off, loff_t dst_off, size_t len) 2730 2691 { 2692 + struct ceph_client *cl = ceph_inode_to_client(src_inode); 2731 2693 loff_t size, endoff; 2732 2694 2733 2695 size = i_size_read(src_inode); ··· 2739 2699 * inode. 2740 2700 */ 2741 2701 if (src_off + len > size) { 2742 - dout("Copy beyond EOF (%llu + %zu > %llu)\n", 2743 - src_off, len, size); 2702 + doutc(cl, "Copy beyond EOF (%llu + %zu > %llu)\n", src_off, 2703 + len, size); 2744 2704 return -EOPNOTSUPP; 2745 2705 } 2746 2706 size = i_size_read(dst_inode); ··· 2816 2776 u64 src_objnum, src_objoff, dst_objnum, dst_objoff; 2817 2777 u32 src_objlen, dst_objlen; 2818 2778 u32 object_size = src_ci->i_layout.object_size; 2779 + struct ceph_client *cl = fsc->client; 2819 2780 int ret; 2820 2781 2821 2782 src_oloc.pool = src_ci->i_layout.pool_id; ··· 2858 2817 if (ret) { 2859 2818 if (ret == -EOPNOTSUPP) { 2860 2819 fsc->have_copy_from2 = false; 2861 - pr_notice("OSDs don't support copy-from2; disabling copy offload\n"); 2820 + pr_notice_client(cl, 2821 + "OSDs don't support copy-from2; disabling copy offload\n"); 2862 2822 } 2863 - dout("ceph_osdc_copy_from returned %d\n", ret); 2823 + doutc(cl, "returned %d\n", ret); 2864 2824 if (!bytes) 2865 2825 bytes = ret; 2866 2826 goto out; ··· 2887 2845 struct ceph_inode_info *src_ci = ceph_inode(src_inode); 2888 2846 struct ceph_inode_info *dst_ci = ceph_inode(dst_inode); 2889 2847 struct ceph_cap_flush *prealloc_cf; 2890 - struct ceph_fs_client *src_fsc = ceph_inode_to_client(src_inode); 2848 + struct ceph_fs_client *src_fsc = ceph_inode_to_fs_client(src_inode); 2849 + struct ceph_client *cl = src_fsc->client; 2891 2850 loff_t size; 2892 2851 ssize_t ret = -EIO, bytes; 2893 2852 u64 src_objnum, dst_objnum, src_objoff, dst_objoff; ··· 2896 2853 int src_got = 0, dst_got = 0, err, dirty; 2897 2854 2898 2855 if (src_inode->i_sb != dst_inode->i_sb) { 2899 - struct ceph_fs_client *dst_fsc = ceph_inode_to_client(dst_inode); 2856 + struct ceph_fs_client *dst_fsc = ceph_inode_to_fs_client(dst_inode); 2900 2857 2901 2858 if (ceph_fsid_compare(&src_fsc->client->fsid, 2902 2859 &dst_fsc->client->fsid)) { ··· 2931 2888 (src_ci->i_layout.stripe_count != 1) || 2932 2889 (dst_ci->i_layout.stripe_count != 1) || 2933 2890 (src_ci->i_layout.object_size != dst_ci->i_layout.object_size)) { 2934 - dout("Invalid src/dst files layout\n"); 2891 + doutc(cl, "Invalid src/dst files layout\n"); 2935 2892 return -EOPNOTSUPP; 2936 2893 } 2937 2894 ··· 2949 2906 /* Start by sync'ing the source and destination files */ 2950 2907 ret = file_write_and_wait_range(src_file, src_off, (src_off + len)); 2951 2908 if (ret < 0) { 2952 - dout("failed to write src file (%zd)\n", ret); 2909 + doutc(cl, "failed to write src file (%zd)\n", ret); 2953 2910 goto out; 2954 2911 } 2955 2912 ret = file_write_and_wait_range(dst_file, dst_off, (dst_off + len)); 2956 2913 if (ret < 0) { 2957 - dout("failed to write dst file (%zd)\n", ret); 2914 + doutc(cl, "failed to write dst file (%zd)\n", ret); 2958 2915 goto out; 2959 2916 } 2960 2917 ··· 2966 2923 err = get_rd_wr_caps(src_file, &src_got, 2967 2924 dst_file, (dst_off + len), &dst_got); 2968 2925 if (err < 0) { 2969 - dout("get_rd_wr_caps returned %d\n", err); 2926 + doutc(cl, "get_rd_wr_caps returned %d\n", err); 2970 2927 ret = -EOPNOTSUPP; 2971 2928 goto out; 2972 2929 } ··· 2981 2938 dst_off >> PAGE_SHIFT, 2982 2939 (dst_off + len) >> PAGE_SHIFT); 2983 2940 if (ret < 0) { 2984 - dout("Failed to invalidate inode pages (%zd)\n", ret); 2941 + doutc(cl, "Failed to invalidate inode pages (%zd)\n", 2942 + ret); 2985 2943 ret = 0; /* XXX */ 2986 2944 } 2987 2945 ceph_calc_file_object_mapping(&src_ci->i_layout, src_off, ··· 3003 2959 * starting at the src_off 3004 2960 */ 3005 2961 if (src_objoff) { 3006 - dout("Initial partial copy of %u bytes\n", src_objlen); 2962 + doutc(cl, "Initial partial copy of %u bytes\n", src_objlen); 3007 2963 3008 2964 /* 3009 2965 * we need to temporarily drop all caps as we'll be calling ··· 3014 2970 &dst_off, src_objlen, flags); 3015 2971 /* Abort on short copies or on error */ 3016 2972 if (ret < (long)src_objlen) { 3017 - dout("Failed partial copy (%zd)\n", ret); 2973 + doutc(cl, "Failed partial copy (%zd)\n", ret); 3018 2974 goto out; 3019 2975 } 3020 2976 len -= ret; ··· 3036 2992 ret = bytes; 3037 2993 goto out_caps; 3038 2994 } 3039 - dout("Copied %zu bytes out of %zu\n", bytes, len); 2995 + doutc(cl, "Copied %zu bytes out of %zu\n", bytes, len); 3040 2996 len -= bytes; 3041 2997 ret += bytes; 3042 2998 ··· 3064 3020 * there were errors in remote object copies (len >= object_size). 3065 3021 */ 3066 3022 if (len && (len < src_ci->i_layout.object_size)) { 3067 - dout("Final partial copy of %zu bytes\n", len); 3023 + doutc(cl, "Final partial copy of %zu bytes\n", len); 3068 3024 bytes = do_splice_direct(src_file, &src_off, dst_file, 3069 3025 &dst_off, len, flags); 3070 3026 if (bytes > 0) 3071 3027 ret += bytes; 3072 3028 else 3073 - dout("Failed partial copy (%zd)\n", bytes); 3029 + doutc(cl, "Failed partial copy (%zd)\n", bytes); 3074 3030 } 3075 3031 3076 3032 out:
+282 -229
fs/ceph/inode.c
··· 129 129 struct inode *ceph_get_inode(struct super_block *sb, struct ceph_vino vino, 130 130 struct inode *newino) 131 131 { 132 + struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(sb); 133 + struct ceph_client *cl = mdsc->fsc->client; 132 134 struct inode *inode; 133 135 134 136 if (ceph_vino_is_reserved(vino)) ··· 147 145 } 148 146 149 147 if (!inode) { 150 - dout("No inode found for %llx.%llx\n", vino.ino, vino.snap); 148 + doutc(cl, "no inode found for %llx.%llx\n", vino.ino, vino.snap); 151 149 return ERR_PTR(-ENOMEM); 152 150 } 153 151 154 - dout("get_inode on %llu=%llx.%llx got %p new %d\n", ceph_present_inode(inode), 155 - ceph_vinop(inode), inode, !!(inode->i_state & I_NEW)); 152 + doutc(cl, "on %llx=%llx.%llx got %p new %d\n", 153 + ceph_present_inode(inode), ceph_vinop(inode), inode, 154 + !!(inode->i_state & I_NEW)); 156 155 return inode; 157 156 } 158 157 ··· 162 159 */ 163 160 struct inode *ceph_get_snapdir(struct inode *parent) 164 161 { 162 + struct ceph_client *cl = ceph_inode_to_client(parent); 165 163 struct ceph_vino vino = { 166 164 .ino = ceph_ino(parent), 167 165 .snap = CEPH_SNAPDIR, ··· 175 171 return inode; 176 172 177 173 if (!S_ISDIR(parent->i_mode)) { 178 - pr_warn_once("bad snapdir parent type (mode=0%o)\n", 179 - parent->i_mode); 174 + pr_warn_once_client(cl, "bad snapdir parent type (mode=0%o)\n", 175 + parent->i_mode); 180 176 goto err; 181 177 } 182 178 183 179 if (!(inode->i_state & I_NEW) && !S_ISDIR(inode->i_mode)) { 184 - pr_warn_once("bad snapdir inode type (mode=0%o)\n", 185 - inode->i_mode); 180 + pr_warn_once_client(cl, "bad snapdir inode type (mode=0%o)\n", 181 + inode->i_mode); 186 182 goto err; 187 183 } 188 184 ··· 207 203 inode->i_flags |= S_ENCRYPTED; 208 204 ci->fscrypt_auth_len = pci->fscrypt_auth_len; 209 205 } else { 210 - dout("Failed to alloc snapdir fscrypt_auth\n"); 206 + doutc(cl, "Failed to alloc snapdir fscrypt_auth\n"); 211 207 ret = -ENOMEM; 212 208 goto err; 213 209 } ··· 253 249 static struct ceph_inode_frag *__get_or_create_frag(struct ceph_inode_info *ci, 254 250 u32 f) 255 251 { 252 + struct inode *inode = &ci->netfs.inode; 253 + struct ceph_client *cl = ceph_inode_to_client(inode); 256 254 struct rb_node **p; 257 255 struct rb_node *parent = NULL; 258 256 struct ceph_inode_frag *frag; ··· 285 279 rb_link_node(&frag->node, parent, p); 286 280 rb_insert_color(&frag->node, &ci->i_fragtree); 287 281 288 - dout("get_or_create_frag added %llx.%llx frag %x\n", 289 - ceph_vinop(&ci->netfs.inode), f); 282 + doutc(cl, "added %p %llx.%llx frag %x\n", inode, ceph_vinop(inode), f); 290 283 return frag; 291 284 } 292 285 ··· 318 313 static u32 __ceph_choose_frag(struct ceph_inode_info *ci, u32 v, 319 314 struct ceph_inode_frag *pfrag, int *found) 320 315 { 316 + struct ceph_client *cl = ceph_inode_to_client(&ci->netfs.inode); 321 317 u32 t = ceph_frag_make(0, 0); 322 318 struct ceph_inode_frag *frag; 323 319 unsigned nway, i; ··· 342 336 343 337 /* choose child */ 344 338 nway = 1 << frag->split_by; 345 - dout("choose_frag(%x) %x splits by %d (%d ways)\n", v, t, 346 - frag->split_by, nway); 339 + doutc(cl, "frag(%x) %x splits by %d (%d ways)\n", v, t, 340 + frag->split_by, nway); 347 341 for (i = 0; i < nway; i++) { 348 342 n = ceph_frag_make_child(t, frag->split_by, i); 349 343 if (ceph_frag_contains_value(n, v)) { ··· 353 347 } 354 348 BUG_ON(i == nway); 355 349 } 356 - dout("choose_frag(%x) = %x\n", v, t); 350 + doutc(cl, "frag(%x) = %x\n", v, t); 357 351 358 352 return t; 359 353 } ··· 377 371 struct ceph_mds_reply_dirfrag *dirinfo) 378 372 { 379 373 struct ceph_inode_info *ci = ceph_inode(inode); 374 + struct ceph_client *cl = ceph_inode_to_client(inode); 380 375 struct ceph_inode_frag *frag; 381 376 u32 id = le32_to_cpu(dirinfo->frag); 382 377 int mds = le32_to_cpu(dirinfo->auth); ··· 402 395 goto out; 403 396 if (frag->split_by == 0) { 404 397 /* tree leaf, remove */ 405 - dout("fill_dirfrag removed %llx.%llx frag %x" 406 - " (no ref)\n", ceph_vinop(inode), id); 398 + doutc(cl, "removed %p %llx.%llx frag %x (no ref)\n", 399 + inode, ceph_vinop(inode), id); 407 400 rb_erase(&frag->node, &ci->i_fragtree); 408 401 kfree(frag); 409 402 } else { 410 403 /* tree branch, keep and clear */ 411 - dout("fill_dirfrag cleared %llx.%llx frag %x" 412 - " referral\n", ceph_vinop(inode), id); 404 + doutc(cl, "cleared %p %llx.%llx frag %x referral\n", 405 + inode, ceph_vinop(inode), id); 413 406 frag->mds = -1; 414 407 frag->ndist = 0; 415 408 } ··· 422 415 if (IS_ERR(frag)) { 423 416 /* this is not the end of the world; we can continue 424 417 with bad/inaccurate delegation info */ 425 - pr_err("fill_dirfrag ENOMEM on mds ref %llx.%llx fg %x\n", 426 - ceph_vinop(inode), le32_to_cpu(dirinfo->frag)); 418 + pr_err_client(cl, "ENOMEM on mds ref %p %llx.%llx fg %x\n", 419 + inode, ceph_vinop(inode), 420 + le32_to_cpu(dirinfo->frag)); 427 421 err = -ENOMEM; 428 422 goto out; 429 423 } ··· 433 425 frag->ndist = min_t(u32, ndist, CEPH_MAX_DIRFRAG_REP); 434 426 for (i = 0; i < frag->ndist; i++) 435 427 frag->dist[i] = le32_to_cpu(dirinfo->dist[i]); 436 - dout("fill_dirfrag %llx.%llx frag %x ndist=%d\n", 437 - ceph_vinop(inode), frag->frag, frag->ndist); 428 + doutc(cl, "%p %llx.%llx frag %x ndist=%d\n", inode, 429 + ceph_vinop(inode), frag->frag, frag->ndist); 438 430 439 431 out: 440 432 mutex_unlock(&ci->i_fragtree_mutex); ··· 462 454 struct ceph_frag_tree_head *fragtree, 463 455 struct ceph_mds_reply_dirfrag *dirinfo) 464 456 { 457 + struct ceph_client *cl = ceph_inode_to_client(inode); 465 458 struct ceph_inode_info *ci = ceph_inode(inode); 466 459 struct ceph_inode_frag *frag, *prev_frag = NULL; 467 460 struct rb_node *rb_node; ··· 498 489 frag_tree_split_cmp, NULL); 499 490 } 500 491 501 - dout("fill_fragtree %llx.%llx\n", ceph_vinop(inode)); 492 + doutc(cl, "%p %llx.%llx\n", inode, ceph_vinop(inode)); 502 493 rb_node = rb_first(&ci->i_fragtree); 503 494 for (i = 0; i < nsplits; i++) { 504 495 id = le32_to_cpu(fragtree->splits[i].frag); 505 496 split_by = le32_to_cpu(fragtree->splits[i].by); 506 497 if (split_by == 0 || ceph_frag_bits(id) + split_by > 24) { 507 - pr_err("fill_fragtree %llx.%llx invalid split %d/%u, " 508 - "frag %x split by %d\n", ceph_vinop(inode), 509 - i, nsplits, id, split_by); 498 + pr_err_client(cl, "%p %llx.%llx invalid split %d/%u, " 499 + "frag %x split by %d\n", inode, 500 + ceph_vinop(inode), i, nsplits, id, split_by); 510 501 continue; 511 502 } 512 503 frag = NULL; ··· 538 529 if (frag->split_by == 0) 539 530 ci->i_fragtree_nsplits++; 540 531 frag->split_by = split_by; 541 - dout(" frag %x split by %d\n", frag->frag, frag->split_by); 532 + doutc(cl, " frag %x split by %d\n", frag->frag, frag->split_by); 542 533 prev_frag = frag; 543 534 } 544 535 while (rb_node) { ··· 563 554 */ 564 555 struct inode *ceph_alloc_inode(struct super_block *sb) 565 556 { 557 + struct ceph_fs_client *fsc = ceph_sb_to_fs_client(sb); 566 558 struct ceph_inode_info *ci; 567 559 int i; 568 560 ··· 571 561 if (!ci) 572 562 return NULL; 573 563 574 - dout("alloc_inode %p\n", &ci->netfs.inode); 564 + doutc(fsc->client, "%p\n", &ci->netfs.inode); 575 565 576 566 /* Set parameters for the netfs library */ 577 567 netfs_inode_init(&ci->netfs, &ceph_netfs_ops); ··· 685 675 { 686 676 struct ceph_inode_info *ci = ceph_inode(inode); 687 677 struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(inode->i_sb); 678 + struct ceph_client *cl = ceph_inode_to_client(inode); 688 679 struct ceph_inode_frag *frag; 689 680 struct rb_node *n; 690 681 691 - dout("evict_inode %p ino %llx.%llx\n", inode, ceph_vinop(inode)); 682 + doutc(cl, "%p ino %llx.%llx\n", inode, ceph_vinop(inode)); 692 683 693 684 percpu_counter_dec(&mdsc->metric.total_inodes); 694 685 ··· 712 701 */ 713 702 if (ci->i_snap_realm) { 714 703 if (ceph_snap(inode) == CEPH_NOSNAP) { 715 - dout(" dropping residual ref to snap realm %p\n", 716 - ci->i_snap_realm); 704 + doutc(cl, " dropping residual ref to snap realm %p\n", 705 + ci->i_snap_realm); 717 706 ceph_change_snap_realm(inode, NULL); 718 707 } else { 719 708 ceph_put_snapid_map(mdsc, ci->i_snapid_map); ··· 754 743 int ceph_fill_file_size(struct inode *inode, int issued, 755 744 u32 truncate_seq, u64 truncate_size, u64 size) 756 745 { 746 + struct ceph_client *cl = ceph_inode_to_client(inode); 757 747 struct ceph_inode_info *ci = ceph_inode(inode); 758 748 int queue_trunc = 0; 759 749 loff_t isize = i_size_read(inode); 760 750 761 751 if (ceph_seq_cmp(truncate_seq, ci->i_truncate_seq) > 0 || 762 752 (truncate_seq == ci->i_truncate_seq && size > isize)) { 763 - dout("size %lld -> %llu\n", isize, size); 753 + doutc(cl, "size %lld -> %llu\n", isize, size); 764 754 if (size > 0 && S_ISDIR(inode->i_mode)) { 765 - pr_err("fill_file_size non-zero size for directory\n"); 755 + pr_err_client(cl, "non-zero size for directory\n"); 766 756 size = 0; 767 757 } 768 758 i_size_write(inode, size); ··· 776 764 ceph_fscache_update(inode); 777 765 ci->i_reported_size = size; 778 766 if (truncate_seq != ci->i_truncate_seq) { 779 - dout("%s truncate_seq %u -> %u\n", __func__, 780 - ci->i_truncate_seq, truncate_seq); 767 + doutc(cl, "truncate_seq %u -> %u\n", 768 + ci->i_truncate_seq, truncate_seq); 781 769 ci->i_truncate_seq = truncate_seq; 782 770 783 771 /* the MDS should have revoked these caps */ ··· 806 794 * anyway. 807 795 */ 808 796 if (ceph_seq_cmp(truncate_seq, ci->i_truncate_seq) >= 0) { 809 - dout("%s truncate_size %lld -> %llu, encrypted %d\n", __func__, 810 - ci->i_truncate_size, truncate_size, !!IS_ENCRYPTED(inode)); 797 + doutc(cl, "truncate_size %lld -> %llu, encrypted %d\n", 798 + ci->i_truncate_size, truncate_size, 799 + !!IS_ENCRYPTED(inode)); 811 800 812 801 ci->i_truncate_size = truncate_size; 813 802 814 803 if (IS_ENCRYPTED(inode)) { 815 - dout("%s truncate_pagecache_size %lld -> %llu\n", 816 - __func__, ci->i_truncate_pagecache_size, size); 804 + doutc(cl, "truncate_pagecache_size %lld -> %llu\n", 805 + ci->i_truncate_pagecache_size, size); 817 806 ci->i_truncate_pagecache_size = size; 818 807 } else { 819 808 ci->i_truncate_pagecache_size = truncate_size; ··· 827 814 u64 time_warp_seq, struct timespec64 *ctime, 828 815 struct timespec64 *mtime, struct timespec64 *atime) 829 816 { 817 + struct ceph_client *cl = ceph_inode_to_client(inode); 830 818 struct ceph_inode_info *ci = ceph_inode(inode); 831 819 struct timespec64 ictime = inode_get_ctime(inode); 832 820 int warn = 0; ··· 839 825 CEPH_CAP_XATTR_EXCL)) { 840 826 if (ci->i_version == 0 || 841 827 timespec64_compare(ctime, &ictime) > 0) { 842 - dout("ctime %lld.%09ld -> %lld.%09ld inc w/ cap\n", 828 + doutc(cl, "ctime %lld.%09ld -> %lld.%09ld inc w/ cap\n", 843 829 ictime.tv_sec, ictime.tv_nsec, 844 830 ctime->tv_sec, ctime->tv_nsec); 845 831 inode_set_ctime_to_ts(inode, *ctime); ··· 847 833 if (ci->i_version == 0 || 848 834 ceph_seq_cmp(time_warp_seq, ci->i_time_warp_seq) > 0) { 849 835 /* the MDS did a utimes() */ 850 - dout("mtime %lld.%09ld -> %lld.%09ld " 851 - "tw %d -> %d\n", 836 + doutc(cl, "mtime %lld.%09ld -> %lld.%09ld tw %d -> %d\n", 852 837 inode_get_mtime_sec(inode), 853 838 inode_get_mtime_nsec(inode), 854 839 mtime->tv_sec, mtime->tv_nsec, ··· 862 849 /* nobody did utimes(); take the max */ 863 850 ts = inode_get_mtime(inode); 864 851 if (timespec64_compare(mtime, &ts) > 0) { 865 - dout("mtime %lld.%09ld -> %lld.%09ld inc\n", 852 + doutc(cl, "mtime %lld.%09ld -> %lld.%09ld inc\n", 866 853 ts.tv_sec, ts.tv_nsec, 867 854 mtime->tv_sec, mtime->tv_nsec); 868 855 inode_set_mtime_to_ts(inode, *mtime); 869 856 } 870 857 ts = inode_get_atime(inode); 871 858 if (timespec64_compare(atime, &ts) > 0) { 872 - dout("atime %lld.%09ld -> %lld.%09ld inc\n", 859 + doutc(cl, "atime %lld.%09ld -> %lld.%09ld inc\n", 873 860 ts.tv_sec, ts.tv_nsec, 874 861 atime->tv_sec, atime->tv_nsec); 875 862 inode_set_atime_to_ts(inode, *atime); ··· 891 878 } 892 879 } 893 880 if (warn) /* time_warp_seq shouldn't go backwards */ 894 - dout("%p mds time_warp_seq %llu < %u\n", 895 - inode, time_warp_seq, ci->i_time_warp_seq); 881 + doutc(cl, "%p mds time_warp_seq %llu < %u\n", inode, 882 + time_warp_seq, ci->i_time_warp_seq); 896 883 } 897 884 898 885 #if IS_ENABLED(CONFIG_FS_ENCRYPTION) 899 - static int decode_encrypted_symlink(const char *encsym, int enclen, u8 **decsym) 886 + static int decode_encrypted_symlink(struct ceph_mds_client *mdsc, 887 + const char *encsym, 888 + int enclen, u8 **decsym) 900 889 { 890 + struct ceph_client *cl = mdsc->fsc->client; 901 891 int declen; 902 892 u8 *sym; 903 893 ··· 910 894 911 895 declen = ceph_base64_decode(encsym, enclen, sym); 912 896 if (declen < 0) { 913 - pr_err("%s: can't decode symlink (%d). Content: %.*s\n", 914 - __func__, declen, enclen, encsym); 897 + pr_err_client(cl, 898 + "can't decode symlink (%d). Content: %.*s\n", 899 + declen, enclen, encsym); 915 900 kfree(sym); 916 901 return -EIO; 917 902 } ··· 921 904 return declen; 922 905 } 923 906 #else 924 - static int decode_encrypted_symlink(const char *encsym, int symlen, u8 **decsym) 907 + static int decode_encrypted_symlink(struct ceph_mds_client *mdsc, 908 + const char *encsym, 909 + int symlen, u8 **decsym) 925 910 { 926 911 return -EOPNOTSUPP; 927 912 } ··· 940 921 struct ceph_cap_reservation *caps_reservation) 941 922 { 942 923 struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(inode->i_sb); 924 + struct ceph_client *cl = mdsc->fsc->client; 943 925 struct ceph_mds_reply_inode *info = iinfo->in; 944 926 struct ceph_inode_info *ci = ceph_inode(inode); 945 927 int issued, new_issued, info_caps; ··· 959 939 960 940 lockdep_assert_held(&mdsc->snap_rwsem); 961 941 962 - dout("%s %p ino %llx.%llx v %llu had %llu\n", __func__, 963 - inode, ceph_vinop(inode), le64_to_cpu(info->version), 964 - ci->i_version); 942 + doutc(cl, "%p ino %llx.%llx v %llu had %llu\n", inode, ceph_vinop(inode), 943 + le64_to_cpu(info->version), ci->i_version); 965 944 966 945 /* Once I_NEW is cleared, we can't change type or dev numbers */ 967 946 if (inode->i_state & I_NEW) { 968 947 inode->i_mode = mode; 969 948 } else { 970 949 if (inode_wrong_type(inode, mode)) { 971 - pr_warn_once("inode type changed! (ino %llx.%llx is 0%o, mds says 0%o)\n", 972 - ceph_vinop(inode), inode->i_mode, mode); 950 + pr_warn_once_client(cl, 951 + "inode type changed! (ino %llx.%llx is 0%o, mds says 0%o)\n", 952 + ceph_vinop(inode), inode->i_mode, mode); 973 953 return -ESTALE; 974 954 } 975 955 976 956 if ((S_ISCHR(mode) || S_ISBLK(mode)) && inode->i_rdev != rdev) { 977 - pr_warn_once("dev inode rdev changed! (ino %llx.%llx is %u:%u, mds says %u:%u)\n", 978 - ceph_vinop(inode), MAJOR(inode->i_rdev), 979 - MINOR(inode->i_rdev), MAJOR(rdev), 980 - MINOR(rdev)); 957 + pr_warn_once_client(cl, 958 + "dev inode rdev changed! (ino %llx.%llx is %u:%u, mds says %u:%u)\n", 959 + ceph_vinop(inode), MAJOR(inode->i_rdev), 960 + MINOR(inode->i_rdev), MAJOR(rdev), 961 + MINOR(rdev)); 981 962 return -ESTALE; 982 963 } 983 964 } ··· 1000 979 if (iinfo->xattr_len > 4) { 1001 980 xattr_blob = ceph_buffer_new(iinfo->xattr_len, GFP_NOFS); 1002 981 if (!xattr_blob) 1003 - pr_err("%s ENOMEM xattr blob %d bytes\n", __func__, 1004 - iinfo->xattr_len); 982 + pr_err_client(cl, "ENOMEM xattr blob %d bytes\n", 983 + iinfo->xattr_len); 1005 984 } 1006 985 1007 986 if (iinfo->pool_ns_len > 0) ··· 1055 1034 inode->i_mode = mode; 1056 1035 inode->i_uid = make_kuid(&init_user_ns, le32_to_cpu(info->uid)); 1057 1036 inode->i_gid = make_kgid(&init_user_ns, le32_to_cpu(info->gid)); 1058 - dout("%p mode 0%o uid.gid %d.%d\n", inode, inode->i_mode, 1059 - from_kuid(&init_user_ns, inode->i_uid), 1060 - from_kgid(&init_user_ns, inode->i_gid)); 1037 + doutc(cl, "%p %llx.%llx mode 0%o uid.gid %d.%d\n", inode, 1038 + ceph_vinop(inode), inode->i_mode, 1039 + from_kuid(&init_user_ns, inode->i_uid), 1040 + from_kgid(&init_user_ns, inode->i_gid)); 1061 1041 ceph_decode_timespec64(&ci->i_btime, &iinfo->btime); 1062 1042 ceph_decode_timespec64(&ci->i_snap_btime, &iinfo->snap_btime); 1063 1043 } ··· 1114 1092 if (size == round_up(fsize, CEPH_FSCRYPT_BLOCK_SIZE)) { 1115 1093 size = fsize; 1116 1094 } else { 1117 - pr_warn("fscrypt size mismatch: size=%llu fscrypt_file=%llu, discarding fscrypt_file size.\n", 1095 + pr_warn_client(cl, 1096 + "fscrypt size mismatch: size=%llu fscrypt_file=%llu, discarding fscrypt_file size.\n", 1118 1097 info->size, size); 1119 1098 } 1120 1099 } ··· 1127 1104 /* only update max_size on auth cap */ 1128 1105 if ((info->cap.flags & CEPH_CAP_FLAG_AUTH) && 1129 1106 ci->i_max_size != le64_to_cpu(info->max_size)) { 1130 - dout("max_size %lld -> %llu\n", ci->i_max_size, 1131 - le64_to_cpu(info->max_size)); 1107 + doutc(cl, "max_size %lld -> %llu\n", 1108 + ci->i_max_size, le64_to_cpu(info->max_size)); 1132 1109 ci->i_max_size = le64_to_cpu(info->max_size); 1133 1110 } 1134 1111 } ··· 1191 1168 1192 1169 if (IS_ENCRYPTED(inode)) { 1193 1170 if (symlen != i_size_read(inode)) 1194 - pr_err("%s %llx.%llx BAD symlink size %lld\n", 1195 - __func__, ceph_vinop(inode), 1171 + pr_err_client(cl, 1172 + "%p %llx.%llx BAD symlink size %lld\n", 1173 + inode, ceph_vinop(inode), 1196 1174 i_size_read(inode)); 1197 1175 1198 - err = decode_encrypted_symlink(iinfo->symlink, 1176 + err = decode_encrypted_symlink(mdsc, iinfo->symlink, 1199 1177 symlen, (u8 **)&sym); 1200 1178 if (err < 0) { 1201 - pr_err("%s decoding encrypted symlink failed: %d\n", 1202 - __func__, err); 1179 + pr_err_client(cl, 1180 + "decoding encrypted symlink failed: %d\n", 1181 + err); 1203 1182 goto out; 1204 1183 } 1205 1184 symlen = err; ··· 1209 1184 inode->i_blocks = calc_inode_blocks(symlen); 1210 1185 } else { 1211 1186 if (symlen != i_size_read(inode)) { 1212 - pr_err("%s %llx.%llx BAD symlink size %lld\n", 1213 - __func__, ceph_vinop(inode), 1187 + pr_err_client(cl, 1188 + "%p %llx.%llx BAD symlink size %lld\n", 1189 + inode, ceph_vinop(inode), 1214 1190 i_size_read(inode)); 1215 1191 i_size_write(inode, symlen); 1216 1192 inode->i_blocks = calc_inode_blocks(symlen); ··· 1246 1220 inode->i_fop = &ceph_dir_fops; 1247 1221 break; 1248 1222 default: 1249 - pr_err("%s %llx.%llx BAD mode 0%o\n", __func__, 1250 - ceph_vinop(inode), inode->i_mode); 1223 + pr_err_client(cl, "%p %llx.%llx BAD mode 0%o\n", inode, 1224 + ceph_vinop(inode), inode->i_mode); 1251 1225 } 1252 1226 1253 1227 /* were we issued a capability? */ ··· 1268 1242 (info_caps & CEPH_CAP_FILE_SHARED) && 1269 1243 (issued & CEPH_CAP_FILE_EXCL) == 0 && 1270 1244 !__ceph_dir_is_complete(ci)) { 1271 - dout(" marking %p complete (empty)\n", inode); 1245 + doutc(cl, " marking %p complete (empty)\n", 1246 + inode); 1272 1247 i_size_write(inode, 0); 1273 1248 __ceph_dir_set_complete(ci, 1274 1249 atomic64_read(&ci->i_release_count), ··· 1278 1251 1279 1252 wake = true; 1280 1253 } else { 1281 - dout(" %p got snap_caps %s\n", inode, 1282 - ceph_cap_string(info_caps)); 1254 + doutc(cl, " %p got snap_caps %s\n", inode, 1255 + ceph_cap_string(info_caps)); 1283 1256 ci->i_snap_caps |= info_caps; 1284 1257 } 1285 1258 } ··· 1295 1268 1296 1269 if (cap_fmode >= 0) { 1297 1270 if (!info_caps) 1298 - pr_warn("mds issued no caps on %llx.%llx\n", 1299 - ceph_vinop(inode)); 1271 + pr_warn_client(cl, "mds issued no caps on %llx.%llx\n", 1272 + ceph_vinop(inode)); 1300 1273 __ceph_touch_fmode(ci, mdsc, cap_fmode); 1301 1274 } 1302 1275 ··· 1342 1315 unsigned long from_time, 1343 1316 struct ceph_mds_session **old_lease_session) 1344 1317 { 1318 + struct ceph_client *cl = ceph_inode_to_client(dir); 1345 1319 struct ceph_dentry_info *di = ceph_dentry(dentry); 1346 1320 unsigned mask = le16_to_cpu(lease->mask); 1347 1321 long unsigned duration = le32_to_cpu(lease->duration_ms); 1348 1322 long unsigned ttl = from_time + (duration * HZ) / 1000; 1349 1323 long unsigned half_ttl = from_time + (duration * HZ / 2) / 1000; 1350 1324 1351 - dout("update_dentry_lease %p duration %lu ms ttl %lu\n", 1352 - dentry, duration, ttl); 1325 + doutc(cl, "%p duration %lu ms ttl %lu\n", dentry, duration, ttl); 1353 1326 1354 1327 /* only track leases on regular dentries */ 1355 1328 if (ceph_snap(dir) != CEPH_NOSNAP) ··· 1450 1423 */ 1451 1424 static int splice_dentry(struct dentry **pdn, struct inode *in) 1452 1425 { 1426 + struct ceph_client *cl = ceph_inode_to_client(in); 1453 1427 struct dentry *dn = *pdn; 1454 1428 struct dentry *realdn; 1455 1429 ··· 1482 1454 d_drop(dn); 1483 1455 realdn = d_splice_alias(in, dn); 1484 1456 if (IS_ERR(realdn)) { 1485 - pr_err("splice_dentry error %ld %p inode %p ino %llx.%llx\n", 1486 - PTR_ERR(realdn), dn, in, ceph_vinop(in)); 1457 + pr_err_client(cl, "error %ld %p inode %p ino %llx.%llx\n", 1458 + PTR_ERR(realdn), dn, in, ceph_vinop(in)); 1487 1459 return PTR_ERR(realdn); 1488 1460 } 1489 1461 1490 1462 if (realdn) { 1491 - dout("dn %p (%d) spliced with %p (%d) " 1492 - "inode %p ino %llx.%llx\n", 1493 - dn, d_count(dn), 1494 - realdn, d_count(realdn), 1495 - d_inode(realdn), ceph_vinop(d_inode(realdn))); 1463 + doutc(cl, "dn %p (%d) spliced with %p (%d) inode %p ino %llx.%llx\n", 1464 + dn, d_count(dn), realdn, d_count(realdn), 1465 + d_inode(realdn), ceph_vinop(d_inode(realdn))); 1496 1466 dput(dn); 1497 1467 *pdn = realdn; 1498 1468 } else { 1499 1469 BUG_ON(!ceph_dentry(dn)); 1500 - dout("dn %p attached to %p ino %llx.%llx\n", 1501 - dn, d_inode(dn), ceph_vinop(d_inode(dn))); 1470 + doutc(cl, "dn %p attached to %p ino %llx.%llx\n", dn, 1471 + d_inode(dn), ceph_vinop(d_inode(dn))); 1502 1472 } 1503 1473 return 0; 1504 1474 } ··· 1518 1492 struct ceph_mds_reply_info_parsed *rinfo = &req->r_reply_info; 1519 1493 struct inode *in = NULL; 1520 1494 struct ceph_vino tvino, dvino; 1521 - struct ceph_fs_client *fsc = ceph_sb_to_client(sb); 1495 + struct ceph_fs_client *fsc = ceph_sb_to_fs_client(sb); 1496 + struct ceph_client *cl = fsc->client; 1522 1497 int err = 0; 1523 1498 1524 - dout("fill_trace %p is_dentry %d is_target %d\n", req, 1525 - rinfo->head->is_dentry, rinfo->head->is_target); 1499 + doutc(cl, "%p is_dentry %d is_target %d\n", req, 1500 + rinfo->head->is_dentry, rinfo->head->is_target); 1526 1501 1527 1502 if (!rinfo->head->is_target && !rinfo->head->is_dentry) { 1528 - dout("fill_trace reply is empty!\n"); 1503 + doutc(cl, "reply is empty!\n"); 1529 1504 if (rinfo->head->result == 0 && req->r_parent) 1530 1505 ceph_invalidate_dir_request(req); 1531 1506 return 0; ··· 1583 1556 tvino.snap = le64_to_cpu(rinfo->targeti.in->snapid); 1584 1557 retry_lookup: 1585 1558 dn = d_lookup(parent, &dname); 1586 - dout("d_lookup on parent=%p name=%.*s got %p\n", 1587 - parent, dname.len, dname.name, dn); 1559 + doutc(cl, "d_lookup on parent=%p name=%.*s got %p\n", 1560 + parent, dname.len, dname.name, dn); 1588 1561 1589 1562 if (!dn) { 1590 1563 dn = d_alloc(parent, &dname); 1591 - dout("d_alloc %p '%.*s' = %p\n", parent, 1592 - dname.len, dname.name, dn); 1564 + doutc(cl, "d_alloc %p '%.*s' = %p\n", parent, 1565 + dname.len, dname.name, dn); 1593 1566 if (!dn) { 1594 1567 dput(parent); 1595 1568 ceph_fname_free_buffer(dir, &oname); ··· 1605 1578 } else if (d_really_is_positive(dn) && 1606 1579 (ceph_ino(d_inode(dn)) != tvino.ino || 1607 1580 ceph_snap(d_inode(dn)) != tvino.snap)) { 1608 - dout(" dn %p points to wrong inode %p\n", 1609 - dn, d_inode(dn)); 1581 + doutc(cl, " dn %p points to wrong inode %p\n", 1582 + dn, d_inode(dn)); 1610 1583 ceph_dir_clear_ordered(dir); 1611 1584 d_delete(dn); 1612 1585 dput(dn); ··· 1631 1604 rinfo->head->result == 0) ? req->r_fmode : -1, 1632 1605 &req->r_caps_reservation); 1633 1606 if (err < 0) { 1634 - pr_err("ceph_fill_inode badness %p %llx.%llx\n", 1635 - in, ceph_vinop(in)); 1607 + pr_err_client(cl, "badness %p %llx.%llx\n", in, 1608 + ceph_vinop(in)); 1636 1609 req->r_target_inode = NULL; 1637 1610 if (in->i_state & I_NEW) 1638 1611 discard_new_inode(in); ··· 1682 1655 have_lease = have_dir_cap || 1683 1656 le32_to_cpu(rinfo->dlease->duration_ms); 1684 1657 if (!have_lease) 1685 - dout("fill_trace no dentry lease or dir cap\n"); 1658 + doutc(cl, "no dentry lease or dir cap\n"); 1686 1659 1687 1660 /* rename? */ 1688 1661 if (req->r_old_dentry && req->r_op == CEPH_MDS_OP_RENAME) { 1689 1662 struct inode *olddir = req->r_old_dentry_dir; 1690 1663 BUG_ON(!olddir); 1691 1664 1692 - dout(" src %p '%pd' dst %p '%pd'\n", 1693 - req->r_old_dentry, 1694 - req->r_old_dentry, 1695 - dn, dn); 1696 - dout("fill_trace doing d_move %p -> %p\n", 1697 - req->r_old_dentry, dn); 1665 + doutc(cl, " src %p '%pd' dst %p '%pd'\n", 1666 + req->r_old_dentry, req->r_old_dentry, dn, dn); 1667 + doutc(cl, "doing d_move %p -> %p\n", req->r_old_dentry, dn); 1698 1668 1699 1669 /* d_move screws up sibling dentries' offsets */ 1700 1670 ceph_dir_clear_ordered(dir); 1701 1671 ceph_dir_clear_ordered(olddir); 1702 1672 1703 1673 d_move(req->r_old_dentry, dn); 1704 - dout(" src %p '%pd' dst %p '%pd'\n", 1705 - req->r_old_dentry, 1706 - req->r_old_dentry, 1707 - dn, dn); 1674 + doutc(cl, " src %p '%pd' dst %p '%pd'\n", 1675 + req->r_old_dentry, req->r_old_dentry, dn, dn); 1708 1676 1709 1677 /* ensure target dentry is invalidated, despite 1710 1678 rehashing bug in vfs_rename_dir */ 1711 1679 ceph_invalidate_dentry_lease(dn); 1712 1680 1713 - dout("dn %p gets new offset %lld\n", req->r_old_dentry, 1714 - ceph_dentry(req->r_old_dentry)->offset); 1681 + doutc(cl, "dn %p gets new offset %lld\n", 1682 + req->r_old_dentry, 1683 + ceph_dentry(req->r_old_dentry)->offset); 1715 1684 1716 1685 /* swap r_dentry and r_old_dentry in case that 1717 1686 * splice_dentry() gets called later. This is safe ··· 1719 1696 1720 1697 /* null dentry? */ 1721 1698 if (!rinfo->head->is_target) { 1722 - dout("fill_trace null dentry\n"); 1699 + doutc(cl, "null dentry\n"); 1723 1700 if (d_really_is_positive(dn)) { 1724 - dout("d_delete %p\n", dn); 1701 + doutc(cl, "d_delete %p\n", dn); 1725 1702 ceph_dir_clear_ordered(dir); 1726 1703 d_delete(dn); 1727 1704 } else if (have_lease) { ··· 1745 1722 goto done; 1746 1723 dn = req->r_dentry; /* may have spliced */ 1747 1724 } else if (d_really_is_positive(dn) && d_inode(dn) != in) { 1748 - dout(" %p links to %p %llx.%llx, not %llx.%llx\n", 1749 - dn, d_inode(dn), ceph_vinop(d_inode(dn)), 1750 - ceph_vinop(in)); 1725 + doutc(cl, " %p links to %p %llx.%llx, not %llx.%llx\n", 1726 + dn, d_inode(dn), ceph_vinop(d_inode(dn)), 1727 + ceph_vinop(in)); 1751 1728 d_invalidate(dn); 1752 1729 have_lease = false; 1753 1730 } ··· 1757 1734 rinfo->dlease, session, 1758 1735 req->r_request_started); 1759 1736 } 1760 - dout(" final dn %p\n", dn); 1737 + doutc(cl, " final dn %p\n", dn); 1761 1738 } else if ((req->r_op == CEPH_MDS_OP_LOOKUPSNAP || 1762 1739 req->r_op == CEPH_MDS_OP_MKSNAP) && 1763 1740 test_bit(CEPH_MDS_R_PARENT_LOCKED, &req->r_req_flags) && ··· 1768 1745 BUG_ON(!dir); 1769 1746 BUG_ON(ceph_snap(dir) != CEPH_SNAPDIR); 1770 1747 BUG_ON(!req->r_dentry); 1771 - dout(" linking snapped dir %p to dn %p\n", in, req->r_dentry); 1748 + doutc(cl, " linking snapped dir %p to dn %p\n", in, 1749 + req->r_dentry); 1772 1750 ceph_dir_clear_ordered(dir); 1773 1751 ihold(in); 1774 1752 err = splice_dentry(&req->r_dentry, in); ··· 1791 1767 &dvino, ptvino); 1792 1768 } 1793 1769 done: 1794 - dout("fill_trace done err=%d\n", err); 1770 + doutc(cl, "done err=%d\n", err); 1795 1771 return err; 1796 1772 } 1797 1773 ··· 1802 1778 struct ceph_mds_session *session) 1803 1779 { 1804 1780 struct ceph_mds_reply_info_parsed *rinfo = &req->r_reply_info; 1781 + struct ceph_client *cl = session->s_mdsc->fsc->client; 1805 1782 int i, err = 0; 1806 1783 1807 1784 for (i = 0; i < rinfo->dir_nr; i++) { ··· 1817 1792 in = ceph_get_inode(req->r_dentry->d_sb, vino, NULL); 1818 1793 if (IS_ERR(in)) { 1819 1794 err = PTR_ERR(in); 1820 - dout("new_inode badness got %d\n", err); 1795 + doutc(cl, "badness got %d\n", err); 1821 1796 continue; 1822 1797 } 1823 1798 rc = ceph_fill_inode(in, NULL, &rde->inode, NULL, session, 1824 1799 -1, &req->r_caps_reservation); 1825 1800 if (rc < 0) { 1826 - pr_err("ceph_fill_inode badness on %p got %d\n", 1827 - in, rc); 1801 + pr_err_client(cl, "inode badness on %p got %d\n", in, 1802 + rc); 1828 1803 err = rc; 1829 1804 if (in->i_state & I_NEW) { 1830 1805 ihold(in); ··· 1853 1828 struct ceph_readdir_cache_control *ctl, 1854 1829 struct ceph_mds_request *req) 1855 1830 { 1831 + struct ceph_client *cl = ceph_inode_to_client(dir); 1856 1832 struct ceph_inode_info *ci = ceph_inode(dir); 1857 1833 unsigned nsize = PAGE_SIZE / sizeof(struct dentry*); 1858 1834 unsigned idx = ctl->index % nsize; ··· 1879 1853 1880 1854 if (req->r_dir_release_cnt == atomic64_read(&ci->i_release_count) && 1881 1855 req->r_dir_ordered_cnt == atomic64_read(&ci->i_ordered_count)) { 1882 - dout("readdir cache dn %p idx %d\n", dn, ctl->index); 1856 + doutc(cl, "dn %p idx %d\n", dn, ctl->index); 1883 1857 ctl->dentries[idx] = dn; 1884 1858 ctl->index++; 1885 1859 } else { 1886 - dout("disable readdir cache\n"); 1860 + doutc(cl, "disable readdir cache\n"); 1887 1861 ctl->index = -1; 1888 1862 } 1889 1863 return 0; ··· 1896 1870 struct inode *inode = d_inode(parent); 1897 1871 struct ceph_inode_info *ci = ceph_inode(inode); 1898 1872 struct ceph_mds_reply_info_parsed *rinfo = &req->r_reply_info; 1873 + struct ceph_client *cl = session->s_mdsc->fsc->client; 1899 1874 struct qstr dname; 1900 1875 struct dentry *dn; 1901 1876 struct inode *in; ··· 1924 1897 1925 1898 if (rinfo->dir_dir && 1926 1899 le32_to_cpu(rinfo->dir_dir->frag) != frag) { 1927 - dout("readdir_prepopulate got new frag %x -> %x\n", 1928 - frag, le32_to_cpu(rinfo->dir_dir->frag)); 1900 + doutc(cl, "got new frag %x -> %x\n", frag, 1901 + le32_to_cpu(rinfo->dir_dir->frag)); 1929 1902 frag = le32_to_cpu(rinfo->dir_dir->frag); 1930 1903 if (!rinfo->hash_order) 1931 1904 req->r_readdir_offset = 2; 1932 1905 } 1933 1906 1934 1907 if (le32_to_cpu(rinfo->head->op) == CEPH_MDS_OP_LSSNAP) { 1935 - dout("readdir_prepopulate %d items under SNAPDIR dn %p\n", 1936 - rinfo->dir_nr, parent); 1908 + doutc(cl, "%d items under SNAPDIR dn %p\n", 1909 + rinfo->dir_nr, parent); 1937 1910 } else { 1938 - dout("readdir_prepopulate %d items under dn %p\n", 1939 - rinfo->dir_nr, parent); 1911 + doutc(cl, "%d items under dn %p\n", rinfo->dir_nr, parent); 1940 1912 if (rinfo->dir_dir) 1941 1913 ceph_fill_dirfrag(d_inode(parent), rinfo->dir_dir); 1942 1914 ··· 1979 1953 1980 1954 retry_lookup: 1981 1955 dn = d_lookup(parent, &dname); 1982 - dout("d_lookup on parent=%p name=%.*s got %p\n", 1983 - parent, dname.len, dname.name, dn); 1956 + doutc(cl, "d_lookup on parent=%p name=%.*s got %p\n", 1957 + parent, dname.len, dname.name, dn); 1984 1958 1985 1959 if (!dn) { 1986 1960 dn = d_alloc(parent, &dname); 1987 - dout("d_alloc %p '%.*s' = %p\n", parent, 1988 - dname.len, dname.name, dn); 1961 + doutc(cl, "d_alloc %p '%.*s' = %p\n", parent, 1962 + dname.len, dname.name, dn); 1989 1963 if (!dn) { 1990 - dout("d_alloc badness\n"); 1964 + doutc(cl, "d_alloc badness\n"); 1991 1965 err = -ENOMEM; 1992 1966 goto out; 1993 1967 } ··· 2000 1974 (ceph_ino(d_inode(dn)) != tvino.ino || 2001 1975 ceph_snap(d_inode(dn)) != tvino.snap)) { 2002 1976 struct ceph_dentry_info *di = ceph_dentry(dn); 2003 - dout(" dn %p points to wrong inode %p\n", 2004 - dn, d_inode(dn)); 1977 + doutc(cl, " dn %p points to wrong inode %p\n", 1978 + dn, d_inode(dn)); 2005 1979 2006 1980 spin_lock(&dn->d_lock); 2007 1981 if (di->offset > 0 && ··· 2023 1997 } else { 2024 1998 in = ceph_get_inode(parent->d_sb, tvino, NULL); 2025 1999 if (IS_ERR(in)) { 2026 - dout("new_inode badness\n"); 2000 + doutc(cl, "new_inode badness\n"); 2027 2001 d_drop(dn); 2028 2002 dput(dn); 2029 2003 err = PTR_ERR(in); ··· 2034 2008 ret = ceph_fill_inode(in, NULL, &rde->inode, NULL, session, 2035 2009 -1, &req->r_caps_reservation); 2036 2010 if (ret < 0) { 2037 - pr_err("ceph_fill_inode badness on %p\n", in); 2011 + pr_err_client(cl, "badness on %p %llx.%llx\n", in, 2012 + ceph_vinop(in)); 2038 2013 if (d_really_is_negative(dn)) { 2039 2014 if (in->i_state & I_NEW) { 2040 2015 ihold(in); ··· 2052 2025 2053 2026 if (d_really_is_negative(dn)) { 2054 2027 if (ceph_security_xattr_deadlock(in)) { 2055 - dout(" skip splicing dn %p to inode %p" 2056 - " (security xattr deadlock)\n", dn, in); 2028 + doutc(cl, " skip splicing dn %p to inode %p" 2029 + " (security xattr deadlock)\n", dn, in); 2057 2030 iput(in); 2058 2031 skipped++; 2059 2032 goto next_item; ··· 2085 2058 req->r_readdir_cache_idx = cache_ctl.index; 2086 2059 } 2087 2060 ceph_readdir_cache_release(&cache_ctl); 2088 - dout("readdir_prepopulate done\n"); 2061 + doutc(cl, "done\n"); 2089 2062 return err; 2090 2063 } 2091 2064 2092 2065 bool ceph_inode_set_size(struct inode *inode, loff_t size) 2093 2066 { 2067 + struct ceph_client *cl = ceph_inode_to_client(inode); 2094 2068 struct ceph_inode_info *ci = ceph_inode(inode); 2095 2069 bool ret; 2096 2070 2097 2071 spin_lock(&ci->i_ceph_lock); 2098 - dout("set_size %p %llu -> %llu\n", inode, i_size_read(inode), size); 2072 + doutc(cl, "set_size %p %llu -> %llu\n", inode, i_size_read(inode), size); 2099 2073 i_size_write(inode, size); 2100 2074 ceph_fscache_update(inode); 2101 2075 inode->i_blocks = calc_inode_blocks(size); ··· 2110 2082 2111 2083 void ceph_queue_inode_work(struct inode *inode, int work_bit) 2112 2084 { 2113 - struct ceph_fs_client *fsc = ceph_inode_to_client(inode); 2085 + struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode); 2086 + struct ceph_client *cl = fsc->client; 2114 2087 struct ceph_inode_info *ci = ceph_inode(inode); 2115 2088 set_bit(work_bit, &ci->i_work_mask); 2116 2089 2117 2090 ihold(inode); 2118 2091 if (queue_work(fsc->inode_wq, &ci->i_work)) { 2119 - dout("queue_inode_work %p, mask=%lx\n", inode, ci->i_work_mask); 2092 + doutc(cl, "%p %llx.%llx mask=%lx\n", inode, 2093 + ceph_vinop(inode), ci->i_work_mask); 2120 2094 } else { 2121 - dout("queue_inode_work %p already queued, mask=%lx\n", 2122 - inode, ci->i_work_mask); 2095 + doutc(cl, "%p %llx.%llx already queued, mask=%lx\n", 2096 + inode, ceph_vinop(inode), ci->i_work_mask); 2123 2097 iput(inode); 2124 2098 } 2125 2099 } 2126 2100 2127 2101 static void ceph_do_invalidate_pages(struct inode *inode) 2128 2102 { 2103 + struct ceph_client *cl = ceph_inode_to_client(inode); 2129 2104 struct ceph_inode_info *ci = ceph_inode(inode); 2130 2105 u32 orig_gen; 2131 2106 int check = 0; ··· 2138 2107 mutex_lock(&ci->i_truncate_mutex); 2139 2108 2140 2109 if (ceph_inode_is_shutdown(inode)) { 2141 - pr_warn_ratelimited("%s: inode %llx.%llx is shut down\n", 2142 - __func__, ceph_vinop(inode)); 2110 + pr_warn_ratelimited_client(cl, 2111 + "%p %llx.%llx is shut down\n", inode, 2112 + ceph_vinop(inode)); 2143 2113 mapping_set_error(inode->i_mapping, -EIO); 2144 2114 truncate_pagecache(inode, 0); 2145 2115 mutex_unlock(&ci->i_truncate_mutex); ··· 2148 2116 } 2149 2117 2150 2118 spin_lock(&ci->i_ceph_lock); 2151 - dout("invalidate_pages %p gen %d revoking %d\n", inode, 2152 - ci->i_rdcache_gen, ci->i_rdcache_revoking); 2119 + doutc(cl, "%p %llx.%llx gen %d revoking %d\n", inode, 2120 + ceph_vinop(inode), ci->i_rdcache_gen, ci->i_rdcache_revoking); 2153 2121 if (ci->i_rdcache_revoking != ci->i_rdcache_gen) { 2154 2122 if (__ceph_caps_revoking_other(ci, NULL, CEPH_CAP_FILE_CACHE)) 2155 2123 check = 1; ··· 2161 2129 spin_unlock(&ci->i_ceph_lock); 2162 2130 2163 2131 if (invalidate_inode_pages2(inode->i_mapping) < 0) { 2164 - pr_err("invalidate_inode_pages2 %llx.%llx failed\n", 2165 - ceph_vinop(inode)); 2132 + pr_err_client(cl, "invalidate_inode_pages2 %llx.%llx failed\n", 2133 + ceph_vinop(inode)); 2166 2134 } 2167 2135 2168 2136 spin_lock(&ci->i_ceph_lock); 2169 2137 if (orig_gen == ci->i_rdcache_gen && 2170 2138 orig_gen == ci->i_rdcache_revoking) { 2171 - dout("invalidate_pages %p gen %d successful\n", inode, 2172 - ci->i_rdcache_gen); 2139 + doutc(cl, "%p %llx.%llx gen %d successful\n", inode, 2140 + ceph_vinop(inode), ci->i_rdcache_gen); 2173 2141 ci->i_rdcache_revoking--; 2174 2142 check = 1; 2175 2143 } else { 2176 - dout("invalidate_pages %p gen %d raced, now %d revoking %d\n", 2177 - inode, orig_gen, ci->i_rdcache_gen, 2178 - ci->i_rdcache_revoking); 2144 + doutc(cl, "%p %llx.%llx gen %d raced, now %d revoking %d\n", 2145 + inode, ceph_vinop(inode), orig_gen, ci->i_rdcache_gen, 2146 + ci->i_rdcache_revoking); 2179 2147 if (__ceph_caps_revoking_other(ci, NULL, CEPH_CAP_FILE_CACHE)) 2180 2148 check = 1; 2181 2149 } ··· 2192 2160 */ 2193 2161 void __ceph_do_pending_vmtruncate(struct inode *inode) 2194 2162 { 2163 + struct ceph_client *cl = ceph_inode_to_client(inode); 2195 2164 struct ceph_inode_info *ci = ceph_inode(inode); 2196 2165 u64 to; 2197 2166 int wrbuffer_refs, finish = 0; ··· 2201 2168 retry: 2202 2169 spin_lock(&ci->i_ceph_lock); 2203 2170 if (ci->i_truncate_pending == 0) { 2204 - dout("%s %p none pending\n", __func__, inode); 2171 + doutc(cl, "%p %llx.%llx none pending\n", inode, 2172 + ceph_vinop(inode)); 2205 2173 spin_unlock(&ci->i_ceph_lock); 2206 2174 mutex_unlock(&ci->i_truncate_mutex); 2207 2175 return; ··· 2214 2180 */ 2215 2181 if (ci->i_wrbuffer_ref_head < ci->i_wrbuffer_ref) { 2216 2182 spin_unlock(&ci->i_ceph_lock); 2217 - dout("%s %p flushing snaps first\n", __func__, inode); 2183 + doutc(cl, "%p %llx.%llx flushing snaps first\n", inode, 2184 + ceph_vinop(inode)); 2218 2185 filemap_write_and_wait_range(&inode->i_data, 0, 2219 2186 inode->i_sb->s_maxbytes); 2220 2187 goto retry; ··· 2226 2191 2227 2192 to = ci->i_truncate_pagecache_size; 2228 2193 wrbuffer_refs = ci->i_wrbuffer_ref; 2229 - dout("%s %p (%d) to %lld\n", __func__, inode, 2230 - ci->i_truncate_pending, to); 2194 + doutc(cl, "%p %llx.%llx (%d) to %lld\n", inode, ceph_vinop(inode), 2195 + ci->i_truncate_pending, to); 2231 2196 spin_unlock(&ci->i_ceph_lock); 2232 2197 2233 2198 ceph_fscache_resize(inode, to); ··· 2255 2220 struct ceph_inode_info *ci = container_of(work, struct ceph_inode_info, 2256 2221 i_work); 2257 2222 struct inode *inode = &ci->netfs.inode; 2223 + struct ceph_client *cl = ceph_inode_to_client(inode); 2258 2224 2259 2225 if (test_and_clear_bit(CEPH_I_WORK_WRITEBACK, &ci->i_work_mask)) { 2260 - dout("writeback %p\n", inode); 2226 + doutc(cl, "writeback %p %llx.%llx\n", inode, ceph_vinop(inode)); 2261 2227 filemap_fdatawrite(&inode->i_data); 2262 2228 } 2263 2229 if (test_and_clear_bit(CEPH_I_WORK_INVALIDATE_PAGES, &ci->i_work_mask)) ··· 2330 2294 struct ceph_mds_request *req, 2331 2295 struct iattr *attr) 2332 2296 { 2297 + struct ceph_client *cl = ceph_inode_to_client(inode); 2333 2298 struct ceph_inode_info *ci = ceph_inode(inode); 2334 2299 int boff = attr->ia_size % CEPH_FSCRYPT_BLOCK_SIZE; 2335 2300 loff_t pos, orig_pos = round_down(attr->ia_size, ··· 2353 2316 2354 2317 issued = __ceph_caps_issued(ci, NULL); 2355 2318 2356 - dout("%s size %lld -> %lld got cap refs on %s, issued %s\n", __func__, 2357 - i_size, attr->ia_size, ceph_cap_string(got), 2358 - ceph_cap_string(issued)); 2319 + doutc(cl, "size %lld -> %lld got cap refs on %s, issued %s\n", 2320 + i_size, attr->ia_size, ceph_cap_string(got), 2321 + ceph_cap_string(issued)); 2359 2322 2360 2323 /* Try to writeback the dirty pagecaches */ 2361 2324 if (issued & (CEPH_CAP_FILE_BUFFER)) { ··· 2410 2373 * If the Rados object doesn't exist, it will be set to 0. 2411 2374 */ 2412 2375 if (!objver) { 2413 - dout("%s hit hole, ppos %lld < size %lld\n", __func__, 2414 - pos, i_size); 2376 + doutc(cl, "hit hole, ppos %lld < size %lld\n", pos, i_size); 2415 2377 2416 2378 header.data_len = cpu_to_le32(8 + 8 + 4); 2417 2379 header.file_offset = 0; ··· 2419 2383 header.data_len = cpu_to_le32(8 + 8 + 4 + CEPH_FSCRYPT_BLOCK_SIZE); 2420 2384 header.file_offset = cpu_to_le64(orig_pos); 2421 2385 2422 - dout("%s encrypt block boff/bsize %d/%lu\n", __func__, 2423 - boff, CEPH_FSCRYPT_BLOCK_SIZE); 2386 + doutc(cl, "encrypt block boff/bsize %d/%lu\n", boff, 2387 + CEPH_FSCRYPT_BLOCK_SIZE); 2424 2388 2425 2389 /* truncate and zero out the extra contents for the last block */ 2426 2390 memset(iov.iov_base + boff, 0, PAGE_SIZE - boff); ··· 2448 2412 } 2449 2413 req->r_pagelist = pagelist; 2450 2414 out: 2451 - dout("%s %p size dropping cap refs on %s\n", __func__, 2452 - inode, ceph_cap_string(got)); 2415 + doutc(cl, "%p %llx.%llx size dropping cap refs on %s\n", inode, 2416 + ceph_vinop(inode), ceph_cap_string(got)); 2453 2417 ceph_put_cap_refs(ci, got); 2454 2418 if (iov.iov_base) 2455 2419 kunmap_local(iov.iov_base); ··· 2460 2424 return ret; 2461 2425 } 2462 2426 2463 - int __ceph_setattr(struct inode *inode, struct iattr *attr, 2464 - struct ceph_iattr *cia) 2427 + int __ceph_setattr(struct mnt_idmap *idmap, struct inode *inode, 2428 + struct iattr *attr, struct ceph_iattr *cia) 2465 2429 { 2466 2430 struct ceph_inode_info *ci = ceph_inode(inode); 2467 2431 unsigned int ia_valid = attr->ia_valid; 2468 2432 struct ceph_mds_request *req; 2469 - struct ceph_mds_client *mdsc = ceph_sb_to_client(inode->i_sb)->mdsc; 2433 + struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(inode->i_sb)->mdsc; 2434 + struct ceph_client *cl = ceph_inode_to_client(inode); 2470 2435 struct ceph_cap_flush *prealloc_cf; 2471 2436 loff_t isize = i_size_read(inode); 2472 2437 int issued; ··· 2506 2469 } 2507 2470 } 2508 2471 2509 - dout("setattr %p issued %s\n", inode, ceph_cap_string(issued)); 2472 + doutc(cl, "%p %llx.%llx issued %s\n", inode, ceph_vinop(inode), 2473 + ceph_cap_string(issued)); 2510 2474 #if IS_ENABLED(CONFIG_FS_ENCRYPTION) 2511 2475 if (cia && cia->fscrypt_auth) { 2512 2476 u32 len = ceph_fscrypt_auth_len(cia->fscrypt_auth); ··· 2518 2480 goto out; 2519 2481 } 2520 2482 2521 - dout("setattr %llx:%llx fscrypt_auth len %u to %u)\n", 2522 - ceph_vinop(inode), ci->fscrypt_auth_len, len); 2483 + doutc(cl, "%p %llx.%llx fscrypt_auth len %u to %u)\n", inode, 2484 + ceph_vinop(inode), ci->fscrypt_auth_len, len); 2523 2485 2524 2486 /* It should never be re-set once set */ 2525 2487 WARN_ON_ONCE(ci->fscrypt_auth); ··· 2547 2509 #endif /* CONFIG_FS_ENCRYPTION */ 2548 2510 2549 2511 if (ia_valid & ATTR_UID) { 2550 - dout("setattr %p uid %d -> %d\n", inode, 2551 - from_kuid(&init_user_ns, inode->i_uid), 2552 - from_kuid(&init_user_ns, attr->ia_uid)); 2512 + kuid_t fsuid = from_vfsuid(idmap, i_user_ns(inode), attr->ia_vfsuid); 2513 + 2514 + doutc(cl, "%p %llx.%llx uid %d -> %d\n", inode, 2515 + ceph_vinop(inode), 2516 + from_kuid(&init_user_ns, inode->i_uid), 2517 + from_kuid(&init_user_ns, attr->ia_uid)); 2553 2518 if (issued & CEPH_CAP_AUTH_EXCL) { 2554 - inode->i_uid = attr->ia_uid; 2519 + inode->i_uid = fsuid; 2555 2520 dirtied |= CEPH_CAP_AUTH_EXCL; 2556 2521 } else if ((issued & CEPH_CAP_AUTH_SHARED) == 0 || 2557 - !uid_eq(attr->ia_uid, inode->i_uid)) { 2522 + !uid_eq(fsuid, inode->i_uid)) { 2558 2523 req->r_args.setattr.uid = cpu_to_le32( 2559 - from_kuid(&init_user_ns, attr->ia_uid)); 2524 + from_kuid(&init_user_ns, fsuid)); 2560 2525 mask |= CEPH_SETATTR_UID; 2561 2526 release |= CEPH_CAP_AUTH_SHARED; 2562 2527 } 2563 2528 } 2564 2529 if (ia_valid & ATTR_GID) { 2565 - dout("setattr %p gid %d -> %d\n", inode, 2566 - from_kgid(&init_user_ns, inode->i_gid), 2567 - from_kgid(&init_user_ns, attr->ia_gid)); 2530 + kgid_t fsgid = from_vfsgid(idmap, i_user_ns(inode), attr->ia_vfsgid); 2531 + 2532 + doutc(cl, "%p %llx.%llx gid %d -> %d\n", inode, 2533 + ceph_vinop(inode), 2534 + from_kgid(&init_user_ns, inode->i_gid), 2535 + from_kgid(&init_user_ns, attr->ia_gid)); 2568 2536 if (issued & CEPH_CAP_AUTH_EXCL) { 2569 - inode->i_gid = attr->ia_gid; 2537 + inode->i_gid = fsgid; 2570 2538 dirtied |= CEPH_CAP_AUTH_EXCL; 2571 2539 } else if ((issued & CEPH_CAP_AUTH_SHARED) == 0 || 2572 - !gid_eq(attr->ia_gid, inode->i_gid)) { 2540 + !gid_eq(fsgid, inode->i_gid)) { 2573 2541 req->r_args.setattr.gid = cpu_to_le32( 2574 - from_kgid(&init_user_ns, attr->ia_gid)); 2542 + from_kgid(&init_user_ns, fsgid)); 2575 2543 mask |= CEPH_SETATTR_GID; 2576 2544 release |= CEPH_CAP_AUTH_SHARED; 2577 2545 } 2578 2546 } 2579 2547 if (ia_valid & ATTR_MODE) { 2580 - dout("setattr %p mode 0%o -> 0%o\n", inode, inode->i_mode, 2581 - attr->ia_mode); 2548 + doutc(cl, "%p %llx.%llx mode 0%o -> 0%o\n", inode, 2549 + ceph_vinop(inode), inode->i_mode, attr->ia_mode); 2582 2550 if (issued & CEPH_CAP_AUTH_EXCL) { 2583 2551 inode->i_mode = attr->ia_mode; 2584 2552 dirtied |= CEPH_CAP_AUTH_EXCL; ··· 2600 2556 if (ia_valid & ATTR_ATIME) { 2601 2557 struct timespec64 atime = inode_get_atime(inode); 2602 2558 2603 - dout("setattr %p atime %lld.%ld -> %lld.%ld\n", inode, 2604 - atime.tv_sec, atime.tv_nsec, 2605 - attr->ia_atime.tv_sec, attr->ia_atime.tv_nsec); 2559 + doutc(cl, "%p %llx.%llx atime %lld.%09ld -> %lld.%09ld\n", 2560 + inode, ceph_vinop(inode), 2561 + atime.tv_sec, atime.tv_nsec, 2562 + attr->ia_atime.tv_sec, attr->ia_atime.tv_nsec); 2606 2563 if (issued & CEPH_CAP_FILE_EXCL) { 2607 2564 ci->i_time_warp_seq++; 2608 2565 inode_set_atime_to_ts(inode, attr->ia_atime); ··· 2623 2578 } 2624 2579 } 2625 2580 if (ia_valid & ATTR_SIZE) { 2626 - dout("setattr %p size %lld -> %lld\n", inode, isize, attr->ia_size); 2581 + doutc(cl, "%p %llx.%llx size %lld -> %lld\n", inode, 2582 + ceph_vinop(inode), isize, attr->ia_size); 2627 2583 /* 2628 2584 * Only when the new size is smaller and not aligned to 2629 2585 * CEPH_FSCRYPT_BLOCK_SIZE will the RMW is needed. ··· 2677 2631 if (ia_valid & ATTR_MTIME) { 2678 2632 struct timespec64 mtime = inode_get_mtime(inode); 2679 2633 2680 - dout("setattr %p mtime %lld.%ld -> %lld.%ld\n", inode, 2681 - mtime.tv_sec, mtime.tv_nsec, 2682 - attr->ia_mtime.tv_sec, attr->ia_mtime.tv_nsec); 2634 + doutc(cl, "%p %llx.%llx mtime %lld.%09ld -> %lld.%09ld\n", 2635 + inode, ceph_vinop(inode), 2636 + mtime.tv_sec, mtime.tv_nsec, 2637 + attr->ia_mtime.tv_sec, attr->ia_mtime.tv_nsec); 2683 2638 if (issued & CEPH_CAP_FILE_EXCL) { 2684 2639 ci->i_time_warp_seq++; 2685 2640 inode_set_mtime_to_ts(inode, attr->ia_mtime); ··· 2703 2656 if (ia_valid & ATTR_CTIME) { 2704 2657 bool only = (ia_valid & (ATTR_SIZE|ATTR_MTIME|ATTR_ATIME| 2705 2658 ATTR_MODE|ATTR_UID|ATTR_GID)) == 0; 2706 - dout("setattr %p ctime %lld.%ld -> %lld.%ld (%s)\n", inode, 2707 - inode_get_ctime_sec(inode), 2708 - inode_get_ctime_nsec(inode), 2709 - attr->ia_ctime.tv_sec, attr->ia_ctime.tv_nsec, 2710 - only ? "ctime only" : "ignored"); 2659 + doutc(cl, "%p %llx.%llx ctime %lld.%09ld -> %lld.%09ld (%s)\n", 2660 + inode, ceph_vinop(inode), 2661 + inode_get_ctime_sec(inode), 2662 + inode_get_ctime_nsec(inode), 2663 + attr->ia_ctime.tv_sec, attr->ia_ctime.tv_nsec, 2664 + only ? "ctime only" : "ignored"); 2711 2665 if (only) { 2712 2666 /* 2713 2667 * if kernel wants to dirty ctime but nothing else, ··· 2726 2678 } 2727 2679 } 2728 2680 if (ia_valid & ATTR_FILE) 2729 - dout("setattr %p ATTR_FILE ... hrm!\n", inode); 2681 + doutc(cl, "%p %llx.%llx ATTR_FILE ... hrm!\n", inode, 2682 + ceph_vinop(inode)); 2730 2683 2731 2684 if (dirtied) { 2732 2685 inode_dirty_flags = __ceph_mark_dirty_caps(ci, dirtied, ··· 2768 2719 */ 2769 2720 err = ceph_mdsc_do_request(mdsc, NULL, req); 2770 2721 if (err == -EAGAIN && truncate_retry--) { 2771 - dout("setattr %p result=%d (%s locally, %d remote), retry it!\n", 2772 - inode, err, ceph_cap_string(dirtied), mask); 2722 + doutc(cl, "%p %llx.%llx result=%d (%s locally, %d remote), retry it!\n", 2723 + inode, ceph_vinop(inode), err, 2724 + ceph_cap_string(dirtied), mask); 2773 2725 ceph_mdsc_put_request(req); 2774 2726 ceph_free_cap_flush(prealloc_cf); 2775 2727 goto retry; 2776 2728 } 2777 2729 } 2778 2730 out: 2779 - dout("setattr %p result=%d (%s locally, %d remote)\n", inode, err, 2780 - ceph_cap_string(dirtied), mask); 2731 + doutc(cl, "%p %llx.%llx result=%d (%s locally, %d remote)\n", inode, 2732 + ceph_vinop(inode), err, ceph_cap_string(dirtied), mask); 2781 2733 2782 2734 ceph_mdsc_put_request(req); 2783 2735 ceph_free_cap_flush(prealloc_cf); ··· 2796 2746 struct iattr *attr) 2797 2747 { 2798 2748 struct inode *inode = d_inode(dentry); 2799 - struct ceph_fs_client *fsc = ceph_inode_to_client(inode); 2749 + struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode); 2800 2750 int err; 2801 2751 2802 2752 if (ceph_snap(inode) != CEPH_NOSNAP) ··· 2809 2759 if (err) 2810 2760 return err; 2811 2761 2812 - err = setattr_prepare(&nop_mnt_idmap, dentry, attr); 2762 + err = setattr_prepare(idmap, dentry, attr); 2813 2763 if (err != 0) 2814 2764 return err; 2815 2765 ··· 2821 2771 ceph_quota_is_max_bytes_exceeded(inode, attr->ia_size)) 2822 2772 return -EDQUOT; 2823 2773 2824 - err = __ceph_setattr(inode, attr, NULL); 2774 + err = __ceph_setattr(idmap, inode, attr, NULL); 2825 2775 2826 2776 if (err >= 0 && (attr->ia_valid & ATTR_MODE)) 2827 - err = posix_acl_chmod(&nop_mnt_idmap, dentry, attr->ia_mode); 2777 + err = posix_acl_chmod(idmap, dentry, attr->ia_mode); 2828 2778 2829 2779 return err; 2830 2780 } ··· 2866 2816 int __ceph_do_getattr(struct inode *inode, struct page *locked_page, 2867 2817 int mask, bool force) 2868 2818 { 2869 - struct ceph_fs_client *fsc = ceph_sb_to_client(inode->i_sb); 2819 + struct ceph_fs_client *fsc = ceph_sb_to_fs_client(inode->i_sb); 2820 + struct ceph_client *cl = fsc->client; 2870 2821 struct ceph_mds_client *mdsc = fsc->mdsc; 2871 2822 struct ceph_mds_request *req; 2872 2823 int mode; 2873 2824 int err; 2874 2825 2875 2826 if (ceph_snap(inode) == CEPH_SNAPDIR) { 2876 - dout("do_getattr inode %p SNAPDIR\n", inode); 2827 + doutc(cl, "inode %p %llx.%llx SNAPDIR\n", inode, 2828 + ceph_vinop(inode)); 2877 2829 return 0; 2878 2830 } 2879 2831 2880 - dout("do_getattr inode %p mask %s mode 0%o\n", 2881 - inode, ceph_cap_string(mask), inode->i_mode); 2832 + doutc(cl, "inode %p %llx.%llx mask %s mode 0%o\n", inode, 2833 + ceph_vinop(inode), ceph_cap_string(mask), inode->i_mode); 2882 2834 if (!force && ceph_caps_issued_mask_metric(ceph_inode(inode), mask, 1)) 2883 2835 return 0; 2884 2836 ··· 2907 2855 } 2908 2856 } 2909 2857 ceph_mdsc_put_request(req); 2910 - dout("do_getattr result=%d\n", err); 2858 + doutc(cl, "result=%d\n", err); 2911 2859 return err; 2912 2860 } 2913 2861 2914 2862 int ceph_do_getvxattr(struct inode *inode, const char *name, void *value, 2915 2863 size_t size) 2916 2864 { 2917 - struct ceph_fs_client *fsc = ceph_sb_to_client(inode->i_sb); 2865 + struct ceph_fs_client *fsc = ceph_sb_to_fs_client(inode->i_sb); 2866 + struct ceph_client *cl = fsc->client; 2918 2867 struct ceph_mds_client *mdsc = fsc->mdsc; 2919 2868 struct ceph_mds_request *req; 2920 2869 int mode = USE_AUTH_MDS; ··· 2945 2892 xattr_value = req->r_reply_info.xattr_info.xattr_value; 2946 2893 xattr_value_len = req->r_reply_info.xattr_info.xattr_value_len; 2947 2894 2948 - dout("do_getvxattr xattr_value_len:%zu, size:%zu\n", xattr_value_len, size); 2895 + doutc(cl, "xattr_value_len:%zu, size:%zu\n", xattr_value_len, size); 2949 2896 2950 2897 err = (int)xattr_value_len; 2951 2898 if (size == 0) ··· 2960 2907 put: 2961 2908 ceph_mdsc_put_request(req); 2962 2909 out: 2963 - dout("do_getvxattr result=%d\n", err); 2910 + doutc(cl, "result=%d\n", err); 2964 2911 return err; 2965 2912 } 2966 2913 ··· 2980 2927 err = ceph_do_getattr(inode, CEPH_CAP_AUTH_SHARED, false); 2981 2928 2982 2929 if (!err) 2983 - err = generic_permission(&nop_mnt_idmap, inode, mask); 2930 + err = generic_permission(idmap, inode, mask); 2984 2931 return err; 2985 2932 } 2986 2933 ··· 3037 2984 return err; 3038 2985 } 3039 2986 3040 - generic_fillattr(&nop_mnt_idmap, request_mask, inode, stat); 2987 + generic_fillattr(idmap, request_mask, inode, stat); 3041 2988 stat->ino = ceph_present_inode(inode); 3042 2989 3043 2990 /* ··· 3060 3007 stat->dev = ci->i_snapid_map ? ci->i_snapid_map->dev : 0; 3061 3008 3062 3009 if (S_ISDIR(inode->i_mode)) { 3063 - if (ceph_test_mount_opt(ceph_sb_to_client(sb), RBYTES)) { 3010 + if (ceph_test_mount_opt(ceph_sb_to_fs_client(sb), RBYTES)) { 3064 3011 stat->size = ci->i_rbytes; 3065 3012 } else if (ceph_snap(inode) == CEPH_SNAPDIR) { 3066 3013 struct ceph_inode_info *pci;
+13 -8
fs/ceph/ioctl.c
··· 65 65 static long ceph_ioctl_set_layout(struct file *file, void __user *arg) 66 66 { 67 67 struct inode *inode = file_inode(file); 68 - struct ceph_mds_client *mdsc = ceph_sb_to_client(inode->i_sb)->mdsc; 68 + struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(inode->i_sb)->mdsc; 69 69 struct ceph_mds_request *req; 70 70 struct ceph_ioctl_layout l; 71 71 struct ceph_inode_info *ci = ceph_inode(file_inode(file)); ··· 140 140 struct ceph_mds_request *req; 141 141 struct ceph_ioctl_layout l; 142 142 int err; 143 - struct ceph_mds_client *mdsc = ceph_sb_to_client(inode->i_sb)->mdsc; 143 + struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(inode->i_sb)->mdsc; 144 144 145 145 /* copy and validate */ 146 146 if (copy_from_user(&l, arg, sizeof(l))) ··· 183 183 struct inode *inode = file_inode(file); 184 184 struct ceph_inode_info *ci = ceph_inode(inode); 185 185 struct ceph_osd_client *osdc = 186 - &ceph_sb_to_client(inode->i_sb)->client->osdc; 186 + &ceph_sb_to_fs_client(inode->i_sb)->client->osdc; 187 187 struct ceph_object_locator oloc; 188 188 CEPH_DEFINE_OID_ONSTACK(oid); 189 189 u32 xlen; ··· 244 244 struct ceph_file_info *fi = file->private_data; 245 245 struct inode *inode = file_inode(file); 246 246 struct ceph_inode_info *ci = ceph_inode(inode); 247 - struct ceph_mds_client *mdsc = ceph_inode_to_client(inode)->mdsc; 247 + struct ceph_mds_client *mdsc = ceph_inode_to_fs_client(inode)->mdsc; 248 + struct ceph_client *cl = mdsc->fsc->client; 248 249 249 250 if ((fi->fmode & CEPH_FILE_MODE_LAZY) == 0) { 250 251 spin_lock(&ci->i_ceph_lock); ··· 253 252 ci->i_nr_by_mode[ffs(CEPH_FILE_MODE_LAZY)]++; 254 253 __ceph_touch_fmode(ci, mdsc, fi->fmode); 255 254 spin_unlock(&ci->i_ceph_lock); 256 - dout("ioctl_layzio: file %p marked lazy\n", file); 255 + doutc(cl, "file %p %p %llx.%llx marked lazy\n", file, inode, 256 + ceph_vinop(inode)); 257 257 258 258 ceph_check_caps(ci, 0); 259 259 } else { 260 - dout("ioctl_layzio: file %p already lazy\n", file); 260 + doutc(cl, "file %p %p %llx.%llx already lazy\n", file, inode, 261 + ceph_vinop(inode)); 261 262 } 262 263 return 0; 263 264 } ··· 358 355 359 356 long ceph_ioctl(struct file *file, unsigned int cmd, unsigned long arg) 360 357 { 358 + struct inode *inode = file_inode(file); 359 + struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode); 361 360 int ret; 362 361 363 - dout("ioctl file %p cmd %s arg %lu\n", file, 364 - ceph_ioctl_cmd_name(cmd), arg); 362 + doutc(fsc->client, "file %p %p %llx.%llx cmd %s arg %lu\n", file, 363 + inode, ceph_vinop(inode), ceph_ioctl_cmd_name(cmd), arg); 365 364 switch (cmd) { 366 365 case CEPH_IOC_GET_LAYOUT: 367 366 return ceph_ioctl_get_layout(file, (void __user *)arg);
+33 -24
fs/ceph/locks.c
··· 77 77 int cmd, u8 wait, struct file_lock *fl) 78 78 { 79 79 struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(inode->i_sb); 80 + struct ceph_client *cl = mdsc->fsc->client; 80 81 struct ceph_mds_request *req; 81 82 int err; 82 83 u64 length = 0; ··· 112 111 113 112 owner = secure_addr(fl->fl_owner); 114 113 115 - dout("ceph_lock_message: rule: %d, op: %d, owner: %llx, pid: %llu, " 116 - "start: %llu, length: %llu, wait: %d, type: %d\n", (int)lock_type, 117 - (int)operation, owner, (u64)fl->fl_pid, fl->fl_start, length, 118 - wait, fl->fl_type); 114 + doutc(cl, "rule: %d, op: %d, owner: %llx, pid: %llu, " 115 + "start: %llu, length: %llu, wait: %d, type: %d\n", 116 + (int)lock_type, (int)operation, owner, (u64)fl->fl_pid, 117 + fl->fl_start, length, wait, fl->fl_type); 119 118 120 119 req->r_args.filelock_change.rule = lock_type; 121 120 req->r_args.filelock_change.type = cmd; ··· 148 147 149 148 } 150 149 ceph_mdsc_put_request(req); 151 - dout("ceph_lock_message: rule: %d, op: %d, pid: %llu, start: %llu, " 152 - "length: %llu, wait: %d, type: %d, err code %d\n", (int)lock_type, 153 - (int)operation, (u64)fl->fl_pid, fl->fl_start, 154 - length, wait, fl->fl_type, err); 150 + doutc(cl, "rule: %d, op: %d, pid: %llu, start: %llu, " 151 + "length: %llu, wait: %d, type: %d, err code %d\n", 152 + (int)lock_type, (int)operation, (u64)fl->fl_pid, 153 + fl->fl_start, length, wait, fl->fl_type, err); 155 154 return err; 156 155 } 157 156 158 157 static int ceph_lock_wait_for_completion(struct ceph_mds_client *mdsc, 159 158 struct ceph_mds_request *req) 160 159 { 160 + struct ceph_client *cl = mdsc->fsc->client; 161 161 struct ceph_mds_request *intr_req; 162 162 struct inode *inode = req->r_inode; 163 163 int err, lock_type; ··· 176 174 if (!err) 177 175 return 0; 178 176 179 - dout("ceph_lock_wait_for_completion: request %llu was interrupted\n", 180 - req->r_tid); 177 + doutc(cl, "request %llu was interrupted\n", req->r_tid); 181 178 182 179 mutex_lock(&mdsc->mutex); 183 180 if (test_bit(CEPH_MDS_R_GOT_RESULT, &req->r_req_flags)) { ··· 247 246 { 248 247 struct inode *inode = file_inode(file); 249 248 struct ceph_inode_info *ci = ceph_inode(inode); 249 + struct ceph_client *cl = ceph_inode_to_client(inode); 250 250 int err = 0; 251 251 u16 op = CEPH_MDS_OP_SETFILELOCK; 252 252 u8 wait = 0; ··· 259 257 if (ceph_inode_is_shutdown(inode)) 260 258 return -ESTALE; 261 259 262 - dout("ceph_lock, fl_owner: %p\n", fl->fl_owner); 260 + doutc(cl, "fl_owner: %p\n", fl->fl_owner); 263 261 264 262 /* set wait bit as appropriate, then make command as Ceph expects it*/ 265 263 if (IS_GETLK(cmd)) ··· 294 292 err = ceph_lock_message(CEPH_LOCK_FCNTL, op, inode, lock_cmd, wait, fl); 295 293 if (!err) { 296 294 if (op == CEPH_MDS_OP_SETFILELOCK && F_UNLCK != fl->fl_type) { 297 - dout("mds locked, locking locally\n"); 295 + doutc(cl, "locking locally\n"); 298 296 err = posix_lock_file(file, fl, NULL); 299 297 if (err) { 300 298 /* undo! This should only happen if ··· 302 300 * deadlock. */ 303 301 ceph_lock_message(CEPH_LOCK_FCNTL, op, inode, 304 302 CEPH_LOCK_UNLOCK, 0, fl); 305 - dout("got %d on posix_lock_file, undid lock\n", 306 - err); 303 + doutc(cl, "got %d on posix_lock_file, undid lock\n", 304 + err); 307 305 } 308 306 } 309 307 } ··· 314 312 { 315 313 struct inode *inode = file_inode(file); 316 314 struct ceph_inode_info *ci = ceph_inode(inode); 315 + struct ceph_client *cl = ceph_inode_to_client(inode); 317 316 int err = 0; 318 317 u8 wait = 0; 319 318 u8 lock_cmd; ··· 325 322 if (ceph_inode_is_shutdown(inode)) 326 323 return -ESTALE; 327 324 328 - dout("ceph_flock, fl_file: %p\n", fl->fl_file); 325 + doutc(cl, "fl_file: %p\n", fl->fl_file); 329 326 330 327 spin_lock(&ci->i_ceph_lock); 331 328 if (ci->i_ceph_flags & CEPH_I_ERROR_FILELOCK) { ··· 362 359 ceph_lock_message(CEPH_LOCK_FLOCK, 363 360 CEPH_MDS_OP_SETFILELOCK, 364 361 inode, CEPH_LOCK_UNLOCK, 0, fl); 365 - dout("got %d on locks_lock_file_wait, undid lock\n", err); 362 + doutc(cl, "got %d on locks_lock_file_wait, undid lock\n", 363 + err); 366 364 } 367 365 } 368 366 return err; ··· 375 371 */ 376 372 void ceph_count_locks(struct inode *inode, int *fcntl_count, int *flock_count) 377 373 { 374 + struct ceph_client *cl = ceph_inode_to_client(inode); 378 375 struct file_lock *lock; 379 376 struct file_lock_context *ctx; 380 377 ··· 391 386 ++(*flock_count); 392 387 spin_unlock(&ctx->flc_lock); 393 388 } 394 - dout("counted %d flock locks and %d fcntl locks\n", 395 - *flock_count, *fcntl_count); 389 + doutc(cl, "counted %d flock locks and %d fcntl locks\n", 390 + *flock_count, *fcntl_count); 396 391 } 397 392 398 393 /* 399 394 * Given a pointer to a lock, convert it to a ceph filelock 400 395 */ 401 - static int lock_to_ceph_filelock(struct file_lock *lock, 396 + static int lock_to_ceph_filelock(struct inode *inode, 397 + struct file_lock *lock, 402 398 struct ceph_filelock *cephlock) 403 399 { 400 + struct ceph_client *cl = ceph_inode_to_client(inode); 404 401 int err = 0; 402 + 405 403 cephlock->start = cpu_to_le64(lock->fl_start); 406 404 cephlock->length = cpu_to_le64(lock->fl_end - lock->fl_start + 1); 407 405 cephlock->client = cpu_to_le64(0); ··· 422 414 cephlock->type = CEPH_LOCK_UNLOCK; 423 415 break; 424 416 default: 425 - dout("Have unknown lock type %d\n", lock->fl_type); 417 + doutc(cl, "Have unknown lock type %d\n", lock->fl_type); 426 418 err = -EINVAL; 427 419 } 428 420 ··· 440 432 { 441 433 struct file_lock *lock; 442 434 struct file_lock_context *ctx = locks_inode_context(inode); 435 + struct ceph_client *cl = ceph_inode_to_client(inode); 443 436 int err = 0; 444 437 int seen_fcntl = 0; 445 438 int seen_flock = 0; 446 439 int l = 0; 447 440 448 - dout("encoding %d flock and %d fcntl locks\n", num_flock_locks, 449 - num_fcntl_locks); 441 + doutc(cl, "encoding %d flock and %d fcntl locks\n", num_flock_locks, 442 + num_fcntl_locks); 450 443 451 444 if (!ctx) 452 445 return 0; ··· 459 450 err = -ENOSPC; 460 451 goto fail; 461 452 } 462 - err = lock_to_ceph_filelock(lock, &flocks[l]); 453 + err = lock_to_ceph_filelock(inode, lock, &flocks[l]); 463 454 if (err) 464 455 goto fail; 465 456 ++l; ··· 470 461 err = -ENOSPC; 471 462 goto fail; 472 463 } 473 - err = lock_to_ceph_filelock(lock, &flocks[l]); 464 + err = lock_to_ceph_filelock(inode, lock, &flocks[l]); 474 465 if (err) 475 466 goto fail; 476 467 ++l;
+412 -268
fs/ceph/mds_client.c
··· 12 12 #include <linux/bits.h> 13 13 #include <linux/ktime.h> 14 14 #include <linux/bitmap.h> 15 + #include <linux/mnt_idmapping.h> 15 16 16 17 #include "super.h" 17 18 #include "mds_client.h" ··· 412 411 u64 features) 413 412 { 414 413 struct ceph_mds_reply_info_parsed *info = &req->r_reply_info; 414 + struct ceph_client *cl = req->r_mdsc->fsc->client; 415 415 u32 num, i = 0; 416 416 int err; 417 417 ··· 435 433 BUG_ON(!info->dir_entries); 436 434 if ((unsigned long)(info->dir_entries + num) > 437 435 (unsigned long)info->dir_entries + info->dir_buf_size) { 438 - pr_err("dir contents are larger than expected\n"); 436 + pr_err_client(cl, "dir contents are larger than expected\n"); 439 437 WARN_ON(1); 440 438 goto bad; 441 439 } ··· 456 454 ceph_decode_need(p, end, _name_len, bad); 457 455 _name = *p; 458 456 *p += _name_len; 459 - dout("parsed dir dname '%.*s'\n", _name_len, _name); 457 + doutc(cl, "parsed dir dname '%.*s'\n", _name_len, _name); 460 458 461 459 if (info->hash_order) 462 460 rde->raw_hash = ceph_str_hash(ci->i_dir_layout.dl_dir_hash, ··· 516 514 rde->is_nokey = false; 517 515 err = ceph_fname_to_usr(&fname, &tname, &oname, &rde->is_nokey); 518 516 if (err) { 519 - pr_err("%s unable to decode %.*s, got %d\n", __func__, 520 - _name_len, _name, err); 517 + pr_err_client(cl, "unable to decode %.*s, got %d\n", 518 + _name_len, _name, err); 521 519 goto out_bad; 522 520 } 523 521 rde->name = oname.name; ··· 541 539 bad: 542 540 err = -EIO; 543 541 out_bad: 544 - pr_err("problem parsing dir contents %d\n", err); 542 + pr_err_client(cl, "problem parsing dir contents %d\n", err); 545 543 return err; 546 544 } 547 545 ··· 572 570 static int ceph_parse_deleg_inos(void **p, void *end, 573 571 struct ceph_mds_session *s) 574 572 { 573 + struct ceph_client *cl = s->s_mdsc->fsc->client; 575 574 u32 sets; 576 575 577 576 ceph_decode_32_safe(p, end, sets, bad); 578 - dout("got %u sets of delegated inodes\n", sets); 577 + doutc(cl, "got %u sets of delegated inodes\n", sets); 579 578 while (sets--) { 580 579 u64 start, len; 581 580 ··· 585 582 586 583 /* Don't accept a delegation of system inodes */ 587 584 if (start < CEPH_INO_SYSTEM_BASE) { 588 - pr_warn_ratelimited("ceph: ignoring reserved inode range delegation (start=0x%llx len=0x%llx)\n", 589 - start, len); 585 + pr_warn_ratelimited_client(cl, 586 + "ignoring reserved inode range delegation (start=0x%llx len=0x%llx)\n", 587 + start, len); 590 588 continue; 591 589 } 592 590 while (len--) { ··· 595 591 DELEGATED_INO_AVAILABLE, 596 592 GFP_KERNEL); 597 593 if (!err) { 598 - dout("added delegated inode 0x%llx\n", 599 - start - 1); 594 + doutc(cl, "added delegated inode 0x%llx\n", start - 1); 600 595 } else if (err == -EBUSY) { 601 - pr_warn("MDS delegated inode 0x%llx more than once.\n", 596 + pr_warn_client(cl, 597 + "MDS delegated inode 0x%llx more than once.\n", 602 598 start - 1); 603 599 } else { 604 600 return err; ··· 748 744 struct ceph_mds_request *req, u64 features) 749 745 { 750 746 struct ceph_mds_reply_info_parsed *info = &req->r_reply_info; 747 + struct ceph_client *cl = s->s_mdsc->fsc->client; 751 748 void *p, *end; 752 749 u32 len; 753 750 int err; ··· 788 783 bad: 789 784 err = -EIO; 790 785 out_bad: 791 - pr_err("mds parse_reply err %d\n", err); 786 + pr_err_client(cl, "mds parse_reply err %d\n", err); 792 787 ceph_msg_dump(msg); 793 788 return err; 794 789 } ··· 835 830 */ 836 831 int ceph_wait_on_conflict_unlink(struct dentry *dentry) 837 832 { 838 - struct ceph_fs_client *fsc = ceph_sb_to_client(dentry->d_sb); 833 + struct ceph_fs_client *fsc = ceph_sb_to_fs_client(dentry->d_sb); 834 + struct ceph_client *cl = fsc->client; 839 835 struct dentry *pdentry = dentry->d_parent; 840 836 struct dentry *udentry, *found = NULL; 841 837 struct ceph_dentry_info *di; ··· 861 855 goto next; 862 856 863 857 if (!test_bit(CEPH_DENTRY_ASYNC_UNLINK_BIT, &di->flags)) 864 - pr_warn("%s dentry %p:%pd async unlink bit is not set\n", 865 - __func__, dentry, dentry); 858 + pr_warn_client(cl, "dentry %p:%pd async unlink bit is not set\n", 859 + dentry, dentry); 866 860 867 861 if (!d_same_name(udentry, pdentry, &dname)) 868 862 goto next; ··· 878 872 if (likely(!found)) 879 873 return 0; 880 874 881 - dout("%s dentry %p:%pd conflict with old %p:%pd\n", __func__, 882 - dentry, dentry, found, found); 875 + doutc(cl, "dentry %p:%pd conflict with old %p:%pd\n", dentry, dentry, 876 + found, found); 883 877 884 878 err = wait_on_bit(&di->flags, CEPH_DENTRY_ASYNC_UNLINK_BIT, 885 879 TASK_KILLABLE); ··· 963 957 static struct ceph_mds_session *register_session(struct ceph_mds_client *mdsc, 964 958 int mds) 965 959 { 960 + struct ceph_client *cl = mdsc->fsc->client; 966 961 struct ceph_mds_session *s; 967 962 968 963 if (READ_ONCE(mdsc->fsc->mount_state) == CEPH_MOUNT_FENCE_IO) ··· 980 973 int newmax = 1 << get_count_order(mds + 1); 981 974 struct ceph_mds_session **sa; 982 975 983 - dout("%s: realloc to %d\n", __func__, newmax); 976 + doutc(cl, "realloc to %d\n", newmax); 984 977 sa = kcalloc(newmax, sizeof(void *), GFP_NOFS); 985 978 if (!sa) 986 979 goto fail_realloc; ··· 993 986 mdsc->max_sessions = newmax; 994 987 } 995 988 996 - dout("%s: mds%d\n", __func__, mds); 989 + doutc(cl, "mds%d\n", mds); 997 990 s->s_mdsc = mdsc; 998 991 s->s_mds = mds; 999 992 s->s_state = CEPH_MDS_SESSION_NEW; ··· 1036 1029 static void __unregister_session(struct ceph_mds_client *mdsc, 1037 1030 struct ceph_mds_session *s) 1038 1031 { 1039 - dout("__unregister_session mds%d %p\n", s->s_mds, s); 1032 + doutc(mdsc->fsc->client, "mds%d %p\n", s->s_mds, s); 1040 1033 BUG_ON(mdsc->sessions[s->s_mds] != s); 1041 1034 mdsc->sessions[s->s_mds] = NULL; 1042 1035 ceph_con_close(&s->s_con); ··· 1123 1116 kfree(req->r_path1); 1124 1117 kfree(req->r_path2); 1125 1118 put_cred(req->r_cred); 1119 + if (req->r_mnt_idmap) 1120 + mnt_idmap_put(req->r_mnt_idmap); 1126 1121 if (req->r_pagelist) 1127 1122 ceph_pagelist_release(req->r_pagelist); 1128 1123 kfree(req->r_fscrypt_auth); ··· 1164 1155 struct ceph_mds_request *req, 1165 1156 struct inode *dir) 1166 1157 { 1158 + struct ceph_client *cl = mdsc->fsc->client; 1167 1159 int ret = 0; 1168 1160 1169 1161 req->r_tid = ++mdsc->last_tid; ··· 1172 1162 ret = ceph_reserve_caps(mdsc, &req->r_caps_reservation, 1173 1163 req->r_num_caps); 1174 1164 if (ret < 0) { 1175 - pr_err("__register_request %p " 1176 - "failed to reserve caps: %d\n", req, ret); 1165 + pr_err_client(cl, "%p failed to reserve caps: %d\n", 1166 + req, ret); 1177 1167 /* set req->r_err to fail early from __do_request */ 1178 1168 req->r_err = ret; 1179 1169 return; 1180 1170 } 1181 1171 } 1182 - dout("__register_request %p tid %lld\n", req, req->r_tid); 1172 + doutc(cl, "%p tid %lld\n", req, req->r_tid); 1183 1173 ceph_mdsc_get_request(req); 1184 1174 insert_request(&mdsc->request_tree, req); 1185 1175 1186 1176 req->r_cred = get_current_cred(); 1177 + if (!req->r_mnt_idmap) 1178 + req->r_mnt_idmap = &nop_mnt_idmap; 1187 1179 1188 1180 if (mdsc->oldest_tid == 0 && req->r_op != CEPH_MDS_OP_SETFILELOCK) 1189 1181 mdsc->oldest_tid = req->r_tid; ··· 1204 1192 static void __unregister_request(struct ceph_mds_client *mdsc, 1205 1193 struct ceph_mds_request *req) 1206 1194 { 1207 - dout("__unregister_request %p tid %lld\n", req, req->r_tid); 1195 + doutc(mdsc->fsc->client, "%p tid %lld\n", req, req->r_tid); 1208 1196 1209 1197 /* Never leave an unregistered request on an unsafe list! */ 1210 1198 list_del_init(&req->r_unsafe_item); ··· 1290 1278 int mds = -1; 1291 1279 u32 hash = req->r_direct_hash; 1292 1280 bool is_hash = test_bit(CEPH_MDS_R_DIRECT_IS_HASH, &req->r_req_flags); 1281 + struct ceph_client *cl = mdsc->fsc->client; 1293 1282 1294 1283 if (random) 1295 1284 *random = false; ··· 1302 1289 if (req->r_resend_mds >= 0 && 1303 1290 (__have_session(mdsc, req->r_resend_mds) || 1304 1291 ceph_mdsmap_get_state(mdsc->mdsmap, req->r_resend_mds) > 0)) { 1305 - dout("%s using resend_mds mds%d\n", __func__, 1306 - req->r_resend_mds); 1292 + doutc(cl, "using resend_mds mds%d\n", req->r_resend_mds); 1307 1293 return req->r_resend_mds; 1308 1294 } 1309 1295 ··· 1319 1307 rcu_read_lock(); 1320 1308 inode = get_nonsnap_parent(req->r_dentry); 1321 1309 rcu_read_unlock(); 1322 - dout("%s using snapdir's parent %p\n", __func__, inode); 1310 + doutc(cl, "using snapdir's parent %p %llx.%llx\n", 1311 + inode, ceph_vinop(inode)); 1323 1312 } 1324 1313 } else if (req->r_dentry) { 1325 1314 /* ignore race with rename; old or new d_parent is okay */ ··· 1340 1327 /* direct snapped/virtual snapdir requests 1341 1328 * based on parent dir inode */ 1342 1329 inode = get_nonsnap_parent(parent); 1343 - dout("%s using nonsnap parent %p\n", __func__, inode); 1330 + doutc(cl, "using nonsnap parent %p %llx.%llx\n", 1331 + inode, ceph_vinop(inode)); 1344 1332 } else { 1345 1333 /* dentry target */ 1346 1334 inode = d_inode(req->r_dentry); ··· 1357 1343 rcu_read_unlock(); 1358 1344 } 1359 1345 1360 - dout("%s %p is_hash=%d (0x%x) mode %d\n", __func__, inode, (int)is_hash, 1361 - hash, mode); 1362 1346 if (!inode) 1363 1347 goto random; 1348 + 1349 + doutc(cl, "%p %llx.%llx is_hash=%d (0x%x) mode %d\n", inode, 1350 + ceph_vinop(inode), (int)is_hash, hash, mode); 1364 1351 ci = ceph_inode(inode); 1365 1352 1366 1353 if (is_hash && S_ISDIR(inode->i_mode)) { ··· 1377 1362 get_random_bytes(&r, 1); 1378 1363 r %= frag.ndist; 1379 1364 mds = frag.dist[r]; 1380 - dout("%s %p %llx.%llx frag %u mds%d (%d/%d)\n", 1381 - __func__, inode, ceph_vinop(inode), 1382 - frag.frag, mds, (int)r, frag.ndist); 1365 + doutc(cl, "%p %llx.%llx frag %u mds%d (%d/%d)\n", 1366 + inode, ceph_vinop(inode), frag.frag, 1367 + mds, (int)r, frag.ndist); 1383 1368 if (ceph_mdsmap_get_state(mdsc->mdsmap, mds) >= 1384 1369 CEPH_MDS_STATE_ACTIVE && 1385 1370 !ceph_mdsmap_is_laggy(mdsc->mdsmap, mds)) ··· 1392 1377 if (frag.mds >= 0) { 1393 1378 /* choose auth mds */ 1394 1379 mds = frag.mds; 1395 - dout("%s %p %llx.%llx frag %u mds%d (auth)\n", 1396 - __func__, inode, ceph_vinop(inode), 1397 - frag.frag, mds); 1380 + doutc(cl, "%p %llx.%llx frag %u mds%d (auth)\n", 1381 + inode, ceph_vinop(inode), frag.frag, mds); 1398 1382 if (ceph_mdsmap_get_state(mdsc->mdsmap, mds) >= 1399 1383 CEPH_MDS_STATE_ACTIVE) { 1400 1384 if (!ceph_mdsmap_is_laggy(mdsc->mdsmap, ··· 1417 1403 goto random; 1418 1404 } 1419 1405 mds = cap->session->s_mds; 1420 - dout("%s %p %llx.%llx mds%d (%scap %p)\n", __func__, 1421 - inode, ceph_vinop(inode), mds, 1422 - cap == ci->i_auth_cap ? "auth " : "", cap); 1406 + doutc(cl, "%p %llx.%llx mds%d (%scap %p)\n", inode, 1407 + ceph_vinop(inode), mds, 1408 + cap == ci->i_auth_cap ? "auth " : "", cap); 1423 1409 spin_unlock(&ci->i_ceph_lock); 1424 1410 out: 1425 1411 iput(inode); ··· 1430 1416 *random = true; 1431 1417 1432 1418 mds = ceph_mdsmap_get_random_mds(mdsc->mdsmap); 1433 - dout("%s chose random mds%d\n", __func__, mds); 1419 + doutc(cl, "chose random mds%d\n", mds); 1434 1420 return mds; 1435 1421 } 1436 1422 ··· 1543 1529 int metadata_key_count = 0; 1544 1530 struct ceph_options *opt = mdsc->fsc->client->options; 1545 1531 struct ceph_mount_options *fsopt = mdsc->fsc->mount_options; 1532 + struct ceph_client *cl = mdsc->fsc->client; 1546 1533 size_t size, count; 1547 1534 void *p, *end; 1548 1535 int ret; ··· 1582 1567 msg = ceph_msg_new(CEPH_MSG_CLIENT_SESSION, sizeof(*h) + extra_bytes, 1583 1568 GFP_NOFS, false); 1584 1569 if (!msg) { 1585 - pr_err("ENOMEM creating session open msg\n"); 1570 + pr_err_client(cl, "ENOMEM creating session open msg\n"); 1586 1571 return ERR_PTR(-ENOMEM); 1587 1572 } 1588 1573 p = msg->front.iov_base; ··· 1622 1607 1623 1608 ret = encode_supported_features(&p, end); 1624 1609 if (ret) { 1625 - pr_err("encode_supported_features failed!\n"); 1610 + pr_err_client(cl, "encode_supported_features failed!\n"); 1626 1611 ceph_msg_put(msg); 1627 1612 return ERR_PTR(ret); 1628 1613 } 1629 1614 1630 1615 ret = encode_metric_spec(&p, end); 1631 1616 if (ret) { 1632 - pr_err("encode_metric_spec failed!\n"); 1617 + pr_err_client(cl, "encode_metric_spec failed!\n"); 1633 1618 ceph_msg_put(msg); 1634 1619 return ERR_PTR(ret); 1635 1620 } ··· 1657 1642 1658 1643 /* wait for mds to go active? */ 1659 1644 mstate = ceph_mdsmap_get_state(mdsc->mdsmap, mds); 1660 - dout("open_session to mds%d (%s)\n", mds, 1661 - ceph_mds_state_name(mstate)); 1645 + doutc(mdsc->fsc->client, "open_session to mds%d (%s)\n", mds, 1646 + ceph_mds_state_name(mstate)); 1662 1647 session->s_state = CEPH_MDS_SESSION_OPENING; 1663 1648 session->s_renew_requested = jiffies; 1664 1649 ··· 1701 1686 ceph_mdsc_open_export_target_session(struct ceph_mds_client *mdsc, int target) 1702 1687 { 1703 1688 struct ceph_mds_session *session; 1689 + struct ceph_client *cl = mdsc->fsc->client; 1704 1690 1705 - dout("open_export_target_session to mds%d\n", target); 1691 + doutc(cl, "to mds%d\n", target); 1706 1692 1707 1693 mutex_lock(&mdsc->mutex); 1708 1694 session = __open_export_target_session(mdsc, target); ··· 1718 1702 struct ceph_mds_info *mi; 1719 1703 struct ceph_mds_session *ts; 1720 1704 int i, mds = session->s_mds; 1705 + struct ceph_client *cl = mdsc->fsc->client; 1721 1706 1722 1707 if (mds >= mdsc->mdsmap->possible_max_rank) 1723 1708 return; 1724 1709 1725 1710 mi = &mdsc->mdsmap->m_info[mds]; 1726 - dout("open_export_target_sessions for mds%d (%d targets)\n", 1727 - session->s_mds, mi->num_export_targets); 1711 + doutc(cl, "for mds%d (%d targets)\n", session->s_mds, 1712 + mi->num_export_targets); 1728 1713 1729 1714 for (i = 0; i < mi->num_export_targets; i++) { 1730 1715 ts = __open_export_target_session(mdsc, mi->export_targets[i]); ··· 1748 1731 static void detach_cap_releases(struct ceph_mds_session *session, 1749 1732 struct list_head *target) 1750 1733 { 1734 + struct ceph_client *cl = session->s_mdsc->fsc->client; 1735 + 1751 1736 lockdep_assert_held(&session->s_cap_lock); 1752 1737 1753 1738 list_splice_init(&session->s_cap_releases, target); 1754 1739 session->s_num_cap_releases = 0; 1755 - dout("dispose_cap_releases mds%d\n", session->s_mds); 1740 + doutc(cl, "mds%d\n", session->s_mds); 1756 1741 } 1757 1742 1758 1743 static void dispose_cap_releases(struct ceph_mds_client *mdsc, ··· 1772 1753 static void cleanup_session_requests(struct ceph_mds_client *mdsc, 1773 1754 struct ceph_mds_session *session) 1774 1755 { 1756 + struct ceph_client *cl = mdsc->fsc->client; 1775 1757 struct ceph_mds_request *req; 1776 1758 struct rb_node *p; 1777 1759 1778 - dout("cleanup_session_requests mds%d\n", session->s_mds); 1760 + doutc(cl, "mds%d\n", session->s_mds); 1779 1761 mutex_lock(&mdsc->mutex); 1780 1762 while (!list_empty(&session->s_unsafe)) { 1781 1763 req = list_first_entry(&session->s_unsafe, 1782 1764 struct ceph_mds_request, r_unsafe_item); 1783 - pr_warn_ratelimited(" dropping unsafe request %llu\n", 1784 - req->r_tid); 1765 + pr_warn_ratelimited_client(cl, " dropping unsafe request %llu\n", 1766 + req->r_tid); 1785 1767 if (req->r_target_inode) 1786 1768 mapping_set_error(req->r_target_inode->i_mapping, -EIO); 1787 1769 if (req->r_unsafe_dir) ··· 1811 1791 int (*cb)(struct inode *, int mds, void *), 1812 1792 void *arg) 1813 1793 { 1794 + struct ceph_client *cl = session->s_mdsc->fsc->client; 1814 1795 struct list_head *p; 1815 1796 struct ceph_cap *cap; 1816 1797 struct inode *inode, *last_inode = NULL; 1817 1798 struct ceph_cap *old_cap = NULL; 1818 1799 int ret; 1819 1800 1820 - dout("iterate_session_caps %p mds%d\n", session, session->s_mds); 1801 + doutc(cl, "%p mds%d\n", session, session->s_mds); 1821 1802 spin_lock(&session->s_cap_lock); 1822 1803 p = session->s_caps.next; 1823 1804 while (p != &session->s_caps) { ··· 1849 1828 spin_lock(&session->s_cap_lock); 1850 1829 p = p->next; 1851 1830 if (!cap->ci) { 1852 - dout("iterate_session_caps finishing cap %p removal\n", 1853 - cap); 1831 + doutc(cl, "finishing cap %p removal\n", cap); 1854 1832 BUG_ON(cap->session != session); 1855 1833 cap->session = NULL; 1856 1834 list_del_init(&cap->session_caps); ··· 1878 1858 static int remove_session_caps_cb(struct inode *inode, int mds, void *arg) 1879 1859 { 1880 1860 struct ceph_inode_info *ci = ceph_inode(inode); 1861 + struct ceph_client *cl = ceph_inode_to_client(inode); 1881 1862 bool invalidate = false; 1882 1863 struct ceph_cap *cap; 1883 1864 int iputs = 0; ··· 1886 1865 spin_lock(&ci->i_ceph_lock); 1887 1866 cap = __get_cap_for_mds(ci, mds); 1888 1867 if (cap) { 1889 - dout(" removing cap %p, ci is %p, inode is %p\n", 1890 - cap, ci, &ci->netfs.inode); 1868 + doutc(cl, " removing cap %p, ci is %p, inode is %p\n", 1869 + cap, ci, &ci->netfs.inode); 1891 1870 1892 1871 iputs = ceph_purge_inode_cap(inode, cap, &invalidate); 1893 1872 } ··· 1911 1890 struct super_block *sb = fsc->sb; 1912 1891 LIST_HEAD(dispose); 1913 1892 1914 - dout("remove_session_caps on %p\n", session); 1893 + doutc(fsc->client, "on %p\n", session); 1915 1894 ceph_iterate_session_caps(session, remove_session_caps_cb, fsc); 1916 1895 1917 1896 wake_up_all(&fsc->mdsc->cap_flushing_wq); ··· 1992 1971 1993 1972 static void wake_up_session_caps(struct ceph_mds_session *session, int ev) 1994 1973 { 1995 - dout("wake_up_session_caps %p mds%d\n", session, session->s_mds); 1974 + struct ceph_client *cl = session->s_mdsc->fsc->client; 1975 + 1976 + doutc(cl, "session %p mds%d\n", session, session->s_mds); 1996 1977 ceph_iterate_session_caps(session, wake_up_session_cb, 1997 1978 (void *)(unsigned long)ev); 1998 1979 } ··· 2008 1985 static int send_renew_caps(struct ceph_mds_client *mdsc, 2009 1986 struct ceph_mds_session *session) 2010 1987 { 1988 + struct ceph_client *cl = mdsc->fsc->client; 2011 1989 struct ceph_msg *msg; 2012 1990 int state; 2013 1991 2014 1992 if (time_after_eq(jiffies, session->s_cap_ttl) && 2015 1993 time_after_eq(session->s_cap_ttl, session->s_renew_requested)) 2016 - pr_info("mds%d caps stale\n", session->s_mds); 1994 + pr_info_client(cl, "mds%d caps stale\n", session->s_mds); 2017 1995 session->s_renew_requested = jiffies; 2018 1996 2019 1997 /* do not try to renew caps until a recovering mds has reconnected 2020 1998 * with its clients. */ 2021 1999 state = ceph_mdsmap_get_state(mdsc->mdsmap, session->s_mds); 2022 2000 if (state < CEPH_MDS_STATE_RECONNECT) { 2023 - dout("send_renew_caps ignoring mds%d (%s)\n", 2024 - session->s_mds, ceph_mds_state_name(state)); 2001 + doutc(cl, "ignoring mds%d (%s)\n", session->s_mds, 2002 + ceph_mds_state_name(state)); 2025 2003 return 0; 2026 2004 } 2027 2005 2028 - dout("send_renew_caps to mds%d (%s)\n", session->s_mds, 2029 - ceph_mds_state_name(state)); 2006 + doutc(cl, "to mds%d (%s)\n", session->s_mds, 2007 + ceph_mds_state_name(state)); 2030 2008 msg = ceph_create_session_msg(CEPH_SESSION_REQUEST_RENEWCAPS, 2031 2009 ++session->s_renew_seq); 2032 2010 if (!msg) ··· 2039 2015 static int send_flushmsg_ack(struct ceph_mds_client *mdsc, 2040 2016 struct ceph_mds_session *session, u64 seq) 2041 2017 { 2018 + struct ceph_client *cl = mdsc->fsc->client; 2042 2019 struct ceph_msg *msg; 2043 2020 2044 - dout("send_flushmsg_ack to mds%d (%s)s seq %lld\n", 2045 - session->s_mds, ceph_session_state_name(session->s_state), seq); 2021 + doutc(cl, "to mds%d (%s)s seq %lld\n", session->s_mds, 2022 + ceph_session_state_name(session->s_state), seq); 2046 2023 msg = ceph_create_session_msg(CEPH_SESSION_FLUSHMSG_ACK, seq); 2047 2024 if (!msg) 2048 2025 return -ENOMEM; ··· 2060 2035 static void renewed_caps(struct ceph_mds_client *mdsc, 2061 2036 struct ceph_mds_session *session, int is_renew) 2062 2037 { 2038 + struct ceph_client *cl = mdsc->fsc->client; 2063 2039 int was_stale; 2064 2040 int wake = 0; 2065 2041 ··· 2072 2046 2073 2047 if (was_stale) { 2074 2048 if (time_before(jiffies, session->s_cap_ttl)) { 2075 - pr_info("mds%d caps renewed\n", session->s_mds); 2049 + pr_info_client(cl, "mds%d caps renewed\n", 2050 + session->s_mds); 2076 2051 wake = 1; 2077 2052 } else { 2078 - pr_info("mds%d caps still stale\n", session->s_mds); 2053 + pr_info_client(cl, "mds%d caps still stale\n", 2054 + session->s_mds); 2079 2055 } 2080 2056 } 2081 - dout("renewed_caps mds%d ttl now %lu, was %s, now %s\n", 2082 - session->s_mds, session->s_cap_ttl, was_stale ? "stale" : "fresh", 2083 - time_before(jiffies, session->s_cap_ttl) ? "stale" : "fresh"); 2057 + doutc(cl, "mds%d ttl now %lu, was %s, now %s\n", session->s_mds, 2058 + session->s_cap_ttl, was_stale ? "stale" : "fresh", 2059 + time_before(jiffies, session->s_cap_ttl) ? "stale" : "fresh"); 2084 2060 spin_unlock(&session->s_cap_lock); 2085 2061 2086 2062 if (wake) ··· 2094 2066 */ 2095 2067 static int request_close_session(struct ceph_mds_session *session) 2096 2068 { 2069 + struct ceph_client *cl = session->s_mdsc->fsc->client; 2097 2070 struct ceph_msg *msg; 2098 2071 2099 - dout("request_close_session mds%d state %s seq %lld\n", 2100 - session->s_mds, ceph_session_state_name(session->s_state), 2101 - session->s_seq); 2072 + doutc(cl, "mds%d state %s seq %lld\n", session->s_mds, 2073 + ceph_session_state_name(session->s_state), session->s_seq); 2102 2074 msg = ceph_create_session_msg(CEPH_SESSION_REQUEST_CLOSE, 2103 2075 session->s_seq); 2104 2076 if (!msg) ··· 2154 2126 */ 2155 2127 static int trim_caps_cb(struct inode *inode, int mds, void *arg) 2156 2128 { 2129 + struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(inode->i_sb); 2130 + struct ceph_client *cl = mdsc->fsc->client; 2157 2131 int *remaining = arg; 2158 2132 struct ceph_inode_info *ci = ceph_inode(inode); 2159 2133 int used, wanted, oissued, mine; ··· 2175 2145 wanted = __ceph_caps_file_wanted(ci); 2176 2146 oissued = __ceph_caps_issued_other(ci, cap); 2177 2147 2178 - dout("trim_caps_cb %p cap %p mine %s oissued %s used %s wanted %s\n", 2179 - inode, cap, ceph_cap_string(mine), ceph_cap_string(oissued), 2180 - ceph_cap_string(used), ceph_cap_string(wanted)); 2148 + doutc(cl, "%p %llx.%llx cap %p mine %s oissued %s used %s wanted %s\n", 2149 + inode, ceph_vinop(inode), cap, ceph_cap_string(mine), 2150 + ceph_cap_string(oissued), ceph_cap_string(used), 2151 + ceph_cap_string(wanted)); 2181 2152 if (cap == ci->i_auth_cap) { 2182 2153 if (ci->i_dirty_caps || ci->i_flushing_caps || 2183 2154 !list_empty(&ci->i_cap_snaps)) ··· 2204 2173 2205 2174 if (oissued) { 2206 2175 /* we aren't the only cap.. just remove us */ 2207 - ceph_remove_cap(cap, true); 2176 + ceph_remove_cap(mdsc, cap, true); 2208 2177 (*remaining)--; 2209 2178 } else { 2210 2179 struct dentry *dentry; ··· 2218 2187 count = atomic_read(&inode->i_count); 2219 2188 if (count == 1) 2220 2189 (*remaining)--; 2221 - dout("trim_caps_cb %p cap %p pruned, count now %d\n", 2222 - inode, cap, count); 2190 + doutc(cl, "%p %llx.%llx cap %p pruned, count now %d\n", 2191 + inode, ceph_vinop(inode), cap, count); 2223 2192 } else { 2224 2193 dput(dentry); 2225 2194 } ··· 2238 2207 struct ceph_mds_session *session, 2239 2208 int max_caps) 2240 2209 { 2210 + struct ceph_client *cl = mdsc->fsc->client; 2241 2211 int trim_caps = session->s_nr_caps - max_caps; 2242 2212 2243 - dout("trim_caps mds%d start: %d / %d, trim %d\n", 2244 - session->s_mds, session->s_nr_caps, max_caps, trim_caps); 2213 + doutc(cl, "mds%d start: %d / %d, trim %d\n", session->s_mds, 2214 + session->s_nr_caps, max_caps, trim_caps); 2245 2215 if (trim_caps > 0) { 2246 2216 int remaining = trim_caps; 2247 2217 2248 2218 ceph_iterate_session_caps(session, trim_caps_cb, &remaining); 2249 - dout("trim_caps mds%d done: %d / %d, trimmed %d\n", 2250 - session->s_mds, session->s_nr_caps, max_caps, 2251 - trim_caps - remaining); 2219 + doutc(cl, "mds%d done: %d / %d, trimmed %d\n", 2220 + session->s_mds, session->s_nr_caps, max_caps, 2221 + trim_caps - remaining); 2252 2222 } 2253 2223 2254 2224 ceph_flush_cap_releases(mdsc, session); ··· 2259 2227 static int check_caps_flush(struct ceph_mds_client *mdsc, 2260 2228 u64 want_flush_tid) 2261 2229 { 2230 + struct ceph_client *cl = mdsc->fsc->client; 2262 2231 int ret = 1; 2263 2232 2264 2233 spin_lock(&mdsc->cap_dirty_lock); ··· 2268 2235 list_first_entry(&mdsc->cap_flush_list, 2269 2236 struct ceph_cap_flush, g_list); 2270 2237 if (cf->tid <= want_flush_tid) { 2271 - dout("check_caps_flush still flushing tid " 2272 - "%llu <= %llu\n", cf->tid, want_flush_tid); 2238 + doutc(cl, "still flushing tid %llu <= %llu\n", 2239 + cf->tid, want_flush_tid); 2273 2240 ret = 0; 2274 2241 } 2275 2242 } ··· 2285 2252 static void wait_caps_flush(struct ceph_mds_client *mdsc, 2286 2253 u64 want_flush_tid) 2287 2254 { 2288 - dout("check_caps_flush want %llu\n", want_flush_tid); 2255 + struct ceph_client *cl = mdsc->fsc->client; 2256 + 2257 + doutc(cl, "want %llu\n", want_flush_tid); 2289 2258 2290 2259 wait_event(mdsc->cap_flushing_wq, 2291 2260 check_caps_flush(mdsc, want_flush_tid)); 2292 2261 2293 - dout("check_caps_flush ok, flushed thru %llu\n", want_flush_tid); 2262 + doutc(cl, "ok, flushed thru %llu\n", want_flush_tid); 2294 2263 } 2295 2264 2296 2265 /* ··· 2301 2266 static void ceph_send_cap_releases(struct ceph_mds_client *mdsc, 2302 2267 struct ceph_mds_session *session) 2303 2268 { 2269 + struct ceph_client *cl = mdsc->fsc->client; 2304 2270 struct ceph_msg *msg = NULL; 2305 2271 struct ceph_mds_cap_release *head; 2306 2272 struct ceph_mds_cap_item *item; ··· 2360 2324 msg->front.iov_len += sizeof(*cap_barrier); 2361 2325 2362 2326 msg->hdr.front_len = cpu_to_le32(msg->front.iov_len); 2363 - dout("send_cap_releases mds%d %p\n", session->s_mds, msg); 2327 + doutc(cl, "mds%d %p\n", session->s_mds, msg); 2364 2328 ceph_con_send(&session->s_con, msg); 2365 2329 msg = NULL; 2366 2330 } ··· 2380 2344 msg->front.iov_len += sizeof(*cap_barrier); 2381 2345 2382 2346 msg->hdr.front_len = cpu_to_le32(msg->front.iov_len); 2383 - dout("send_cap_releases mds%d %p\n", session->s_mds, msg); 2347 + doutc(cl, "mds%d %p\n", session->s_mds, msg); 2384 2348 ceph_con_send(&session->s_con, msg); 2385 2349 } 2386 2350 return; 2387 2351 out_err: 2388 - pr_err("send_cap_releases mds%d, failed to allocate message\n", 2389 - session->s_mds); 2352 + pr_err_client(cl, "mds%d, failed to allocate message\n", 2353 + session->s_mds); 2390 2354 spin_lock(&session->s_cap_lock); 2391 2355 list_splice(&tmp_list, &session->s_cap_releases); 2392 2356 session->s_num_cap_releases += num_cap_releases; ··· 2409 2373 void ceph_flush_cap_releases(struct ceph_mds_client *mdsc, 2410 2374 struct ceph_mds_session *session) 2411 2375 { 2376 + struct ceph_client *cl = mdsc->fsc->client; 2412 2377 if (mdsc->stopping) 2413 2378 return; 2414 2379 2415 2380 ceph_get_mds_session(session); 2416 2381 if (queue_work(mdsc->fsc->cap_wq, 2417 2382 &session->s_cap_release_work)) { 2418 - dout("cap release work queued\n"); 2383 + doutc(cl, "cap release work queued\n"); 2419 2384 } else { 2420 2385 ceph_put_mds_session(session); 2421 - dout("failed to queue cap release work\n"); 2386 + doutc(cl, "failed to queue cap release work\n"); 2422 2387 } 2423 2388 } 2424 2389 ··· 2447 2410 2448 2411 void ceph_queue_cap_reclaim_work(struct ceph_mds_client *mdsc) 2449 2412 { 2413 + struct ceph_client *cl = mdsc->fsc->client; 2450 2414 if (mdsc->stopping) 2451 2415 return; 2452 2416 2453 2417 if (queue_work(mdsc->fsc->cap_wq, &mdsc->cap_reclaim_work)) { 2454 - dout("caps reclaim work queued\n"); 2418 + doutc(cl, "caps reclaim work queued\n"); 2455 2419 } else { 2456 - dout("failed to queue caps release work\n"); 2420 + doutc(cl, "failed to queue caps release work\n"); 2457 2421 } 2458 2422 } 2459 2423 ··· 2626 2588 2627 2589 /** 2628 2590 * ceph_mdsc_build_path - build a path string to a given dentry 2591 + * @mdsc: mds client 2629 2592 * @dentry: dentry to which path should be built 2630 2593 * @plen: returned length of string 2631 2594 * @pbase: returned base inode number ··· 2646 2607 * Encode hidden .snap dirs as a double /, i.e. 2647 2608 * foo/.snap/bar -> foo//bar 2648 2609 */ 2649 - char *ceph_mdsc_build_path(struct dentry *dentry, int *plen, u64 *pbase, 2650 - int for_wire) 2610 + char *ceph_mdsc_build_path(struct ceph_mds_client *mdsc, struct dentry *dentry, 2611 + int *plen, u64 *pbase, int for_wire) 2651 2612 { 2613 + struct ceph_client *cl = mdsc->fsc->client; 2652 2614 struct dentry *cur; 2653 2615 struct inode *inode; 2654 2616 char *path; ··· 2675 2635 spin_lock(&cur->d_lock); 2676 2636 inode = d_inode(cur); 2677 2637 if (inode && ceph_snap(inode) == CEPH_SNAPDIR) { 2678 - dout("build_path path+%d: %p SNAPDIR\n", 2679 - pos, cur); 2638 + doutc(cl, "path+%d: %p SNAPDIR\n", pos, cur); 2680 2639 spin_unlock(&cur->d_lock); 2681 2640 parent = dget_parent(cur); 2682 2641 } else if (for_wire && inode && dentry != cur && ··· 2753 2714 * A rename didn't occur, but somehow we didn't end up where 2754 2715 * we thought we would. Throw a warning and try again. 2755 2716 */ 2756 - pr_warn("build_path did not end path lookup where expected (pos = %d)\n", 2757 - pos); 2717 + pr_warn_client(cl, "did not end path lookup where expected (pos = %d)\n", 2718 + pos); 2758 2719 goto retry; 2759 2720 } 2760 2721 2761 2722 *pbase = base; 2762 2723 *plen = PATH_MAX - 1 - pos; 2763 - dout("build_path on %p %d built %llx '%.*s'\n", 2764 - dentry, d_count(dentry), base, *plen, path + pos); 2724 + doutc(cl, "on %p %d built %llx '%.*s'\n", dentry, d_count(dentry), 2725 + base, *plen, path + pos); 2765 2726 return path + pos; 2766 2727 } 2767 2728 2768 - static int build_dentry_path(struct dentry *dentry, struct inode *dir, 2769 - const char **ppath, int *ppathlen, u64 *pino, 2770 - bool *pfreepath, bool parent_locked) 2729 + static int build_dentry_path(struct ceph_mds_client *mdsc, struct dentry *dentry, 2730 + struct inode *dir, const char **ppath, int *ppathlen, 2731 + u64 *pino, bool *pfreepath, bool parent_locked) 2771 2732 { 2772 2733 char *path; 2773 2734 ··· 2783 2744 return 0; 2784 2745 } 2785 2746 rcu_read_unlock(); 2786 - path = ceph_mdsc_build_path(dentry, ppathlen, pino, 1); 2747 + path = ceph_mdsc_build_path(mdsc, dentry, ppathlen, pino, 1); 2787 2748 if (IS_ERR(path)) 2788 2749 return PTR_ERR(path); 2789 2750 *ppath = path; ··· 2795 2756 const char **ppath, int *ppathlen, u64 *pino, 2796 2757 bool *pfreepath) 2797 2758 { 2759 + struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(inode->i_sb); 2798 2760 struct dentry *dentry; 2799 2761 char *path; 2800 2762 ··· 2805 2765 return 0; 2806 2766 } 2807 2767 dentry = d_find_alias(inode); 2808 - path = ceph_mdsc_build_path(dentry, ppathlen, pino, 1); 2768 + path = ceph_mdsc_build_path(mdsc, dentry, ppathlen, pino, 1); 2809 2769 dput(dentry); 2810 2770 if (IS_ERR(path)) 2811 2771 return PTR_ERR(path); ··· 2818 2778 * request arguments may be specified via an inode *, a dentry *, or 2819 2779 * an explicit ino+path. 2820 2780 */ 2821 - static int set_request_path_attr(struct inode *rinode, struct dentry *rdentry, 2822 - struct inode *rdiri, const char *rpath, 2823 - u64 rino, const char **ppath, int *pathlen, 2824 - u64 *ino, bool *freepath, bool parent_locked) 2781 + static int set_request_path_attr(struct ceph_mds_client *mdsc, struct inode *rinode, 2782 + struct dentry *rdentry, struct inode *rdiri, 2783 + const char *rpath, u64 rino, const char **ppath, 2784 + int *pathlen, u64 *ino, bool *freepath, 2785 + bool parent_locked) 2825 2786 { 2787 + struct ceph_client *cl = mdsc->fsc->client; 2826 2788 int r = 0; 2827 2789 2828 2790 if (rinode) { 2829 2791 r = build_inode_path(rinode, ppath, pathlen, ino, freepath); 2830 - dout(" inode %p %llx.%llx\n", rinode, ceph_ino(rinode), 2831 - ceph_snap(rinode)); 2792 + doutc(cl, " inode %p %llx.%llx\n", rinode, ceph_ino(rinode), 2793 + ceph_snap(rinode)); 2832 2794 } else if (rdentry) { 2833 - r = build_dentry_path(rdentry, rdiri, ppath, pathlen, ino, 2795 + r = build_dentry_path(mdsc, rdentry, rdiri, ppath, pathlen, ino, 2834 2796 freepath, parent_locked); 2835 - dout(" dentry %p %llx/%.*s\n", rdentry, *ino, *pathlen, 2836 - *ppath); 2797 + doutc(cl, " dentry %p %llx/%.*s\n", rdentry, *ino, *pathlen, *ppath); 2837 2798 } else if (rpath || rino) { 2838 2799 *ino = rino; 2839 2800 *ppath = rpath; 2840 2801 *pathlen = rpath ? strlen(rpath) : 0; 2841 - dout(" path %.*s\n", *pathlen, rpath); 2802 + doutc(cl, " path %.*s\n", *pathlen, rpath); 2842 2803 } 2843 2804 2844 2805 return r; ··· 2881 2840 } 2882 2841 } 2883 2842 2843 + static inline u16 mds_supported_head_version(struct ceph_mds_session *session) 2844 + { 2845 + if (!test_bit(CEPHFS_FEATURE_32BITS_RETRY_FWD, &session->s_features)) 2846 + return 1; 2847 + 2848 + if (!test_bit(CEPHFS_FEATURE_HAS_OWNER_UIDGID, &session->s_features)) 2849 + return 2; 2850 + 2851 + return CEPH_MDS_REQUEST_HEAD_VERSION; 2852 + } 2853 + 2884 2854 static struct ceph_mds_request_head_legacy * 2885 2855 find_legacy_request_head(void *p, u64 features) 2886 2856 { ··· 2913 2861 { 2914 2862 int mds = session->s_mds; 2915 2863 struct ceph_mds_client *mdsc = session->s_mdsc; 2864 + struct ceph_client *cl = mdsc->fsc->client; 2916 2865 struct ceph_msg *msg; 2917 2866 struct ceph_mds_request_head_legacy *lhead; 2918 2867 const char *path1 = NULL; ··· 2927 2874 void *p, *end; 2928 2875 int ret; 2929 2876 bool legacy = !(session->s_con.peer_features & CEPH_FEATURE_FS_BTIME); 2930 - bool old_version = !test_bit(CEPHFS_FEATURE_32BITS_RETRY_FWD, 2931 - &session->s_features); 2877 + u16 request_head_version = mds_supported_head_version(session); 2878 + kuid_t caller_fsuid = req->r_cred->fsuid; 2879 + kgid_t caller_fsgid = req->r_cred->fsgid; 2932 2880 2933 - ret = set_request_path_attr(req->r_inode, req->r_dentry, 2881 + ret = set_request_path_attr(mdsc, req->r_inode, req->r_dentry, 2934 2882 req->r_parent, req->r_path1, req->r_ino1.ino, 2935 2883 &path1, &pathlen1, &ino1, &freepath1, 2936 2884 test_bit(CEPH_MDS_R_PARENT_LOCKED, ··· 2945 2891 if (req->r_old_dentry && 2946 2892 !(req->r_old_dentry->d_flags & DCACHE_DISCONNECTED)) 2947 2893 old_dentry = req->r_old_dentry; 2948 - ret = set_request_path_attr(NULL, old_dentry, 2894 + ret = set_request_path_attr(mdsc, NULL, old_dentry, 2949 2895 req->r_old_dentry_dir, 2950 2896 req->r_path2, req->r_ino2.ino, 2951 2897 &path2, &pathlen2, &ino2, &freepath2, true); ··· 2970 2916 */ 2971 2917 if (legacy) 2972 2918 len = sizeof(struct ceph_mds_request_head_legacy); 2973 - else if (old_version) 2919 + else if (request_head_version == 1) 2974 2920 len = sizeof(struct ceph_mds_request_head_old); 2921 + else if (request_head_version == 2) 2922 + len = offsetofend(struct ceph_mds_request_head, ext_num_fwd); 2975 2923 else 2976 2924 len = sizeof(struct ceph_mds_request_head); 2977 2925 ··· 3023 2967 lhead = find_legacy_request_head(msg->front.iov_base, 3024 2968 session->s_con.peer_features); 3025 2969 2970 + if ((req->r_mnt_idmap != &nop_mnt_idmap) && 2971 + !test_bit(CEPHFS_FEATURE_HAS_OWNER_UIDGID, &session->s_features)) { 2972 + WARN_ON_ONCE(!IS_CEPH_MDS_OP_NEWINODE(req->r_op)); 2973 + 2974 + if (enable_unsafe_idmap) { 2975 + pr_warn_once_client(cl, 2976 + "idmapped mount is used and CEPHFS_FEATURE_HAS_OWNER_UIDGID" 2977 + " is not supported by MDS. UID/GID-based restrictions may" 2978 + " not work properly.\n"); 2979 + 2980 + caller_fsuid = from_vfsuid(req->r_mnt_idmap, &init_user_ns, 2981 + VFSUIDT_INIT(req->r_cred->fsuid)); 2982 + caller_fsgid = from_vfsgid(req->r_mnt_idmap, &init_user_ns, 2983 + VFSGIDT_INIT(req->r_cred->fsgid)); 2984 + } else { 2985 + pr_err_ratelimited_client(cl, 2986 + "idmapped mount is used and CEPHFS_FEATURE_HAS_OWNER_UIDGID" 2987 + " is not supported by MDS. Fail request with -EIO.\n"); 2988 + 2989 + ret = -EIO; 2990 + goto out_err; 2991 + } 2992 + } 2993 + 3026 2994 /* 3027 2995 * The ceph_mds_request_head_legacy didn't contain a version field, and 3028 2996 * one was added when we moved the message version from 3->4. ··· 3054 2974 if (legacy) { 3055 2975 msg->hdr.version = cpu_to_le16(3); 3056 2976 p = msg->front.iov_base + sizeof(*lhead); 3057 - } else if (old_version) { 2977 + } else if (request_head_version == 1) { 3058 2978 struct ceph_mds_request_head_old *ohead = msg->front.iov_base; 3059 2979 3060 2980 msg->hdr.version = cpu_to_le16(4); 3061 2981 ohead->version = cpu_to_le16(1); 3062 2982 p = msg->front.iov_base + sizeof(*ohead); 3063 - } else { 2983 + } else if (request_head_version == 2) { 3064 2984 struct ceph_mds_request_head *nhead = msg->front.iov_base; 3065 2985 3066 2986 msg->hdr.version = cpu_to_le16(6); 2987 + nhead->version = cpu_to_le16(2); 2988 + 2989 + p = msg->front.iov_base + offsetofend(struct ceph_mds_request_head, ext_num_fwd); 2990 + } else { 2991 + struct ceph_mds_request_head *nhead = msg->front.iov_base; 2992 + kuid_t owner_fsuid; 2993 + kgid_t owner_fsgid; 2994 + 2995 + msg->hdr.version = cpu_to_le16(6); 3067 2996 nhead->version = cpu_to_le16(CEPH_MDS_REQUEST_HEAD_VERSION); 2997 + nhead->struct_len = cpu_to_le32(sizeof(struct ceph_mds_request_head)); 2998 + 2999 + if (IS_CEPH_MDS_OP_NEWINODE(req->r_op)) { 3000 + owner_fsuid = from_vfsuid(req->r_mnt_idmap, &init_user_ns, 3001 + VFSUIDT_INIT(req->r_cred->fsuid)); 3002 + owner_fsgid = from_vfsgid(req->r_mnt_idmap, &init_user_ns, 3003 + VFSGIDT_INIT(req->r_cred->fsgid)); 3004 + nhead->owner_uid = cpu_to_le32(from_kuid(&init_user_ns, owner_fsuid)); 3005 + nhead->owner_gid = cpu_to_le32(from_kgid(&init_user_ns, owner_fsgid)); 3006 + } else { 3007 + nhead->owner_uid = cpu_to_le32(-1); 3008 + nhead->owner_gid = cpu_to_le32(-1); 3009 + } 3010 + 3068 3011 p = msg->front.iov_base + sizeof(*nhead); 3069 3012 } 3070 3013 ··· 3096 2993 lhead->mdsmap_epoch = cpu_to_le32(mdsc->mdsmap->m_epoch); 3097 2994 lhead->op = cpu_to_le32(req->r_op); 3098 2995 lhead->caller_uid = cpu_to_le32(from_kuid(&init_user_ns, 3099 - req->r_cred->fsuid)); 2996 + caller_fsuid)); 3100 2997 lhead->caller_gid = cpu_to_le32(from_kgid(&init_user_ns, 3101 - req->r_cred->fsgid)); 2998 + caller_fsgid)); 3102 2999 lhead->ino = cpu_to_le64(req->r_deleg_ino); 3103 3000 lhead->args = req->r_args; 3104 3001 ··· 3202 3099 { 3203 3100 int mds = session->s_mds; 3204 3101 struct ceph_mds_client *mdsc = session->s_mdsc; 3102 + struct ceph_client *cl = mdsc->fsc->client; 3205 3103 struct ceph_mds_request_head_legacy *lhead; 3206 3104 struct ceph_mds_request_head *nhead; 3207 3105 struct ceph_msg *msg; ··· 3221 3117 old_max_retry = 1 << (old_max_retry * BITS_PER_BYTE); 3222 3118 if ((old_version && req->r_attempts >= old_max_retry) || 3223 3119 ((uint32_t)req->r_attempts >= U32_MAX)) { 3224 - pr_warn_ratelimited("%s request tid %llu seq overflow\n", 3225 - __func__, req->r_tid); 3120 + pr_warn_ratelimited_client(cl, "request tid %llu seq overflow\n", 3121 + req->r_tid); 3226 3122 return -EMULTIHOP; 3227 3123 } 3228 3124 } ··· 3237 3133 else 3238 3134 req->r_sent_on_mseq = -1; 3239 3135 } 3240 - dout("%s %p tid %lld %s (attempt %d)\n", __func__, req, 3241 - req->r_tid, ceph_mds_op_name(req->r_op), req->r_attempts); 3136 + doutc(cl, "%p tid %lld %s (attempt %d)\n", req, req->r_tid, 3137 + ceph_mds_op_name(req->r_op), req->r_attempts); 3242 3138 3243 3139 if (test_bit(CEPH_MDS_R_GOT_UNSAFE, &req->r_req_flags)) { 3244 3140 void *p; ··· 3306 3202 nhead->ext_num_retry = cpu_to_le32(req->r_attempts - 1); 3307 3203 } 3308 3204 3309 - dout(" r_parent = %p\n", req->r_parent); 3205 + doutc(cl, " r_parent = %p\n", req->r_parent); 3310 3206 return 0; 3311 3207 } 3312 3208 ··· 3334 3230 static void __do_request(struct ceph_mds_client *mdsc, 3335 3231 struct ceph_mds_request *req) 3336 3232 { 3233 + struct ceph_client *cl = mdsc->fsc->client; 3337 3234 struct ceph_mds_session *session = NULL; 3338 3235 int mds = -1; 3339 3236 int err = 0; ··· 3347 3242 } 3348 3243 3349 3244 if (READ_ONCE(mdsc->fsc->mount_state) == CEPH_MOUNT_FENCE_IO) { 3350 - dout("do_request metadata corrupted\n"); 3245 + doutc(cl, "metadata corrupted\n"); 3351 3246 err = -EIO; 3352 3247 goto finish; 3353 3248 } 3354 3249 if (req->r_timeout && 3355 3250 time_after_eq(jiffies, req->r_started + req->r_timeout)) { 3356 - dout("do_request timed out\n"); 3251 + doutc(cl, "timed out\n"); 3357 3252 err = -ETIMEDOUT; 3358 3253 goto finish; 3359 3254 } 3360 3255 if (READ_ONCE(mdsc->fsc->mount_state) == CEPH_MOUNT_SHUTDOWN) { 3361 - dout("do_request forced umount\n"); 3256 + doutc(cl, "forced umount\n"); 3362 3257 err = -EIO; 3363 3258 goto finish; 3364 3259 } 3365 3260 if (READ_ONCE(mdsc->fsc->mount_state) == CEPH_MOUNT_MOUNTING) { 3366 3261 if (mdsc->mdsmap_err) { 3367 3262 err = mdsc->mdsmap_err; 3368 - dout("do_request mdsmap err %d\n", err); 3263 + doutc(cl, "mdsmap err %d\n", err); 3369 3264 goto finish; 3370 3265 } 3371 3266 if (mdsc->mdsmap->m_epoch == 0) { 3372 - dout("do_request no mdsmap, waiting for map\n"); 3267 + doutc(cl, "no mdsmap, waiting for map\n"); 3373 3268 list_add(&req->r_wait, &mdsc->waiting_for_map); 3374 3269 return; 3375 3270 } ··· 3390 3285 err = -EJUKEBOX; 3391 3286 goto finish; 3392 3287 } 3393 - dout("do_request no mds or not active, waiting for map\n"); 3288 + doutc(cl, "no mds or not active, waiting for map\n"); 3394 3289 list_add(&req->r_wait, &mdsc->waiting_for_map); 3395 3290 return; 3396 3291 } ··· 3406 3301 } 3407 3302 req->r_session = ceph_get_mds_session(session); 3408 3303 3409 - dout("do_request mds%d session %p state %s\n", mds, session, 3410 - ceph_session_state_name(session->s_state)); 3304 + doutc(cl, "mds%d session %p state %s\n", mds, session, 3305 + ceph_session_state_name(session->s_state)); 3411 3306 3412 3307 /* 3413 3308 * The old ceph will crash the MDSs when see unknown OPs ··· 3498 3393 spin_lock(&ci->i_ceph_lock); 3499 3394 cap = ci->i_auth_cap; 3500 3395 if (ci->i_ceph_flags & CEPH_I_ASYNC_CREATE && mds != cap->mds) { 3501 - dout("do_request session changed for auth cap %d -> %d\n", 3502 - cap->session->s_mds, session->s_mds); 3396 + doutc(cl, "session changed for auth cap %d -> %d\n", 3397 + cap->session->s_mds, session->s_mds); 3503 3398 3504 3399 /* Remove the auth cap from old session */ 3505 3400 spin_lock(&cap->session->s_cap_lock); ··· 3526 3421 ceph_put_mds_session(session); 3527 3422 finish: 3528 3423 if (err) { 3529 - dout("__do_request early error %d\n", err); 3424 + doutc(cl, "early error %d\n", err); 3530 3425 req->r_err = err; 3531 3426 complete_request(mdsc, req); 3532 3427 __unregister_request(mdsc, req); ··· 3540 3435 static void __wake_requests(struct ceph_mds_client *mdsc, 3541 3436 struct list_head *head) 3542 3437 { 3438 + struct ceph_client *cl = mdsc->fsc->client; 3543 3439 struct ceph_mds_request *req; 3544 3440 LIST_HEAD(tmp_list); 3545 3441 ··· 3550 3444 req = list_entry(tmp_list.next, 3551 3445 struct ceph_mds_request, r_wait); 3552 3446 list_del_init(&req->r_wait); 3553 - dout(" wake request %p tid %llu\n", req, req->r_tid); 3447 + doutc(cl, " wake request %p tid %llu\n", req, 3448 + req->r_tid); 3554 3449 __do_request(mdsc, req); 3555 3450 } 3556 3451 } ··· 3562 3455 */ 3563 3456 static void kick_requests(struct ceph_mds_client *mdsc, int mds) 3564 3457 { 3458 + struct ceph_client *cl = mdsc->fsc->client; 3565 3459 struct ceph_mds_request *req; 3566 3460 struct rb_node *p = rb_first(&mdsc->request_tree); 3567 3461 3568 - dout("kick_requests mds%d\n", mds); 3462 + doutc(cl, "kick_requests mds%d\n", mds); 3569 3463 while (p) { 3570 3464 req = rb_entry(p, struct ceph_mds_request, r_node); 3571 3465 p = rb_next(p); ··· 3576 3468 continue; /* only new requests */ 3577 3469 if (req->r_session && 3578 3470 req->r_session->s_mds == mds) { 3579 - dout(" kicking tid %llu\n", req->r_tid); 3471 + doutc(cl, " kicking tid %llu\n", req->r_tid); 3580 3472 list_del_init(&req->r_wait); 3581 3473 __do_request(mdsc, req); 3582 3474 } ··· 3586 3478 int ceph_mdsc_submit_request(struct ceph_mds_client *mdsc, struct inode *dir, 3587 3479 struct ceph_mds_request *req) 3588 3480 { 3481 + struct ceph_client *cl = mdsc->fsc->client; 3589 3482 int err = 0; 3590 3483 3591 3484 /* take CAP_PIN refs for r_inode, r_parent, r_old_dentry */ ··· 3608 3499 if (req->r_inode) { 3609 3500 err = ceph_wait_on_async_create(req->r_inode); 3610 3501 if (err) { 3611 - dout("%s: wait for async create returned: %d\n", 3612 - __func__, err); 3502 + doutc(cl, "wait for async create returned: %d\n", err); 3613 3503 return err; 3614 3504 } 3615 3505 } ··· 3616 3508 if (!err && req->r_old_inode) { 3617 3509 err = ceph_wait_on_async_create(req->r_old_inode); 3618 3510 if (err) { 3619 - dout("%s: wait for async create returned: %d\n", 3620 - __func__, err); 3511 + doutc(cl, "wait for async create returned: %d\n", err); 3621 3512 return err; 3622 3513 } 3623 3514 } 3624 3515 3625 - dout("submit_request on %p for inode %p\n", req, dir); 3516 + doutc(cl, "submit_request on %p for inode %p\n", req, dir); 3626 3517 mutex_lock(&mdsc->mutex); 3627 3518 __register_request(mdsc, req, dir); 3628 3519 __do_request(mdsc, req); ··· 3634 3527 struct ceph_mds_request *req, 3635 3528 ceph_mds_request_wait_callback_t wait_func) 3636 3529 { 3530 + struct ceph_client *cl = mdsc->fsc->client; 3637 3531 int err; 3638 3532 3639 3533 /* wait */ 3640 - dout("do_request waiting\n"); 3534 + doutc(cl, "do_request waiting\n"); 3641 3535 if (wait_func) { 3642 3536 err = wait_func(mdsc, req); 3643 3537 } else { ··· 3652 3544 else 3653 3545 err = timeleft; /* killed */ 3654 3546 } 3655 - dout("do_request waited, got %d\n", err); 3547 + doutc(cl, "do_request waited, got %d\n", err); 3656 3548 mutex_lock(&mdsc->mutex); 3657 3549 3658 3550 /* only abort if we didn't race with a real reply */ 3659 3551 if (test_bit(CEPH_MDS_R_GOT_RESULT, &req->r_req_flags)) { 3660 3552 err = le32_to_cpu(req->r_reply_info.head->result); 3661 3553 } else if (err < 0) { 3662 - dout("aborted request %lld with %d\n", req->r_tid, err); 3554 + doutc(cl, "aborted request %lld with %d\n", req->r_tid, err); 3663 3555 3664 3556 /* 3665 3557 * ensure we aren't running concurrently with ··· 3690 3582 struct inode *dir, 3691 3583 struct ceph_mds_request *req) 3692 3584 { 3585 + struct ceph_client *cl = mdsc->fsc->client; 3693 3586 int err; 3694 3587 3695 - dout("do_request on %p\n", req); 3588 + doutc(cl, "do_request on %p\n", req); 3696 3589 3697 3590 /* issue */ 3698 3591 err = ceph_mdsc_submit_request(mdsc, dir, req); 3699 3592 if (!err) 3700 3593 err = ceph_mdsc_wait_request(mdsc, req, NULL); 3701 - dout("do_request %p done, result %d\n", req, err); 3594 + doutc(cl, "do_request %p done, result %d\n", req, err); 3702 3595 return err; 3703 3596 } 3704 3597 ··· 3711 3602 { 3712 3603 struct inode *dir = req->r_parent; 3713 3604 struct inode *old_dir = req->r_old_dentry_dir; 3605 + struct ceph_client *cl = req->r_mdsc->fsc->client; 3714 3606 3715 - dout("invalidate_dir_request %p %p (complete, lease(s))\n", dir, old_dir); 3607 + doutc(cl, "invalidate_dir_request %p %p (complete, lease(s))\n", 3608 + dir, old_dir); 3716 3609 3717 3610 ceph_dir_clear_complete(dir); 3718 3611 if (old_dir) ··· 3735 3624 static void handle_reply(struct ceph_mds_session *session, struct ceph_msg *msg) 3736 3625 { 3737 3626 struct ceph_mds_client *mdsc = session->s_mdsc; 3627 + struct ceph_client *cl = mdsc->fsc->client; 3738 3628 struct ceph_mds_request *req; 3739 3629 struct ceph_mds_reply_head *head = msg->front.iov_base; 3740 3630 struct ceph_mds_reply_info_parsed *rinfo; /* parsed reply info */ ··· 3746 3634 bool close_sessions = false; 3747 3635 3748 3636 if (msg->front.iov_len < sizeof(*head)) { 3749 - pr_err("mdsc_handle_reply got corrupt (short) reply\n"); 3637 + pr_err_client(cl, "got corrupt (short) reply\n"); 3750 3638 ceph_msg_dump(msg); 3751 3639 return; 3752 3640 } ··· 3756 3644 mutex_lock(&mdsc->mutex); 3757 3645 req = lookup_get_request(mdsc, tid); 3758 3646 if (!req) { 3759 - dout("handle_reply on unknown tid %llu\n", tid); 3647 + doutc(cl, "on unknown tid %llu\n", tid); 3760 3648 mutex_unlock(&mdsc->mutex); 3761 3649 return; 3762 3650 } 3763 - dout("handle_reply %p\n", req); 3651 + doutc(cl, "handle_reply %p\n", req); 3764 3652 3765 3653 /* correct session? */ 3766 3654 if (req->r_session != session) { 3767 - pr_err("mdsc_handle_reply got %llu on session mds%d" 3768 - " not mds%d\n", tid, session->s_mds, 3769 - req->r_session ? req->r_session->s_mds : -1); 3655 + pr_err_client(cl, "got %llu on session mds%d not mds%d\n", 3656 + tid, session->s_mds, 3657 + req->r_session ? req->r_session->s_mds : -1); 3770 3658 mutex_unlock(&mdsc->mutex); 3771 3659 goto out; 3772 3660 } ··· 3774 3662 /* dup? */ 3775 3663 if ((test_bit(CEPH_MDS_R_GOT_UNSAFE, &req->r_req_flags) && !head->safe) || 3776 3664 (test_bit(CEPH_MDS_R_GOT_SAFE, &req->r_req_flags) && head->safe)) { 3777 - pr_warn("got a dup %s reply on %llu from mds%d\n", 3778 - head->safe ? "safe" : "unsafe", tid, mds); 3665 + pr_warn_client(cl, "got a dup %s reply on %llu from mds%d\n", 3666 + head->safe ? "safe" : "unsafe", tid, mds); 3779 3667 mutex_unlock(&mdsc->mutex); 3780 3668 goto out; 3781 3669 } 3782 3670 if (test_bit(CEPH_MDS_R_GOT_SAFE, &req->r_req_flags)) { 3783 - pr_warn("got unsafe after safe on %llu from mds%d\n", 3784 - tid, mds); 3671 + pr_warn_client(cl, "got unsafe after safe on %llu from mds%d\n", 3672 + tid, mds); 3785 3673 mutex_unlock(&mdsc->mutex); 3786 3674 goto out; 3787 3675 } ··· 3804 3692 * response. And even if it did, there is nothing 3805 3693 * useful we could do with a revised return value. 3806 3694 */ 3807 - dout("got safe reply %llu, mds%d\n", tid, mds); 3695 + doutc(cl, "got safe reply %llu, mds%d\n", tid, mds); 3808 3696 3809 3697 mutex_unlock(&mdsc->mutex); 3810 3698 goto out; ··· 3814 3702 list_add_tail(&req->r_unsafe_item, &req->r_session->s_unsafe); 3815 3703 } 3816 3704 3817 - dout("handle_reply tid %lld result %d\n", tid, result); 3705 + doutc(cl, "tid %lld result %d\n", tid, result); 3818 3706 if (test_bit(CEPHFS_FEATURE_REPLY_ENCODING, &session->s_features)) 3819 3707 err = parse_reply_info(session, msg, req, (u64)-1); 3820 3708 else ··· 3854 3742 3855 3743 mutex_lock(&session->s_mutex); 3856 3744 if (err < 0) { 3857 - pr_err("mdsc_handle_reply got corrupt reply mds%d(tid:%lld)\n", mds, tid); 3745 + pr_err_client(cl, "got corrupt reply mds%d(tid:%lld)\n", 3746 + mds, tid); 3858 3747 ceph_msg_dump(msg); 3859 3748 goto out_err; 3860 3749 } ··· 3919 3806 set_bit(CEPH_MDS_R_GOT_RESULT, &req->r_req_flags); 3920 3807 } 3921 3808 } else { 3922 - dout("reply arrived after request %lld was aborted\n", tid); 3809 + doutc(cl, "reply arrived after request %lld was aborted\n", tid); 3923 3810 } 3924 3811 mutex_unlock(&mdsc->mutex); 3925 3812 ··· 3948 3835 struct ceph_mds_session *session, 3949 3836 struct ceph_msg *msg) 3950 3837 { 3838 + struct ceph_client *cl = mdsc->fsc->client; 3951 3839 struct ceph_mds_request *req; 3952 3840 u64 tid = le64_to_cpu(msg->hdr.tid); 3953 3841 u32 next_mds; ··· 3966 3852 req = lookup_get_request(mdsc, tid); 3967 3853 if (!req) { 3968 3854 mutex_unlock(&mdsc->mutex); 3969 - dout("forward tid %llu to mds%d - req dne\n", tid, next_mds); 3855 + doutc(cl, "forward tid %llu to mds%d - req dne\n", tid, next_mds); 3970 3856 return; /* dup reply? */ 3971 3857 } 3972 3858 3973 3859 if (test_bit(CEPH_MDS_R_ABORTED, &req->r_req_flags)) { 3974 - dout("forward tid %llu aborted, unregistering\n", tid); 3860 + doutc(cl, "forward tid %llu aborted, unregistering\n", tid); 3975 3861 __unregister_request(mdsc, req); 3976 3862 } else if (fwd_seq <= req->r_num_fwd || (uint32_t)fwd_seq >= U32_MAX) { 3977 3863 /* ··· 3987 3873 set_bit(CEPH_MDS_R_ABORTED, &req->r_req_flags); 3988 3874 mutex_unlock(&req->r_fill_mutex); 3989 3875 aborted = true; 3990 - pr_warn_ratelimited("forward tid %llu seq overflow\n", tid); 3876 + pr_warn_ratelimited_client(cl, "forward tid %llu seq overflow\n", 3877 + tid); 3991 3878 } else { 3992 3879 /* resend. forward race not possible; mds would drop */ 3993 - dout("forward tid %llu to mds%d (we resend)\n", tid, next_mds); 3880 + doutc(cl, "forward tid %llu to mds%d (we resend)\n", tid, next_mds); 3994 3881 BUG_ON(req->r_err); 3995 3882 BUG_ON(test_bit(CEPH_MDS_R_GOT_RESULT, &req->r_req_flags)); 3996 3883 req->r_attempts = 0; ··· 4009 3894 return; 4010 3895 4011 3896 bad: 4012 - pr_err("mdsc_handle_forward decode error err=%d\n", err); 3897 + pr_err_client(cl, "decode error err=%d\n", err); 4013 3898 ceph_msg_dump(msg); 4014 3899 } 4015 3900 ··· 4048 3933 struct ceph_msg *msg) 4049 3934 { 4050 3935 struct ceph_mds_client *mdsc = session->s_mdsc; 3936 + struct ceph_client *cl = mdsc->fsc->client; 4051 3937 int mds = session->s_mds; 4052 3938 int msg_version = le16_to_cpu(msg->hdr.version); 4053 3939 void *p = msg->front.iov_base; ··· 4096 3980 /* version >= 5, flags */ 4097 3981 ceph_decode_32_safe(&p, end, flags, bad); 4098 3982 if (flags & CEPH_SESSION_BLOCKLISTED) { 4099 - pr_warn("mds%d session blocklisted\n", session->s_mds); 3983 + pr_warn_client(cl, "mds%d session blocklisted\n", 3984 + session->s_mds); 4100 3985 blocklisted = true; 4101 3986 } 4102 3987 } ··· 4113 3996 4114 3997 mutex_lock(&session->s_mutex); 4115 3998 4116 - dout("handle_session mds%d %s %p state %s seq %llu\n", 4117 - mds, ceph_session_op_name(op), session, 4118 - ceph_session_state_name(session->s_state), seq); 3999 + doutc(cl, "mds%d %s %p state %s seq %llu\n", mds, 4000 + ceph_session_op_name(op), session, 4001 + ceph_session_state_name(session->s_state), seq); 4119 4002 4120 4003 if (session->s_state == CEPH_MDS_SESSION_HUNG) { 4121 4004 session->s_state = CEPH_MDS_SESSION_OPEN; 4122 - pr_info("mds%d came back\n", session->s_mds); 4005 + pr_info_client(cl, "mds%d came back\n", session->s_mds); 4123 4006 } 4124 4007 4125 4008 switch (op) { 4126 4009 case CEPH_SESSION_OPEN: 4127 4010 if (session->s_state == CEPH_MDS_SESSION_RECONNECTING) 4128 - pr_info("mds%d reconnect success\n", session->s_mds); 4011 + pr_info_client(cl, "mds%d reconnect success\n", 4012 + session->s_mds); 4129 4013 4130 4014 if (session->s_state == CEPH_MDS_SESSION_OPEN) { 4131 - pr_notice("mds%d is already opened\n", session->s_mds); 4015 + pr_notice_client(cl, "mds%d is already opened\n", 4016 + session->s_mds); 4132 4017 } else { 4133 4018 session->s_state = CEPH_MDS_SESSION_OPEN; 4134 4019 session->s_features = features; ··· 4160 4041 4161 4042 case CEPH_SESSION_CLOSE: 4162 4043 if (session->s_state == CEPH_MDS_SESSION_RECONNECTING) 4163 - pr_info("mds%d reconnect denied\n", session->s_mds); 4044 + pr_info_client(cl, "mds%d reconnect denied\n", 4045 + session->s_mds); 4164 4046 session->s_state = CEPH_MDS_SESSION_CLOSED; 4165 4047 cleanup_session_requests(mdsc, session); 4166 4048 remove_session_caps(session); ··· 4170 4050 break; 4171 4051 4172 4052 case CEPH_SESSION_STALE: 4173 - pr_info("mds%d caps went stale, renewing\n", 4174 - session->s_mds); 4053 + pr_info_client(cl, "mds%d caps went stale, renewing\n", 4054 + session->s_mds); 4175 4055 atomic_inc(&session->s_cap_gen); 4176 4056 session->s_cap_ttl = jiffies - 1; 4177 4057 send_renew_caps(mdsc, session); ··· 4192 4072 break; 4193 4073 4194 4074 case CEPH_SESSION_FORCE_RO: 4195 - dout("force_session_readonly %p\n", session); 4075 + doutc(cl, "force_session_readonly %p\n", session); 4196 4076 spin_lock(&session->s_cap_lock); 4197 4077 session->s_readonly = true; 4198 4078 spin_unlock(&session->s_cap_lock); ··· 4201 4081 4202 4082 case CEPH_SESSION_REJECT: 4203 4083 WARN_ON(session->s_state != CEPH_MDS_SESSION_OPENING); 4204 - pr_info("mds%d rejected session\n", session->s_mds); 4084 + pr_info_client(cl, "mds%d rejected session\n", 4085 + session->s_mds); 4205 4086 session->s_state = CEPH_MDS_SESSION_REJECTED; 4206 4087 cleanup_session_requests(mdsc, session); 4207 4088 remove_session_caps(session); ··· 4212 4091 break; 4213 4092 4214 4093 default: 4215 - pr_err("mdsc_handle_session bad op %d mds%d\n", op, mds); 4094 + pr_err_client(cl, "bad op %d mds%d\n", op, mds); 4216 4095 WARN_ON(1); 4217 4096 } 4218 4097 ··· 4229 4108 return; 4230 4109 4231 4110 bad: 4232 - pr_err("mdsc_handle_session corrupt message mds%d len %d\n", mds, 4233 - (int)msg->front.iov_len); 4111 + pr_err_client(cl, "corrupt message mds%d len %d\n", mds, 4112 + (int)msg->front.iov_len); 4234 4113 ceph_msg_dump(msg); 4235 4114 return; 4236 4115 } 4237 4116 4238 4117 void ceph_mdsc_release_dir_caps(struct ceph_mds_request *req) 4239 4118 { 4119 + struct ceph_client *cl = req->r_mdsc->fsc->client; 4240 4120 int dcaps; 4241 4121 4242 4122 dcaps = xchg(&req->r_dir_caps, 0); 4243 4123 if (dcaps) { 4244 - dout("releasing r_dir_caps=%s\n", ceph_cap_string(dcaps)); 4124 + doutc(cl, "releasing r_dir_caps=%s\n", ceph_cap_string(dcaps)); 4245 4125 ceph_put_cap_refs(ceph_inode(req->r_parent), dcaps); 4246 4126 } 4247 4127 } 4248 4128 4249 4129 void ceph_mdsc_release_dir_caps_no_check(struct ceph_mds_request *req) 4250 4130 { 4131 + struct ceph_client *cl = req->r_mdsc->fsc->client; 4251 4132 int dcaps; 4252 4133 4253 4134 dcaps = xchg(&req->r_dir_caps, 0); 4254 4135 if (dcaps) { 4255 - dout("releasing r_dir_caps=%s\n", ceph_cap_string(dcaps)); 4136 + doutc(cl, "releasing r_dir_caps=%s\n", ceph_cap_string(dcaps)); 4256 4137 ceph_put_cap_refs_no_check_caps(ceph_inode(req->r_parent), 4257 4138 dcaps); 4258 4139 } ··· 4269 4146 struct ceph_mds_request *req, *nreq; 4270 4147 struct rb_node *p; 4271 4148 4272 - dout("replay_unsafe_requests mds%d\n", session->s_mds); 4149 + doutc(mdsc->fsc->client, "mds%d\n", session->s_mds); 4273 4150 4274 4151 mutex_lock(&mdsc->mutex); 4275 4152 list_for_each_entry_safe(req, nreq, &session->s_unsafe, r_unsafe_item) ··· 4413 4290 */ 4414 4291 static int reconnect_caps_cb(struct inode *inode, int mds, void *arg) 4415 4292 { 4293 + struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(inode->i_sb); 4294 + struct ceph_client *cl = ceph_inode_to_client(inode); 4416 4295 union { 4417 4296 struct ceph_mds_cap_reconnect v2; 4418 4297 struct ceph_mds_cap_reconnect_v1 v1; ··· 4432 4307 dentry = d_find_primary(inode); 4433 4308 if (dentry) { 4434 4309 /* set pathbase to parent dir when msg_version >= 2 */ 4435 - path = ceph_mdsc_build_path(dentry, &pathlen, &pathbase, 4310 + path = ceph_mdsc_build_path(mdsc, dentry, &pathlen, &pathbase, 4436 4311 recon_state->msg_version >= 2); 4437 4312 dput(dentry); 4438 4313 if (IS_ERR(path)) { ··· 4451 4326 err = 0; 4452 4327 goto out_err; 4453 4328 } 4454 - dout(" adding %p ino %llx.%llx cap %p %lld %s\n", 4455 - inode, ceph_vinop(inode), cap, cap->cap_id, 4456 - ceph_cap_string(cap->issued)); 4329 + doutc(cl, " adding %p ino %llx.%llx cap %p %lld %s\n", inode, 4330 + ceph_vinop(inode), cap, cap->cap_id, 4331 + ceph_cap_string(cap->issued)); 4457 4332 4458 4333 cap->seq = 0; /* reset cap seq */ 4459 4334 cap->issue_seq = 0; /* and issue_seq */ ··· 4607 4482 { 4608 4483 struct rb_node *p; 4609 4484 struct ceph_pagelist *pagelist = recon_state->pagelist; 4485 + struct ceph_client *cl = mdsc->fsc->client; 4610 4486 int err = 0; 4611 4487 4612 4488 if (recon_state->msg_version >= 4) { ··· 4646 4520 ceph_pagelist_encode_32(pagelist, sizeof(sr_rec)); 4647 4521 } 4648 4522 4649 - dout(" adding snap realm %llx seq %lld parent %llx\n", 4650 - realm->ino, realm->seq, realm->parent_ino); 4523 + doutc(cl, " adding snap realm %llx seq %lld parent %llx\n", 4524 + realm->ino, realm->seq, realm->parent_ino); 4651 4525 sr_rec.ino = cpu_to_le64(realm->ino); 4652 4526 sr_rec.seq = cpu_to_le64(realm->seq); 4653 4527 sr_rec.parent = cpu_to_le64(realm->parent_ino); ··· 4676 4550 static void send_mds_reconnect(struct ceph_mds_client *mdsc, 4677 4551 struct ceph_mds_session *session) 4678 4552 { 4553 + struct ceph_client *cl = mdsc->fsc->client; 4679 4554 struct ceph_msg *reply; 4680 4555 int mds = session->s_mds; 4681 4556 int err = -ENOMEM; ··· 4685 4558 }; 4686 4559 LIST_HEAD(dispose); 4687 4560 4688 - pr_info("mds%d reconnect start\n", mds); 4561 + pr_info_client(cl, "mds%d reconnect start\n", mds); 4689 4562 4690 4563 recon_state.pagelist = ceph_pagelist_alloc(GFP_NOFS); 4691 4564 if (!recon_state.pagelist) ··· 4701 4574 session->s_state = CEPH_MDS_SESSION_RECONNECTING; 4702 4575 session->s_seq = 0; 4703 4576 4704 - dout("session %p state %s\n", session, 4705 - ceph_session_state_name(session->s_state)); 4577 + doutc(cl, "session %p state %s\n", session, 4578 + ceph_session_state_name(session->s_state)); 4706 4579 4707 4580 atomic_inc(&session->s_cap_gen); 4708 4581 ··· 4836 4709 fail_nomsg: 4837 4710 ceph_pagelist_release(recon_state.pagelist); 4838 4711 fail_nopagelist: 4839 - pr_err("error %d preparing reconnect for mds%d\n", err, mds); 4712 + pr_err_client(cl, "error %d preparing reconnect for mds%d\n", 4713 + err, mds); 4840 4714 return; 4841 4715 } 4842 4716 ··· 4856 4728 int oldstate, newstate; 4857 4729 struct ceph_mds_session *s; 4858 4730 unsigned long targets[DIV_ROUND_UP(CEPH_MAX_MDS, sizeof(unsigned long))] = {0}; 4731 + struct ceph_client *cl = mdsc->fsc->client; 4859 4732 4860 - dout("check_new_map new %u old %u\n", 4861 - newmap->m_epoch, oldmap->m_epoch); 4733 + doutc(cl, "new %u old %u\n", newmap->m_epoch, oldmap->m_epoch); 4862 4734 4863 4735 if (newmap->m_info) { 4864 4736 for (i = 0; i < newmap->possible_max_rank; i++) { ··· 4874 4746 oldstate = ceph_mdsmap_get_state(oldmap, i); 4875 4747 newstate = ceph_mdsmap_get_state(newmap, i); 4876 4748 4877 - dout("check_new_map mds%d state %s%s -> %s%s (session %s)\n", 4878 - i, ceph_mds_state_name(oldstate), 4879 - ceph_mdsmap_is_laggy(oldmap, i) ? " (laggy)" : "", 4880 - ceph_mds_state_name(newstate), 4881 - ceph_mdsmap_is_laggy(newmap, i) ? " (laggy)" : "", 4882 - ceph_session_state_name(s->s_state)); 4749 + doutc(cl, "mds%d state %s%s -> %s%s (session %s)\n", 4750 + i, ceph_mds_state_name(oldstate), 4751 + ceph_mdsmap_is_laggy(oldmap, i) ? " (laggy)" : "", 4752 + ceph_mds_state_name(newstate), 4753 + ceph_mdsmap_is_laggy(newmap, i) ? " (laggy)" : "", 4754 + ceph_session_state_name(s->s_state)); 4883 4755 4884 4756 if (i >= newmap->possible_max_rank) { 4885 4757 /* force close session for stopped mds */ ··· 4932 4804 newstate >= CEPH_MDS_STATE_ACTIVE) { 4933 4805 if (oldstate != CEPH_MDS_STATE_CREATING && 4934 4806 oldstate != CEPH_MDS_STATE_STARTING) 4935 - pr_info("mds%d recovery completed\n", s->s_mds); 4807 + pr_info_client(cl, "mds%d recovery completed\n", 4808 + s->s_mds); 4936 4809 kick_requests(mdsc, i); 4937 4810 mutex_unlock(&mdsc->mutex); 4938 4811 mutex_lock(&s->s_mutex); ··· 4977 4848 s = __open_export_target_session(mdsc, i); 4978 4849 if (IS_ERR(s)) { 4979 4850 err = PTR_ERR(s); 4980 - pr_err("failed to open export target session, err %d\n", 4981 - err); 4851 + pr_err_client(cl, 4852 + "failed to open export target session, err %d\n", 4853 + err); 4982 4854 continue; 4983 4855 } 4984 4856 } 4985 - dout("send reconnect to export target mds.%d\n", i); 4857 + doutc(cl, "send reconnect to export target mds.%d\n", i); 4986 4858 mutex_unlock(&mdsc->mutex); 4987 4859 send_mds_reconnect(mdsc, s); 4988 4860 ceph_put_mds_session(s); ··· 4999 4869 if (s->s_state == CEPH_MDS_SESSION_OPEN || 5000 4870 s->s_state == CEPH_MDS_SESSION_HUNG || 5001 4871 s->s_state == CEPH_MDS_SESSION_CLOSING) { 5002 - dout(" connecting to export targets of laggy mds%d\n", 5003 - i); 4872 + doutc(cl, " connecting to export targets of laggy mds%d\n", i); 5004 4873 __open_export_target_sessions(mdsc, s); 5005 4874 } 5006 4875 } ··· 5026 4897 struct ceph_mds_session *session, 5027 4898 struct ceph_msg *msg) 5028 4899 { 4900 + struct ceph_client *cl = mdsc->fsc->client; 5029 4901 struct super_block *sb = mdsc->fsc->sb; 5030 4902 struct inode *inode; 5031 4903 struct dentry *parent, *dentry; ··· 5038 4908 struct qstr dname; 5039 4909 int release = 0; 5040 4910 5041 - dout("handle_lease from mds%d\n", mds); 4911 + doutc(cl, "from mds%d\n", mds); 5042 4912 5043 4913 if (!ceph_inc_mds_stopping_blocker(mdsc, session)) 5044 4914 return; ··· 5056 4926 5057 4927 /* lookup inode */ 5058 4928 inode = ceph_find_inode(sb, vino); 5059 - dout("handle_lease %s, ino %llx %p %.*s\n", 5060 - ceph_lease_op_name(h->action), vino.ino, inode, 5061 - dname.len, dname.name); 4929 + doutc(cl, "%s, ino %llx %p %.*s\n", ceph_lease_op_name(h->action), 4930 + vino.ino, inode, dname.len, dname.name); 5062 4931 5063 4932 mutex_lock(&session->s_mutex); 5064 4933 if (!inode) { 5065 - dout("handle_lease no inode %llx\n", vino.ino); 4934 + doutc(cl, "no inode %llx\n", vino.ino); 5066 4935 goto release; 5067 4936 } 5068 4937 5069 4938 /* dentry */ 5070 4939 parent = d_find_alias(inode); 5071 4940 if (!parent) { 5072 - dout("no parent dentry on inode %p\n", inode); 4941 + doutc(cl, "no parent dentry on inode %p\n", inode); 5073 4942 WARN_ON(1); 5074 4943 goto release; /* hrm... */ 5075 4944 } ··· 5128 4999 bad: 5129 5000 ceph_dec_mds_stopping_blocker(mdsc); 5130 5001 5131 - pr_err("corrupt lease message\n"); 5002 + pr_err_client(cl, "corrupt lease message\n"); 5132 5003 ceph_msg_dump(msg); 5133 5004 } 5134 5005 ··· 5136 5007 struct dentry *dentry, char action, 5137 5008 u32 seq) 5138 5009 { 5010 + struct ceph_client *cl = session->s_mdsc->fsc->client; 5139 5011 struct ceph_msg *msg; 5140 5012 struct ceph_mds_lease *lease; 5141 5013 struct inode *dir; 5142 5014 int len = sizeof(*lease) + sizeof(u32) + NAME_MAX; 5143 5015 5144 - dout("lease_send_msg identry %p %s to mds%d\n", 5145 - dentry, ceph_lease_op_name(action), session->s_mds); 5016 + doutc(cl, "identry %p %s to mds%d\n", dentry, ceph_lease_op_name(action), 5017 + session->s_mds); 5146 5018 5147 5019 msg = ceph_msg_new(CEPH_MSG_CLIENT_LEASE, len, GFP_NOFS, false); 5148 5020 if (!msg) ··· 5176 5046 5177 5047 static void maybe_recover_session(struct ceph_mds_client *mdsc) 5178 5048 { 5049 + struct ceph_client *cl = mdsc->fsc->client; 5179 5050 struct ceph_fs_client *fsc = mdsc->fsc; 5180 5051 5181 5052 if (!ceph_test_mount_opt(fsc, CLEANRECOVER)) ··· 5188 5057 if (!READ_ONCE(fsc->blocklisted)) 5189 5058 return; 5190 5059 5191 - pr_info("auto reconnect after blocklisted\n"); 5060 + pr_info_client(cl, "auto reconnect after blocklisted\n"); 5192 5061 ceph_force_reconnect(fsc->sb); 5193 5062 } 5194 5063 5195 5064 bool check_session_state(struct ceph_mds_session *s) 5196 5065 { 5066 + struct ceph_client *cl = s->s_mdsc->fsc->client; 5067 + 5197 5068 switch (s->s_state) { 5198 5069 case CEPH_MDS_SESSION_OPEN: 5199 5070 if (s->s_ttl && time_after(jiffies, s->s_ttl)) { 5200 5071 s->s_state = CEPH_MDS_SESSION_HUNG; 5201 - pr_info("mds%d hung\n", s->s_mds); 5072 + pr_info_client(cl, "mds%d hung\n", s->s_mds); 5202 5073 } 5203 5074 break; 5204 5075 case CEPH_MDS_SESSION_CLOSING: ··· 5220 5087 */ 5221 5088 void inc_session_sequence(struct ceph_mds_session *s) 5222 5089 { 5090 + struct ceph_client *cl = s->s_mdsc->fsc->client; 5091 + 5223 5092 lockdep_assert_held(&s->s_mutex); 5224 5093 5225 5094 s->s_seq++; ··· 5229 5094 if (s->s_state == CEPH_MDS_SESSION_CLOSING) { 5230 5095 int ret; 5231 5096 5232 - dout("resending session close request for mds%d\n", s->s_mds); 5097 + doutc(cl, "resending session close request for mds%d\n", s->s_mds); 5233 5098 ret = request_close_session(s); 5234 5099 if (ret < 0) 5235 - pr_err("unable to close session to mds%d: %d\n", 5236 - s->s_mds, ret); 5100 + pr_err_client(cl, "unable to close session to mds%d: %d\n", 5101 + s->s_mds, ret); 5237 5102 } 5238 5103 } 5239 5104 ··· 5262 5127 int renew_caps; 5263 5128 int i; 5264 5129 5265 - dout("mdsc delayed_work\n"); 5130 + doutc(mdsc->fsc->client, "mdsc delayed_work\n"); 5266 5131 5267 5132 if (mdsc->stopping >= CEPH_MDSC_STOPPING_FLUSHED) 5268 5133 return; ··· 5391 5256 */ 5392 5257 static void wait_requests(struct ceph_mds_client *mdsc) 5393 5258 { 5259 + struct ceph_client *cl = mdsc->fsc->client; 5394 5260 struct ceph_options *opts = mdsc->fsc->client->options; 5395 5261 struct ceph_mds_request *req; 5396 5262 ··· 5399 5263 if (__get_oldest_req(mdsc)) { 5400 5264 mutex_unlock(&mdsc->mutex); 5401 5265 5402 - dout("wait_requests waiting for requests\n"); 5266 + doutc(cl, "waiting for requests\n"); 5403 5267 wait_for_completion_timeout(&mdsc->safe_umount_waiters, 5404 5268 ceph_timeout_jiffies(opts->mount_timeout)); 5405 5269 5406 5270 /* tear down remaining requests */ 5407 5271 mutex_lock(&mdsc->mutex); 5408 5272 while ((req = __get_oldest_req(mdsc))) { 5409 - dout("wait_requests timed out on tid %llu\n", 5410 - req->r_tid); 5273 + doutc(cl, "timed out on tid %llu\n", req->r_tid); 5411 5274 list_del_init(&req->r_wait); 5412 5275 __unregister_request(mdsc, req); 5413 5276 } 5414 5277 } 5415 5278 mutex_unlock(&mdsc->mutex); 5416 - dout("wait_requests done\n"); 5279 + doutc(cl, "done\n"); 5417 5280 } 5418 5281 5419 5282 void send_flush_mdlog(struct ceph_mds_session *s) 5420 5283 { 5284 + struct ceph_client *cl = s->s_mdsc->fsc->client; 5421 5285 struct ceph_msg *msg; 5422 5286 5423 5287 /* ··· 5427 5291 return; 5428 5292 5429 5293 mutex_lock(&s->s_mutex); 5430 - dout("request mdlog flush to mds%d (%s)s seq %lld\n", s->s_mds, 5431 - ceph_session_state_name(s->s_state), s->s_seq); 5294 + doutc(cl, "request mdlog flush to mds%d (%s)s seq %lld\n", 5295 + s->s_mds, ceph_session_state_name(s->s_state), s->s_seq); 5432 5296 msg = ceph_create_session_msg(CEPH_SESSION_REQUEST_FLUSH_MDLOG, 5433 5297 s->s_seq); 5434 5298 if (!msg) { 5435 - pr_err("failed to request mdlog flush to mds%d (%s) seq %lld\n", 5436 - s->s_mds, ceph_session_state_name(s->s_state), s->s_seq); 5299 + pr_err_client(cl, "failed to request mdlog flush to mds%d (%s) seq %lld\n", 5300 + s->s_mds, ceph_session_state_name(s->s_state), s->s_seq); 5437 5301 } else { 5438 5302 ceph_con_send(&s->s_con, msg); 5439 5303 } ··· 5446 5310 */ 5447 5311 void ceph_mdsc_pre_umount(struct ceph_mds_client *mdsc) 5448 5312 { 5449 - dout("pre_umount\n"); 5313 + doutc(mdsc->fsc->client, "begin\n"); 5450 5314 mdsc->stopping = CEPH_MDSC_STOPPING_BEGIN; 5451 5315 5452 5316 ceph_mdsc_iterate_sessions(mdsc, send_flush_mdlog, true); ··· 5461 5325 ceph_msgr_flush(); 5462 5326 5463 5327 ceph_cleanup_quotarealms_inodes(mdsc); 5328 + doutc(mdsc->fsc->client, "done\n"); 5464 5329 } 5465 5330 5466 5331 /* ··· 5470 5333 static void flush_mdlog_and_wait_mdsc_unsafe_requests(struct ceph_mds_client *mdsc, 5471 5334 u64 want_tid) 5472 5335 { 5336 + struct ceph_client *cl = mdsc->fsc->client; 5473 5337 struct ceph_mds_request *req = NULL, *nextreq; 5474 5338 struct ceph_mds_session *last_session = NULL; 5475 5339 struct rb_node *n; 5476 5340 5477 5341 mutex_lock(&mdsc->mutex); 5478 - dout("%s want %lld\n", __func__, want_tid); 5342 + doutc(cl, "want %lld\n", want_tid); 5479 5343 restart: 5480 5344 req = __get_oldest_req(mdsc); 5481 5345 while (req && req->r_tid <= want_tid) { ··· 5510 5372 } else { 5511 5373 ceph_put_mds_session(s); 5512 5374 } 5513 - dout("%s wait on %llu (want %llu)\n", __func__, 5514 - req->r_tid, want_tid); 5375 + doutc(cl, "wait on %llu (want %llu)\n", 5376 + req->r_tid, want_tid); 5515 5377 wait_for_completion(&req->r_safe_completion); 5516 5378 5517 5379 mutex_lock(&mdsc->mutex); ··· 5529 5391 } 5530 5392 mutex_unlock(&mdsc->mutex); 5531 5393 ceph_put_mds_session(last_session); 5532 - dout("%s done\n", __func__); 5394 + doutc(cl, "done\n"); 5533 5395 } 5534 5396 5535 5397 void ceph_mdsc_sync(struct ceph_mds_client *mdsc) 5536 5398 { 5399 + struct ceph_client *cl = mdsc->fsc->client; 5537 5400 u64 want_tid, want_flush; 5538 5401 5539 5402 if (READ_ONCE(mdsc->fsc->mount_state) >= CEPH_MOUNT_SHUTDOWN) 5540 5403 return; 5541 5404 5542 - dout("sync\n"); 5405 + doutc(cl, "sync\n"); 5543 5406 mutex_lock(&mdsc->mutex); 5544 5407 want_tid = mdsc->last_tid; 5545 5408 mutex_unlock(&mdsc->mutex); ··· 5556 5417 } 5557 5418 spin_unlock(&mdsc->cap_dirty_lock); 5558 5419 5559 - dout("sync want tid %lld flush_seq %lld\n", 5560 - want_tid, want_flush); 5420 + doutc(cl, "sync want tid %lld flush_seq %lld\n", want_tid, want_flush); 5561 5421 5562 5422 flush_mdlog_and_wait_mdsc_unsafe_requests(mdsc, want_tid); 5563 5423 wait_caps_flush(mdsc, want_flush); ··· 5578 5440 void ceph_mdsc_close_sessions(struct ceph_mds_client *mdsc) 5579 5441 { 5580 5442 struct ceph_options *opts = mdsc->fsc->client->options; 5443 + struct ceph_client *cl = mdsc->fsc->client; 5581 5444 struct ceph_mds_session *session; 5582 5445 int i; 5583 5446 int skipped = 0; 5584 5447 5585 - dout("close_sessions\n"); 5448 + doutc(cl, "begin\n"); 5586 5449 5587 5450 /* close sessions */ 5588 5451 mutex_lock(&mdsc->mutex); ··· 5601 5462 } 5602 5463 mutex_unlock(&mdsc->mutex); 5603 5464 5604 - dout("waiting for sessions to close\n"); 5465 + doutc(cl, "waiting for sessions to close\n"); 5605 5466 wait_event_timeout(mdsc->session_close_wq, 5606 5467 done_closing_sessions(mdsc, skipped), 5607 5468 ceph_timeout_jiffies(opts->mount_timeout)); ··· 5629 5490 cancel_work_sync(&mdsc->cap_reclaim_work); 5630 5491 cancel_delayed_work_sync(&mdsc->delayed_work); /* cancel timer */ 5631 5492 5632 - dout("stopped\n"); 5493 + doutc(cl, "done\n"); 5633 5494 } 5634 5495 5635 5496 void ceph_mdsc_force_umount(struct ceph_mds_client *mdsc) ··· 5637 5498 struct ceph_mds_session *session; 5638 5499 int mds; 5639 5500 5640 - dout("force umount\n"); 5501 + doutc(mdsc->fsc->client, "force umount\n"); 5641 5502 5642 5503 mutex_lock(&mdsc->mutex); 5643 5504 for (mds = 0; mds < mdsc->max_sessions; mds++) { ··· 5668 5529 5669 5530 static void ceph_mdsc_stop(struct ceph_mds_client *mdsc) 5670 5531 { 5671 - dout("stop\n"); 5532 + doutc(mdsc->fsc->client, "stop\n"); 5672 5533 /* 5673 5534 * Make sure the delayed work stopped before releasing 5674 5535 * the resources. ··· 5689 5550 void ceph_mdsc_destroy(struct ceph_fs_client *fsc) 5690 5551 { 5691 5552 struct ceph_mds_client *mdsc = fsc->mdsc; 5692 - dout("mdsc_destroy %p\n", mdsc); 5553 + doutc(fsc->client, "%p\n", mdsc); 5693 5554 5694 5555 if (!mdsc) 5695 5556 return; ··· 5703 5564 5704 5565 fsc->mdsc = NULL; 5705 5566 kfree(mdsc); 5706 - dout("mdsc_destroy %p done\n", mdsc); 5567 + doutc(fsc->client, "%p done\n", mdsc); 5707 5568 } 5708 5569 5709 5570 void ceph_mdsc_handle_fsmap(struct ceph_mds_client *mdsc, struct ceph_msg *msg) 5710 5571 { 5711 5572 struct ceph_fs_client *fsc = mdsc->fsc; 5573 + struct ceph_client *cl = fsc->client; 5712 5574 const char *mds_namespace = fsc->mount_options->mds_namespace; 5713 5575 void *p = msg->front.iov_base; 5714 5576 void *end = p + msg->front.iov_len; ··· 5721 5581 ceph_decode_need(&p, end, sizeof(u32), bad); 5722 5582 epoch = ceph_decode_32(&p); 5723 5583 5724 - dout("handle_fsmap epoch %u\n", epoch); 5584 + doutc(cl, "epoch %u\n", epoch); 5725 5585 5726 5586 /* struct_v, struct_cv, map_len, epoch, legacy_client_fscid */ 5727 5587 ceph_decode_skip_n(&p, end, 2 + sizeof(u32) * 3, bad); ··· 5766 5626 return; 5767 5627 5768 5628 bad: 5769 - pr_err("error decoding fsmap %d. Shutting down mount.\n", err); 5629 + pr_err_client(cl, "error decoding fsmap %d. Shutting down mount.\n", 5630 + err); 5770 5631 ceph_umount_begin(mdsc->fsc->sb); 5771 5632 ceph_msg_dump(msg); 5772 5633 err_out: ··· 5782 5641 */ 5783 5642 void ceph_mdsc_handle_mdsmap(struct ceph_mds_client *mdsc, struct ceph_msg *msg) 5784 5643 { 5644 + struct ceph_client *cl = mdsc->fsc->client; 5785 5645 u32 epoch; 5786 5646 u32 maplen; 5787 5647 void *p = msg->front.iov_base; ··· 5797 5655 return; 5798 5656 epoch = ceph_decode_32(&p); 5799 5657 maplen = ceph_decode_32(&p); 5800 - dout("handle_map epoch %u len %d\n", epoch, (int)maplen); 5658 + doutc(cl, "epoch %u len %d\n", epoch, (int)maplen); 5801 5659 5802 5660 /* do we need it? */ 5803 5661 mutex_lock(&mdsc->mutex); 5804 5662 if (mdsc->mdsmap && epoch <= mdsc->mdsmap->m_epoch) { 5805 - dout("handle_map epoch %u <= our %u\n", 5806 - epoch, mdsc->mdsmap->m_epoch); 5663 + doutc(cl, "epoch %u <= our %u\n", epoch, mdsc->mdsmap->m_epoch); 5807 5664 mutex_unlock(&mdsc->mutex); 5808 5665 return; 5809 5666 } 5810 5667 5811 - newmap = ceph_mdsmap_decode(&p, end, ceph_msgr2(mdsc->fsc->client)); 5668 + newmap = ceph_mdsmap_decode(mdsc, &p, end, ceph_msgr2(mdsc->fsc->client)); 5812 5669 if (IS_ERR(newmap)) { 5813 5670 err = PTR_ERR(newmap); 5814 5671 goto bad_unlock; ··· 5836 5695 bad_unlock: 5837 5696 mutex_unlock(&mdsc->mutex); 5838 5697 bad: 5839 - pr_err("error decoding mdsmap %d. Shutting down mount.\n", err); 5698 + pr_err_client(cl, "error decoding mdsmap %d. Shutting down mount.\n", 5699 + err); 5840 5700 ceph_umount_begin(mdsc->fsc->sb); 5841 5701 ceph_msg_dump(msg); 5842 5702 return; ··· 5868 5726 struct ceph_mds_session *s = con->private; 5869 5727 struct ceph_mds_client *mdsc = s->s_mdsc; 5870 5728 5871 - pr_warn("mds%d closed our session\n", s->s_mds); 5729 + pr_warn_client(mdsc->fsc->client, "mds%d closed our session\n", 5730 + s->s_mds); 5872 5731 if (READ_ONCE(mdsc->fsc->mount_state) != CEPH_MOUNT_FENCE_IO) 5873 5732 send_mds_reconnect(mdsc, s); 5874 5733 } ··· 5878 5735 { 5879 5736 struct ceph_mds_session *s = con->private; 5880 5737 struct ceph_mds_client *mdsc = s->s_mdsc; 5738 + struct ceph_client *cl = mdsc->fsc->client; 5881 5739 int type = le16_to_cpu(msg->hdr.type); 5882 5740 5883 5741 mutex_lock(&mdsc->mutex); ··· 5918 5774 break; 5919 5775 5920 5776 default: 5921 - pr_err("received unknown message type %d %s\n", type, 5922 - ceph_msg_type_name(type)); 5777 + pr_err_client(cl, "received unknown message type %d %s\n", 5778 + type, ceph_msg_type_name(type)); 5923 5779 } 5924 5780 out: 5925 5781 ceph_msg_put(msg);
+10 -3
fs/ceph/mds_client.h
··· 14 14 15 15 #include <linux/ceph/types.h> 16 16 #include <linux/ceph/messenger.h> 17 - #include <linux/ceph/mdsmap.h> 18 17 #include <linux/ceph/auth.h> 19 18 19 + #include "mdsmap.h" 20 20 #include "metric.h" 21 21 #include "super.h" 22 22 ··· 33 33 CEPHFS_FEATURE_NOTIFY_SESSION_STATE, 34 34 CEPHFS_FEATURE_OP_GETVXATTR, 35 35 CEPHFS_FEATURE_32BITS_RETRY_FWD, 36 + CEPHFS_FEATURE_NEW_SNAPREALM_INFO, 37 + CEPHFS_FEATURE_HAS_OWNER_UIDGID, 36 38 37 - CEPHFS_FEATURE_MAX = CEPHFS_FEATURE_32BITS_RETRY_FWD, 39 + CEPHFS_FEATURE_MAX = CEPHFS_FEATURE_HAS_OWNER_UIDGID, 38 40 }; 39 41 40 42 #define CEPHFS_FEATURES_CLIENT_SUPPORTED { \ ··· 51 49 CEPHFS_FEATURE_NOTIFY_SESSION_STATE, \ 52 50 CEPHFS_FEATURE_OP_GETVXATTR, \ 53 51 CEPHFS_FEATURE_32BITS_RETRY_FWD, \ 52 + CEPHFS_FEATURE_HAS_OWNER_UIDGID, \ 54 53 } 55 54 56 55 /* ··· 303 300 int r_fmode; /* file mode, if expecting cap */ 304 301 int r_request_release_offset; 305 302 const struct cred *r_cred; 303 + struct mnt_idmap *r_mnt_idmap; 306 304 struct timespec64 r_stamp; 307 305 308 306 /* for choosing which mds to send this request to */ ··· 585 581 __putname(path - (PATH_MAX - 1 - len)); 586 582 } 587 583 588 - extern char *ceph_mdsc_build_path(struct dentry *dentry, int *plen, u64 *base, 584 + extern char *ceph_mdsc_build_path(struct ceph_mds_client *mdsc, 585 + struct dentry *dentry, int *plen, u64 *base, 589 586 int for_wire); 590 587 591 588 extern void __ceph_mdsc_drop_dentry_lease(struct dentry *dentry); ··· 619 614 extern int ceph_wait_on_conflict_unlink(struct dentry *dentry); 620 615 extern u64 ceph_get_deleg_ino(struct ceph_mds_session *session); 621 616 extern int ceph_restore_deleg_ino(struct ceph_mds_session *session, u64 ino); 617 + 618 + extern bool enable_unsafe_idmap; 622 619 #endif
+15 -14
fs/ceph/mdsmap.c
··· 7 7 #include <linux/slab.h> 8 8 #include <linux/types.h> 9 9 10 - #include <linux/ceph/mdsmap.h> 11 10 #include <linux/ceph/messenger.h> 12 11 #include <linux/ceph/decode.h> 13 12 13 + #include "mdsmap.h" 14 + #include "mds_client.h" 14 15 #include "super.h" 15 16 16 17 #define CEPH_MDS_IS_READY(i, ignore_laggy) \ ··· 115 114 * Ignore any fields we don't care about (there are quite a few of 116 115 * them). 117 116 */ 118 - struct ceph_mdsmap *ceph_mdsmap_decode(void **p, void *end, bool msgr2) 117 + struct ceph_mdsmap *ceph_mdsmap_decode(struct ceph_mds_client *mdsc, void **p, 118 + void *end, bool msgr2) 119 119 { 120 + struct ceph_client *cl = mdsc->fsc->client; 120 121 struct ceph_mdsmap *m; 121 122 const void *start = *p; 122 123 int i, j, n; ··· 236 233 *p = info_end; 237 234 } 238 235 239 - dout("mdsmap_decode %d/%d %lld mds%d.%d %s %s%s\n", 240 - i+1, n, global_id, mds, inc, 241 - ceph_pr_addr(&addr), 242 - ceph_mds_state_name(state), 243 - laggy ? "(laggy)" : ""); 236 + doutc(cl, "%d/%d %lld mds%d.%d %s %s%s\n", i+1, n, global_id, 237 + mds, inc, ceph_pr_addr(&addr), 238 + ceph_mds_state_name(state), laggy ? "(laggy)" : ""); 244 239 245 240 if (mds < 0 || mds >= m->possible_max_rank) { 246 - pr_warn("mdsmap_decode got incorrect mds(%d)\n", mds); 241 + pr_warn_client(cl, "got incorrect mds(%d)\n", mds); 247 242 continue; 248 243 } 249 244 250 245 if (state <= 0) { 251 - dout("mdsmap_decode got incorrect state(%s)\n", 252 - ceph_mds_state_name(state)); 246 + doutc(cl, "got incorrect state(%s)\n", 247 + ceph_mds_state_name(state)); 253 248 continue; 254 249 } 255 250 ··· 386 385 m->m_max_xattr_size = 0; 387 386 } 388 387 bad_ext: 389 - dout("mdsmap_decode m_enabled: %d, m_damaged: %d, m_num_laggy: %d\n", 390 - !!m->m_enabled, !!m->m_damaged, m->m_num_laggy); 388 + doutc(cl, "m_enabled: %d, m_damaged: %d, m_num_laggy: %d\n", 389 + !!m->m_enabled, !!m->m_damaged, m->m_num_laggy); 391 390 *p = end; 392 - dout("mdsmap_decode success epoch %u\n", m->m_epoch); 391 + doutc(cl, "success epoch %u\n", m->m_epoch); 393 392 return m; 394 393 nomem: 395 394 err = -ENOMEM; 396 395 goto out_err; 397 396 corrupt: 398 - pr_err("corrupt mdsmap\n"); 397 + pr_err_client(cl, "corrupt mdsmap\n"); 399 398 print_hex_dump(KERN_DEBUG, "mdsmap: ", 400 399 DUMP_PREFIX_OFFSET, 16, 1, 401 400 start, end - start, true);
+3 -2
fs/ceph/metric.c
··· 31 31 struct ceph_client_metric *m = &mdsc->metric; 32 32 u64 nr_caps = atomic64_read(&m->total_caps); 33 33 u32 header_len = sizeof(struct ceph_metric_header); 34 + struct ceph_client *cl = mdsc->fsc->client; 34 35 struct ceph_msg *msg; 35 36 s64 sum; 36 37 s32 items = 0; ··· 52 51 53 52 msg = ceph_msg_new(CEPH_MSG_CLIENT_METRICS, len, GFP_NOFS, true); 54 53 if (!msg) { 55 - pr_err("send metrics to mds%d, failed to allocate message\n", 56 - s->s_mds); 54 + pr_err_client(cl, "to mds%d, failed to allocate message\n", 55 + s->s_mds); 57 56 return false; 58 57 } 59 58
+18 -11
fs/ceph/quota.c
··· 43 43 { 44 44 struct super_block *sb = mdsc->fsc->sb; 45 45 struct ceph_mds_quota *h = msg->front.iov_base; 46 + struct ceph_client *cl = mdsc->fsc->client; 46 47 struct ceph_vino vino; 47 48 struct inode *inode; 48 49 struct ceph_inode_info *ci; ··· 52 51 return; 53 52 54 53 if (msg->front.iov_len < sizeof(*h)) { 55 - pr_err("%s corrupt message mds%d len %d\n", __func__, 56 - session->s_mds, (int)msg->front.iov_len); 54 + pr_err_client(cl, "corrupt message mds%d len %d\n", 55 + session->s_mds, (int)msg->front.iov_len); 57 56 ceph_msg_dump(msg); 58 57 goto out; 59 58 } ··· 63 62 vino.snap = CEPH_NOSNAP; 64 63 inode = ceph_find_inode(sb, vino); 65 64 if (!inode) { 66 - pr_warn("Failed to find inode %llu\n", vino.ino); 65 + pr_warn_client(cl, "failed to find inode %llx\n", vino.ino); 67 66 goto out; 68 67 } 69 68 ci = ceph_inode(inode); ··· 86 85 { 87 86 struct ceph_quotarealm_inode *qri = NULL; 88 87 struct rb_node **node, *parent = NULL; 88 + struct ceph_client *cl = mdsc->fsc->client; 89 89 90 90 mutex_lock(&mdsc->quotarealms_inodes_mutex); 91 91 node = &(mdsc->quotarealms_inodes.rb_node); ··· 112 110 rb_link_node(&qri->node, parent, node); 113 111 rb_insert_color(&qri->node, &mdsc->quotarealms_inodes); 114 112 } else 115 - pr_warn("Failed to alloc quotarealms_inode\n"); 113 + pr_warn_client(cl, "Failed to alloc quotarealms_inode\n"); 116 114 } 117 115 mutex_unlock(&mdsc->quotarealms_inodes_mutex); 118 116 ··· 131 129 struct super_block *sb, 132 130 struct ceph_snap_realm *realm) 133 131 { 132 + struct ceph_client *cl = mdsc->fsc->client; 134 133 struct ceph_quotarealm_inode *qri; 135 134 struct inode *in; 136 135 ··· 164 161 } 165 162 166 163 if (IS_ERR(in)) { 167 - dout("Can't lookup inode %llx (err: %ld)\n", 168 - realm->ino, PTR_ERR(in)); 164 + doutc(cl, "Can't lookup inode %llx (err: %ld)\n", realm->ino, 165 + PTR_ERR(in)); 169 166 qri->timeout = jiffies + msecs_to_jiffies(60 * 1000); /* XXX */ 170 167 } else { 171 168 qri->timeout = 0; ··· 216 213 enum quota_get_realm which_quota, 217 214 bool retry) 218 215 { 216 + struct ceph_client *cl = mdsc->fsc->client; 219 217 struct ceph_inode_info *ci = NULL; 220 218 struct ceph_snap_realm *realm, *next; 221 219 struct inode *in; ··· 230 226 if (realm) 231 227 ceph_get_snap_realm(mdsc, realm); 232 228 else 233 - pr_err_ratelimited("get_quota_realm: ino (%llx.%llx) " 234 - "null i_snap_realm\n", ceph_vinop(inode)); 229 + pr_err_ratelimited_client(cl, 230 + "%p %llx.%llx null i_snap_realm\n", 231 + inode, ceph_vinop(inode)); 235 232 while (realm) { 236 233 bool has_inode; 237 234 ··· 322 317 loff_t delta) 323 318 { 324 319 struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(inode->i_sb); 320 + struct ceph_client *cl = mdsc->fsc->client; 325 321 struct ceph_inode_info *ci; 326 322 struct ceph_snap_realm *realm, *next; 327 323 struct inode *in; ··· 338 332 if (realm) 339 333 ceph_get_snap_realm(mdsc, realm); 340 334 else 341 - pr_err_ratelimited("check_quota_exceeded: ino (%llx.%llx) " 342 - "null i_snap_realm\n", ceph_vinop(inode)); 335 + pr_err_ratelimited_client(cl, 336 + "%p %llx.%llx null i_snap_realm\n", 337 + inode, ceph_vinop(inode)); 343 338 while (realm) { 344 339 bool has_inode; 345 340 ··· 390 383 break; 391 384 default: 392 385 /* Shouldn't happen */ 393 - pr_warn("Invalid quota check op (%d)\n", op); 386 + pr_warn_client(cl, "Invalid quota check op (%d)\n", op); 394 387 exceeded = true; /* Just break the loop */ 395 388 } 396 389 iput(in);
+106 -86
fs/ceph/snap.c
··· 138 138 __insert_snap_realm(&mdsc->snap_realms, realm); 139 139 mdsc->num_snap_realms++; 140 140 141 - dout("%s %llx %p\n", __func__, realm->ino, realm); 141 + doutc(mdsc->fsc->client, "%llx %p\n", realm->ino, realm); 142 142 return realm; 143 143 } 144 144 ··· 150 150 static struct ceph_snap_realm *__lookup_snap_realm(struct ceph_mds_client *mdsc, 151 151 u64 ino) 152 152 { 153 + struct ceph_client *cl = mdsc->fsc->client; 153 154 struct rb_node *n = mdsc->snap_realms.rb_node; 154 155 struct ceph_snap_realm *r; 155 156 ··· 163 162 else if (ino > r->ino) 164 163 n = n->rb_right; 165 164 else { 166 - dout("%s %llx %p\n", __func__, r->ino, r); 165 + doutc(cl, "%llx %p\n", r->ino, r); 167 166 return r; 168 167 } 169 168 } ··· 189 188 static void __destroy_snap_realm(struct ceph_mds_client *mdsc, 190 189 struct ceph_snap_realm *realm) 191 190 { 191 + struct ceph_client *cl = mdsc->fsc->client; 192 192 lockdep_assert_held_write(&mdsc->snap_rwsem); 193 193 194 - dout("%s %p %llx\n", __func__, realm, realm->ino); 194 + doutc(cl, "%p %llx\n", realm, realm->ino); 195 195 196 196 rb_erase(&realm->node, &mdsc->snap_realms); 197 197 mdsc->num_snap_realms--; ··· 292 290 struct ceph_snap_realm *realm, 293 291 u64 parentino) 294 292 { 293 + struct ceph_client *cl = mdsc->fsc->client; 295 294 struct ceph_snap_realm *parent; 296 295 297 296 lockdep_assert_held_write(&mdsc->snap_rwsem); ··· 306 303 if (IS_ERR(parent)) 307 304 return PTR_ERR(parent); 308 305 } 309 - dout("%s %llx %p: %llx %p -> %llx %p\n", __func__, realm->ino, 310 - realm, realm->parent_ino, realm->parent, parentino, parent); 306 + doutc(cl, "%llx %p: %llx %p -> %llx %p\n", realm->ino, realm, 307 + realm->parent_ino, realm->parent, parentino, parent); 311 308 if (realm->parent) { 312 309 list_del_init(&realm->child_item); 313 310 ceph_put_snap_realm(mdsc, realm->parent); ··· 332 329 /* 333 330 * build the snap context for a given realm. 334 331 */ 335 - static int build_snap_context(struct ceph_snap_realm *realm, 332 + static int build_snap_context(struct ceph_mds_client *mdsc, 333 + struct ceph_snap_realm *realm, 336 334 struct list_head *realm_queue, 337 335 struct list_head *dirty_realms) 338 336 { 337 + struct ceph_client *cl = mdsc->fsc->client; 339 338 struct ceph_snap_realm *parent = realm->parent; 340 339 struct ceph_snap_context *snapc; 341 340 int err = 0; ··· 365 360 realm->cached_context->seq == realm->seq && 366 361 (!parent || 367 362 realm->cached_context->seq >= parent->cached_context->seq)) { 368 - dout("%s %llx %p: %p seq %lld (%u snaps) (unchanged)\n", 369 - __func__, realm->ino, realm, realm->cached_context, 370 - realm->cached_context->seq, 371 - (unsigned int)realm->cached_context->num_snaps); 363 + doutc(cl, "%llx %p: %p seq %lld (%u snaps) (unchanged)\n", 364 + realm->ino, realm, realm->cached_context, 365 + realm->cached_context->seq, 366 + (unsigned int)realm->cached_context->num_snaps); 372 367 return 0; 373 368 } 374 369 ··· 405 400 406 401 sort(snapc->snaps, num, sizeof(u64), cmpu64_rev, NULL); 407 402 snapc->num_snaps = num; 408 - dout("%s %llx %p: %p seq %lld (%u snaps)\n", __func__, realm->ino, 409 - realm, snapc, snapc->seq, (unsigned int) snapc->num_snaps); 403 + doutc(cl, "%llx %p: %p seq %lld (%u snaps)\n", realm->ino, realm, 404 + snapc, snapc->seq, (unsigned int) snapc->num_snaps); 410 405 411 406 ceph_put_snap_context(realm->cached_context); 412 407 realm->cached_context = snapc; ··· 423 418 ceph_put_snap_context(realm->cached_context); 424 419 realm->cached_context = NULL; 425 420 } 426 - pr_err("%s %llx %p fail %d\n", __func__, realm->ino, realm, err); 421 + pr_err_client(cl, "%llx %p fail %d\n", realm->ino, realm, err); 427 422 return err; 428 423 } 429 424 430 425 /* 431 426 * rebuild snap context for the given realm and all of its children. 432 427 */ 433 - static void rebuild_snap_realms(struct ceph_snap_realm *realm, 428 + static void rebuild_snap_realms(struct ceph_mds_client *mdsc, 429 + struct ceph_snap_realm *realm, 434 430 struct list_head *dirty_realms) 435 431 { 432 + struct ceph_client *cl = mdsc->fsc->client; 436 433 LIST_HEAD(realm_queue); 437 434 int last = 0; 438 435 bool skip = false; ··· 458 451 continue; 459 452 } 460 453 461 - last = build_snap_context(_realm, &realm_queue, dirty_realms); 462 - dout("%s %llx %p, %s\n", __func__, _realm->ino, _realm, 463 - last > 0 ? "is deferred" : !last ? "succeeded" : "failed"); 454 + last = build_snap_context(mdsc, _realm, &realm_queue, 455 + dirty_realms); 456 + doutc(cl, "%llx %p, %s\n", realm->ino, realm, 457 + last > 0 ? "is deferred" : !last ? "succeeded" : "failed"); 464 458 465 459 /* is any child in the list ? */ 466 460 list_for_each_entry(child, &_realm->children, child_item) { ··· 531 523 struct ceph_cap_snap **pcapsnap) 532 524 { 533 525 struct inode *inode = &ci->netfs.inode; 526 + struct ceph_client *cl = ceph_inode_to_client(inode); 534 527 struct ceph_snap_context *old_snapc, *new_snapc; 535 528 struct ceph_cap_snap *capsnap = *pcapsnap; 536 529 struct ceph_buffer *old_blob = NULL; ··· 557 548 as no new writes are allowed to start when pending, so any 558 549 writes in progress now were started before the previous 559 550 cap_snap. lucky us. */ 560 - dout("%s %p %llx.%llx already pending\n", 561 - __func__, inode, ceph_vinop(inode)); 551 + doutc(cl, "%p %llx.%llx already pending\n", inode, 552 + ceph_vinop(inode)); 562 553 goto update_snapc; 563 554 } 564 555 if (ci->i_wrbuffer_ref_head == 0 && 565 556 !(dirty & (CEPH_CAP_ANY_EXCL|CEPH_CAP_FILE_WR))) { 566 - dout("%s %p %llx.%llx nothing dirty|writing\n", 567 - __func__, inode, ceph_vinop(inode)); 557 + doutc(cl, "%p %llx.%llx nothing dirty|writing\n", inode, 558 + ceph_vinop(inode)); 568 559 goto update_snapc; 569 560 } 570 561 ··· 584 575 } else { 585 576 if (!(used & CEPH_CAP_FILE_WR) && 586 577 ci->i_wrbuffer_ref_head == 0) { 587 - dout("%s %p %llx.%llx no new_snap|dirty_page|writing\n", 588 - __func__, inode, ceph_vinop(inode)); 578 + doutc(cl, "%p %llx.%llx no new_snap|dirty_page|writing\n", 579 + inode, ceph_vinop(inode)); 589 580 goto update_snapc; 590 581 } 591 582 } 592 583 593 - dout("%s %p %llx.%llx cap_snap %p queuing under %p %s %s\n", 594 - __func__, inode, ceph_vinop(inode), capsnap, old_snapc, 595 - ceph_cap_string(dirty), capsnap->need_flush ? "" : "no_flush"); 584 + doutc(cl, "%p %llx.%llx cap_snap %p queuing under %p %s %s\n", 585 + inode, ceph_vinop(inode), capsnap, old_snapc, 586 + ceph_cap_string(dirty), capsnap->need_flush ? "" : "no_flush"); 596 587 ihold(inode); 597 588 598 589 capsnap->follows = old_snapc->seq; ··· 624 615 list_add_tail(&capsnap->ci_item, &ci->i_cap_snaps); 625 616 626 617 if (used & CEPH_CAP_FILE_WR) { 627 - dout("%s %p %llx.%llx cap_snap %p snapc %p seq %llu used WR," 628 - " now pending\n", __func__, inode, ceph_vinop(inode), 629 - capsnap, old_snapc, old_snapc->seq); 618 + doutc(cl, "%p %llx.%llx cap_snap %p snapc %p seq %llu used WR," 619 + " now pending\n", inode, ceph_vinop(inode), capsnap, 620 + old_snapc, old_snapc->seq); 630 621 capsnap->writing = 1; 631 622 } else { 632 623 /* note mtime, size NOW. */ ··· 643 634 ci->i_head_snapc = NULL; 644 635 } else { 645 636 ci->i_head_snapc = ceph_get_snap_context(new_snapc); 646 - dout(" new snapc is %p\n", new_snapc); 637 + doutc(cl, " new snapc is %p\n", new_snapc); 647 638 } 648 639 spin_unlock(&ci->i_ceph_lock); 649 640 ··· 664 655 { 665 656 struct inode *inode = &ci->netfs.inode; 666 657 struct ceph_mds_client *mdsc = ceph_sb_to_mdsc(inode->i_sb); 658 + struct ceph_client *cl = mdsc->fsc->client; 667 659 668 660 BUG_ON(capsnap->writing); 669 661 capsnap->size = i_size_read(inode); ··· 677 667 capsnap->truncate_size = ci->i_truncate_size; 678 668 capsnap->truncate_seq = ci->i_truncate_seq; 679 669 if (capsnap->dirty_pages) { 680 - dout("%s %p %llx.%llx cap_snap %p snapc %p %llu %s s=%llu " 681 - "still has %d dirty pages\n", __func__, inode, 682 - ceph_vinop(inode), capsnap, capsnap->context, 683 - capsnap->context->seq, ceph_cap_string(capsnap->dirty), 684 - capsnap->size, capsnap->dirty_pages); 670 + doutc(cl, "%p %llx.%llx cap_snap %p snapc %p %llu %s " 671 + "s=%llu still has %d dirty pages\n", inode, 672 + ceph_vinop(inode), capsnap, capsnap->context, 673 + capsnap->context->seq, 674 + ceph_cap_string(capsnap->dirty), 675 + capsnap->size, capsnap->dirty_pages); 685 676 return 0; 686 677 } 687 678 ··· 691 680 * And trigger to flush the buffer immediately. 692 681 */ 693 682 if (ci->i_wrbuffer_ref) { 694 - dout("%s %p %llx.%llx cap_snap %p snapc %p %llu %s s=%llu " 695 - "used WRBUFFER, delaying\n", __func__, inode, 696 - ceph_vinop(inode), capsnap, capsnap->context, 697 - capsnap->context->seq, ceph_cap_string(capsnap->dirty), 698 - capsnap->size); 683 + doutc(cl, "%p %llx.%llx cap_snap %p snapc %p %llu %s " 684 + "s=%llu used WRBUFFER, delaying\n", inode, 685 + ceph_vinop(inode), capsnap, capsnap->context, 686 + capsnap->context->seq, ceph_cap_string(capsnap->dirty), 687 + capsnap->size); 699 688 ceph_queue_writeback(inode); 700 689 return 0; 701 690 } 702 691 703 692 ci->i_ceph_flags |= CEPH_I_FLUSH_SNAPS; 704 - dout("%s %p %llx.%llx cap_snap %p snapc %p %llu %s s=%llu\n", 705 - __func__, inode, ceph_vinop(inode), capsnap, capsnap->context, 706 - capsnap->context->seq, ceph_cap_string(capsnap->dirty), 707 - capsnap->size); 693 + doutc(cl, "%p %llx.%llx cap_snap %p snapc %p %llu %s s=%llu\n", 694 + inode, ceph_vinop(inode), capsnap, capsnap->context, 695 + capsnap->context->seq, ceph_cap_string(capsnap->dirty), 696 + capsnap->size); 708 697 709 698 spin_lock(&mdsc->snap_flush_lock); 710 699 if (list_empty(&ci->i_snap_flush_item)) { ··· 719 708 * Queue cap_snaps for snap writeback for this realm and its children. 720 709 * Called under snap_rwsem, so realm topology won't change. 721 710 */ 722 - static void queue_realm_cap_snaps(struct ceph_snap_realm *realm) 711 + static void queue_realm_cap_snaps(struct ceph_mds_client *mdsc, 712 + struct ceph_snap_realm *realm) 723 713 { 714 + struct ceph_client *cl = mdsc->fsc->client; 724 715 struct ceph_inode_info *ci; 725 716 struct inode *lastinode = NULL; 726 717 struct ceph_cap_snap *capsnap = NULL; 727 718 728 - dout("%s %p %llx inode\n", __func__, realm, realm->ino); 719 + doutc(cl, "%p %llx inode\n", realm, realm->ino); 729 720 730 721 spin_lock(&realm->inodes_with_caps_lock); 731 722 list_for_each_entry(ci, &realm->inodes_with_caps, i_snap_realm_item) { ··· 746 733 if (!capsnap) { 747 734 capsnap = kmem_cache_zalloc(ceph_cap_snap_cachep, GFP_NOFS); 748 735 if (!capsnap) { 749 - pr_err("ENOMEM allocating ceph_cap_snap on %p\n", 750 - inode); 736 + pr_err_client(cl, 737 + "ENOMEM allocating ceph_cap_snap on %p\n", 738 + inode); 751 739 return; 752 740 } 753 741 } ··· 766 752 767 753 if (capsnap) 768 754 kmem_cache_free(ceph_cap_snap_cachep, capsnap); 769 - dout("%s %p %llx done\n", __func__, realm, realm->ino); 755 + doutc(cl, "%p %llx done\n", realm, realm->ino); 770 756 } 771 757 772 758 /* ··· 780 766 void *p, void *e, bool deletion, 781 767 struct ceph_snap_realm **realm_ret) 782 768 { 769 + struct ceph_client *cl = mdsc->fsc->client; 783 770 struct ceph_mds_snap_realm *ri; /* encoded */ 784 771 __le64 *snaps; /* encoded */ 785 772 __le64 *prior_parent_snaps; /* encoded */ ··· 795 780 796 781 lockdep_assert_held_write(&mdsc->snap_rwsem); 797 782 798 - dout("%s deletion=%d\n", __func__, deletion); 783 + doutc(cl, "deletion=%d\n", deletion); 799 784 more: 800 785 realm = NULL; 801 786 rebuild_snapcs = 0; ··· 825 810 rebuild_snapcs += err; 826 811 827 812 if (le64_to_cpu(ri->seq) > realm->seq) { 828 - dout("%s updating %llx %p %lld -> %lld\n", __func__, 829 - realm->ino, realm, realm->seq, le64_to_cpu(ri->seq)); 813 + doutc(cl, "updating %llx %p %lld -> %lld\n", realm->ino, 814 + realm, realm->seq, le64_to_cpu(ri->seq)); 830 815 /* update realm parameters, snap lists */ 831 816 realm->seq = le64_to_cpu(ri->seq); 832 817 realm->created = le64_to_cpu(ri->created); ··· 849 834 850 835 rebuild_snapcs = 1; 851 836 } else if (!realm->cached_context) { 852 - dout("%s %llx %p seq %lld new\n", __func__, 853 - realm->ino, realm, realm->seq); 837 + doutc(cl, "%llx %p seq %lld new\n", realm->ino, realm, 838 + realm->seq); 854 839 rebuild_snapcs = 1; 855 840 } else { 856 - dout("%s %llx %p seq %lld unchanged\n", __func__, 857 - realm->ino, realm, realm->seq); 841 + doutc(cl, "%llx %p seq %lld unchanged\n", realm->ino, realm, 842 + realm->seq); 858 843 } 859 844 860 - dout("done with %llx %p, rebuild_snapcs=%d, %p %p\n", realm->ino, 861 - realm, rebuild_snapcs, p, e); 845 + doutc(cl, "done with %llx %p, rebuild_snapcs=%d, %p %p\n", realm->ino, 846 + realm, rebuild_snapcs, p, e); 862 847 863 848 /* 864 849 * this will always track the uppest parent realm from which ··· 870 855 871 856 /* rebuild_snapcs when we reach the _end_ (root) of the trace */ 872 857 if (realm_to_rebuild && p >= e) 873 - rebuild_snap_realms(realm_to_rebuild, &dirty_realms); 858 + rebuild_snap_realms(mdsc, realm_to_rebuild, &dirty_realms); 874 859 875 860 if (!first_realm) 876 861 first_realm = realm; ··· 888 873 realm = list_first_entry(&dirty_realms, struct ceph_snap_realm, 889 874 dirty_item); 890 875 list_del_init(&realm->dirty_item); 891 - queue_realm_cap_snaps(realm); 876 + queue_realm_cap_snaps(mdsc, realm); 892 877 } 893 878 894 879 if (realm_ret) ··· 906 891 ceph_put_snap_realm(mdsc, realm); 907 892 if (first_realm) 908 893 ceph_put_snap_realm(mdsc, first_realm); 909 - pr_err("%s error %d\n", __func__, err); 894 + pr_err_client(cl, "error %d\n", err); 910 895 911 896 /* 912 897 * When receiving a corrupted snap trace we don't know what ··· 920 905 WRITE_ONCE(mdsc->fsc->mount_state, CEPH_MOUNT_FENCE_IO); 921 906 ret = ceph_monc_blocklist_add(&client->monc, &client->msgr.inst.addr); 922 907 if (ret) 923 - pr_err("%s failed to blocklist %s: %d\n", __func__, 924 - ceph_pr_addr(&client->msgr.inst.addr), ret); 908 + pr_err_client(cl, "failed to blocklist %s: %d\n", 909 + ceph_pr_addr(&client->msgr.inst.addr), ret); 925 910 926 - WARN(1, "%s: %s%sdo remount to continue%s", 927 - __func__, ret ? "" : ceph_pr_addr(&client->msgr.inst.addr), 911 + WARN(1, "[client.%lld] %s %s%sdo remount to continue%s", 912 + client->monc.auth->global_id, __func__, 913 + ret ? "" : ceph_pr_addr(&client->msgr.inst.addr), 928 914 ret ? "" : " was blocklisted, ", 929 915 err == -EIO ? " after corrupted snaptrace is fixed" : ""); 930 916 ··· 941 925 */ 942 926 static void flush_snaps(struct ceph_mds_client *mdsc) 943 927 { 928 + struct ceph_client *cl = mdsc->fsc->client; 944 929 struct ceph_inode_info *ci; 945 930 struct inode *inode; 946 931 struct ceph_mds_session *session = NULL; 947 932 948 - dout("%s\n", __func__); 933 + doutc(cl, "begin\n"); 949 934 spin_lock(&mdsc->snap_flush_lock); 950 935 while (!list_empty(&mdsc->snap_flush_list)) { 951 936 ci = list_first_entry(&mdsc->snap_flush_list, ··· 961 944 spin_unlock(&mdsc->snap_flush_lock); 962 945 963 946 ceph_put_mds_session(session); 964 - dout("%s done\n", __func__); 947 + doutc(cl, "done\n"); 965 948 } 966 949 967 950 /** ··· 977 960 void ceph_change_snap_realm(struct inode *inode, struct ceph_snap_realm *realm) 978 961 { 979 962 struct ceph_inode_info *ci = ceph_inode(inode); 980 - struct ceph_mds_client *mdsc = ceph_inode_to_client(inode)->mdsc; 963 + struct ceph_mds_client *mdsc = ceph_inode_to_fs_client(inode)->mdsc; 981 964 struct ceph_snap_realm *oldrealm = ci->i_snap_realm; 982 965 983 966 lockdep_assert_held(&ci->i_ceph_lock); ··· 1017 1000 struct ceph_mds_session *session, 1018 1001 struct ceph_msg *msg) 1019 1002 { 1003 + struct ceph_client *cl = mdsc->fsc->client; 1020 1004 struct super_block *sb = mdsc->fsc->sb; 1021 1005 int mds = session->s_mds; 1022 1006 u64 split; ··· 1048 1030 trace_len = le32_to_cpu(h->trace_len); 1049 1031 p += sizeof(*h); 1050 1032 1051 - dout("%s from mds%d op %s split %llx tracelen %d\n", __func__, 1052 - mds, ceph_snap_op_name(op), split, trace_len); 1033 + doutc(cl, "from mds%d op %s split %llx tracelen %d\n", mds, 1034 + ceph_snap_op_name(op), split, trace_len); 1053 1035 1054 1036 down_write(&mdsc->snap_rwsem); 1055 1037 locked_rwsem = 1; ··· 1080 1062 goto out; 1081 1063 } 1082 1064 1083 - dout("splitting snap_realm %llx %p\n", realm->ino, realm); 1065 + doutc(cl, "splitting snap_realm %llx %p\n", realm->ino, realm); 1084 1066 for (i = 0; i < num_split_inos; i++) { 1085 1067 struct ceph_vino vino = { 1086 1068 .ino = le64_to_cpu(split_inos[i]), ··· 1105 1087 */ 1106 1088 if (ci->i_snap_realm->created > 1107 1089 le64_to_cpu(ri->created)) { 1108 - dout(" leaving %p %llx.%llx in newer realm %llx %p\n", 1109 - inode, ceph_vinop(inode), ci->i_snap_realm->ino, 1110 - ci->i_snap_realm); 1090 + doutc(cl, " leaving %p %llx.%llx in newer realm %llx %p\n", 1091 + inode, ceph_vinop(inode), ci->i_snap_realm->ino, 1092 + ci->i_snap_realm); 1111 1093 goto skip_inode; 1112 1094 } 1113 - dout(" will move %p %llx.%llx to split realm %llx %p\n", 1114 - inode, ceph_vinop(inode), realm->ino, realm); 1095 + doutc(cl, " will move %p %llx.%llx to split realm %llx %p\n", 1096 + inode, ceph_vinop(inode), realm->ino, realm); 1115 1097 1116 1098 ceph_get_snap_realm(mdsc, realm); 1117 1099 ceph_change_snap_realm(inode, realm); ··· 1172 1154 return; 1173 1155 1174 1156 bad: 1175 - pr_err("%s corrupt snap message from mds%d\n", __func__, mds); 1157 + pr_err_client(cl, "corrupt snap message from mds%d\n", mds); 1176 1158 ceph_msg_dump(msg); 1177 1159 out: 1178 1160 if (locked_rwsem) ··· 1188 1170 struct ceph_snapid_map* ceph_get_snapid_map(struct ceph_mds_client *mdsc, 1189 1171 u64 snap) 1190 1172 { 1173 + struct ceph_client *cl = mdsc->fsc->client; 1191 1174 struct ceph_snapid_map *sm, *exist; 1192 1175 struct rb_node **p, *parent; 1193 1176 int ret; ··· 1211 1192 } 1212 1193 spin_unlock(&mdsc->snapid_map_lock); 1213 1194 if (exist) { 1214 - dout("%s found snapid map %llx -> %x\n", __func__, 1215 - exist->snap, exist->dev); 1195 + doutc(cl, "found snapid map %llx -> %x\n", exist->snap, 1196 + exist->dev); 1216 1197 return exist; 1217 1198 } 1218 1199 ··· 1256 1237 if (exist) { 1257 1238 free_anon_bdev(sm->dev); 1258 1239 kfree(sm); 1259 - dout("%s found snapid map %llx -> %x\n", __func__, 1260 - exist->snap, exist->dev); 1240 + doutc(cl, "found snapid map %llx -> %x\n", exist->snap, 1241 + exist->dev); 1261 1242 return exist; 1262 1243 } 1263 1244 1264 - dout("%s create snapid map %llx -> %x\n", __func__, 1265 - sm->snap, sm->dev); 1245 + doutc(cl, "create snapid map %llx -> %x\n", sm->snap, sm->dev); 1266 1246 return sm; 1267 1247 } 1268 1248 ··· 1286 1268 1287 1269 void ceph_trim_snapid_map(struct ceph_mds_client *mdsc) 1288 1270 { 1271 + struct ceph_client *cl = mdsc->fsc->client; 1289 1272 struct ceph_snapid_map *sm; 1290 1273 unsigned long now; 1291 1274 LIST_HEAD(to_free); ··· 1308 1289 while (!list_empty(&to_free)) { 1309 1290 sm = list_first_entry(&to_free, struct ceph_snapid_map, lru); 1310 1291 list_del(&sm->lru); 1311 - dout("trim snapid map %llx -> %x\n", sm->snap, sm->dev); 1292 + doutc(cl, "trim snapid map %llx -> %x\n", sm->snap, sm->dev); 1312 1293 free_anon_bdev(sm->dev); 1313 1294 kfree(sm); 1314 1295 } ··· 1316 1297 1317 1298 void ceph_cleanup_snapid_map(struct ceph_mds_client *mdsc) 1318 1299 { 1300 + struct ceph_client *cl = mdsc->fsc->client; 1319 1301 struct ceph_snapid_map *sm; 1320 1302 struct rb_node *p; 1321 1303 LIST_HEAD(to_free); ··· 1335 1315 list_del(&sm->lru); 1336 1316 free_anon_bdev(sm->dev); 1337 1317 if (WARN_ON_ONCE(atomic_read(&sm->ref))) { 1338 - pr_err("snapid map %llx -> %x still in use\n", 1339 - sm->snap, sm->dev); 1318 + pr_err_client(cl, "snapid map %llx -> %x still in use\n", 1319 + sm->snap, sm->dev); 1340 1320 } 1341 1321 kfree(sm); 1342 1322 }
+57 -42
fs/ceph/super.c
··· 44 44 */ 45 45 static void ceph_put_super(struct super_block *s) 46 46 { 47 - struct ceph_fs_client *fsc = ceph_sb_to_client(s); 47 + struct ceph_fs_client *fsc = ceph_sb_to_fs_client(s); 48 48 49 - dout("put_super\n"); 49 + doutc(fsc->client, "begin\n"); 50 50 ceph_fscrypt_free_dummy_policy(fsc); 51 51 ceph_mdsc_close_sessions(fsc->mdsc); 52 + doutc(fsc->client, "done\n"); 52 53 } 53 54 54 55 static int ceph_statfs(struct dentry *dentry, struct kstatfs *buf) 55 56 { 56 - struct ceph_fs_client *fsc = ceph_inode_to_client(d_inode(dentry)); 57 + struct ceph_fs_client *fsc = ceph_inode_to_fs_client(d_inode(dentry)); 57 58 struct ceph_mon_client *monc = &fsc->client->monc; 58 59 struct ceph_statfs st; 59 60 int i, err; 60 61 u64 data_pool; 61 62 63 + doutc(fsc->client, "begin\n"); 62 64 if (fsc->mdsc->mdsmap->m_num_data_pg_pools == 1) { 63 65 data_pool = fsc->mdsc->mdsmap->m_data_pg_pools[0]; 64 66 } else { 65 67 data_pool = CEPH_NOPOOL; 66 68 } 67 69 68 - dout("statfs\n"); 69 70 err = ceph_monc_do_statfs(monc, data_pool, &st); 70 71 if (err < 0) 71 72 return err; ··· 114 113 /* fold the fs_cluster_id into the upper bits */ 115 114 buf->f_fsid.val[1] = monc->fs_cluster_id; 116 115 116 + doutc(fsc->client, "done\n"); 117 117 return 0; 118 118 } 119 119 120 120 static int ceph_sync_fs(struct super_block *sb, int wait) 121 121 { 122 - struct ceph_fs_client *fsc = ceph_sb_to_client(sb); 122 + struct ceph_fs_client *fsc = ceph_sb_to_fs_client(sb); 123 + struct ceph_client *cl = fsc->client; 123 124 124 125 if (!wait) { 125 - dout("sync_fs (non-blocking)\n"); 126 + doutc(cl, "(non-blocking)\n"); 126 127 ceph_flush_dirty_caps(fsc->mdsc); 127 - dout("sync_fs (non-blocking) done\n"); 128 + doutc(cl, "(non-blocking) done\n"); 128 129 return 0; 129 130 } 130 131 131 - dout("sync_fs (blocking)\n"); 132 + doutc(cl, "(blocking)\n"); 132 133 ceph_osdc_sync(&fsc->client->osdc); 133 134 ceph_mdsc_sync(fsc->mdsc); 134 - dout("sync_fs (blocking) done\n"); 135 + doutc(cl, "(blocking) done\n"); 135 136 return 0; 136 137 } 137 138 ··· 344 341 char *dev_name = param->string, *dev_name_end; 345 342 int ret; 346 343 347 - dout("%s '%s'\n", __func__, dev_name); 344 + dout("'%s'\n", dev_name); 348 345 if (!dev_name || !*dev_name) 349 346 return invalfc(fc, "Empty source"); 350 347 ··· 416 413 return ret; 417 414 418 415 token = fs_parse(fc, ceph_mount_parameters, param, &result); 419 - dout("%s fs_parse '%s' token %d\n", __func__, param->key, token); 416 + dout("%s: fs_parse '%s' token %d\n",__func__, param->key, token); 420 417 if (token < 0) 421 418 return token; 422 419 ··· 687 684 */ 688 685 static int ceph_show_options(struct seq_file *m, struct dentry *root) 689 686 { 690 - struct ceph_fs_client *fsc = ceph_sb_to_client(root->d_sb); 687 + struct ceph_fs_client *fsc = ceph_sb_to_fs_client(root->d_sb); 691 688 struct ceph_mount_options *fsopt = fsc->mount_options; 692 689 size_t pos; 693 690 int ret; ··· 884 881 885 882 static void destroy_fs_client(struct ceph_fs_client *fsc) 886 883 { 887 - dout("destroy_fs_client %p\n", fsc); 884 + doutc(fsc->client, "%p\n", fsc); 888 885 889 886 spin_lock(&ceph_fsc_lock); 890 887 list_del(&fsc->metric_wakeup); ··· 899 896 ceph_destroy_client(fsc->client); 900 897 901 898 kfree(fsc); 902 - dout("destroy_fs_client %p done\n", fsc); 899 + dout("%s: %p done\n", __func__, fsc); 903 900 } 904 901 905 902 /* ··· 1018 1015 */ 1019 1016 void ceph_umount_begin(struct super_block *sb) 1020 1017 { 1021 - struct ceph_fs_client *fsc = ceph_sb_to_client(sb); 1018 + struct ceph_fs_client *fsc = ceph_sb_to_fs_client(sb); 1022 1019 1023 - dout("ceph_umount_begin - starting forced umount\n"); 1020 + doutc(fsc->client, "starting forced umount\n"); 1024 1021 if (!fsc) 1025 1022 return; 1026 1023 fsc->mount_state = CEPH_MOUNT_SHUTDOWN; ··· 1048 1045 const char *path, 1049 1046 unsigned long started) 1050 1047 { 1048 + struct ceph_client *cl = fsc->client; 1051 1049 struct ceph_mds_client *mdsc = fsc->mdsc; 1052 1050 struct ceph_mds_request *req = NULL; 1053 1051 int err; 1054 1052 struct dentry *root; 1055 1053 1056 1054 /* open dir */ 1057 - dout("open_root_inode opening '%s'\n", path); 1055 + doutc(cl, "opening '%s'\n", path); 1058 1056 req = ceph_mdsc_create_request(mdsc, CEPH_MDS_OP_GETATTR, USE_ANY_MDS); 1059 1057 if (IS_ERR(req)) 1060 1058 return ERR_CAST(req); ··· 1075 1071 if (err == 0) { 1076 1072 struct inode *inode = req->r_target_inode; 1077 1073 req->r_target_inode = NULL; 1078 - dout("open_root_inode success\n"); 1074 + doutc(cl, "success\n"); 1079 1075 root = d_make_root(inode); 1080 1076 if (!root) { 1081 1077 root = ERR_PTR(-ENOMEM); 1082 1078 goto out; 1083 1079 } 1084 - dout("open_root_inode success, root dentry is %p\n", root); 1080 + doutc(cl, "success, root dentry is %p\n", root); 1085 1081 } else { 1086 1082 root = ERR_PTR(err); 1087 1083 } ··· 1140 1136 static struct dentry *ceph_real_mount(struct ceph_fs_client *fsc, 1141 1137 struct fs_context *fc) 1142 1138 { 1139 + struct ceph_client *cl = fsc->client; 1143 1140 int err; 1144 1141 unsigned long started = jiffies; /* note the start time */ 1145 1142 struct dentry *root; 1146 1143 1147 - dout("mount start %p\n", fsc); 1144 + doutc(cl, "mount start %p\n", fsc); 1148 1145 mutex_lock(&fsc->client->mount_mutex); 1149 1146 1150 1147 if (!fsc->sb->s_root) { ··· 1168 1163 if (err) 1169 1164 goto out; 1170 1165 1171 - dout("mount opening path '%s'\n", path); 1166 + doutc(cl, "mount opening path '%s'\n", path); 1172 1167 1173 1168 ceph_fs_debugfs_init(fsc); 1174 1169 ··· 1183 1178 } 1184 1179 1185 1180 fsc->mount_state = CEPH_MOUNT_MOUNTED; 1186 - dout("mount success\n"); 1181 + doutc(cl, "mount success\n"); 1187 1182 mutex_unlock(&fsc->client->mount_mutex); 1188 1183 return root; 1189 1184 ··· 1196 1191 static int ceph_set_super(struct super_block *s, struct fs_context *fc) 1197 1192 { 1198 1193 struct ceph_fs_client *fsc = s->s_fs_info; 1194 + struct ceph_client *cl = fsc->client; 1199 1195 int ret; 1200 1196 1201 - dout("set_super %p\n", s); 1197 + doutc(cl, "%p\n", s); 1202 1198 1203 1199 s->s_maxbytes = MAX_LFS_FILESIZE; 1204 1200 ··· 1232 1226 struct ceph_fs_client *new = fc->s_fs_info; 1233 1227 struct ceph_mount_options *fsopt = new->mount_options; 1234 1228 struct ceph_options *opt = new->client->options; 1235 - struct ceph_fs_client *fsc = ceph_sb_to_client(sb); 1229 + struct ceph_fs_client *fsc = ceph_sb_to_fs_client(sb); 1230 + struct ceph_client *cl = fsc->client; 1236 1231 1237 - dout("ceph_compare_super %p\n", sb); 1232 + doutc(cl, "%p\n", sb); 1238 1233 1239 1234 if (compare_mount_options(fsopt, opt, fsc)) { 1240 - dout("monitor(s)/mount options don't match\n"); 1235 + doutc(cl, "monitor(s)/mount options don't match\n"); 1241 1236 return 0; 1242 1237 } 1243 1238 if ((opt->flags & CEPH_OPT_FSID) && 1244 1239 ceph_fsid_compare(&opt->fsid, &fsc->client->fsid)) { 1245 - dout("fsid doesn't match\n"); 1240 + doutc(cl, "fsid doesn't match\n"); 1246 1241 return 0; 1247 1242 } 1248 1243 if (fc->sb_flags != (sb->s_flags & ~SB_BORN)) { 1249 - dout("flags differ\n"); 1244 + doutc(cl, "flags differ\n"); 1250 1245 return 0; 1251 1246 } 1252 1247 1253 1248 if (fsc->blocklisted && !ceph_test_mount_opt(fsc, CLEANRECOVER)) { 1254 - dout("client is blocklisted (and CLEANRECOVER is not set)\n"); 1249 + doutc(cl, "client is blocklisted (and CLEANRECOVER is not set)\n"); 1255 1250 return 0; 1256 1251 } 1257 1252 1258 1253 if (fsc->mount_state == CEPH_MOUNT_SHUTDOWN) { 1259 - dout("client has been forcibly unmounted\n"); 1254 + doutc(cl, "client has been forcibly unmounted\n"); 1260 1255 return 0; 1261 1256 } 1262 1257 ··· 1329 1322 goto out; 1330 1323 } 1331 1324 1332 - if (ceph_sb_to_client(sb) != fsc) { 1325 + if (ceph_sb_to_fs_client(sb) != fsc) { 1333 1326 destroy_fs_client(fsc); 1334 - fsc = ceph_sb_to_client(sb); 1327 + fsc = ceph_sb_to_fs_client(sb); 1335 1328 dout("get_sb got existing client %p\n", fsc); 1336 1329 } else { 1337 1330 dout("get_sb using new client %p\n", fsc); ··· 1345 1338 err = PTR_ERR(res); 1346 1339 goto out_splat; 1347 1340 } 1348 - dout("root %p inode %p ino %llx.%llx\n", res, 1349 - d_inode(res), ceph_vinop(d_inode(res))); 1341 + 1342 + doutc(fsc->client, "root %p inode %p ino %llx.%llx\n", res, 1343 + d_inode(res), ceph_vinop(d_inode(res))); 1350 1344 fc->root = fsc->sb->s_root; 1351 1345 return 0; 1352 1346 ··· 1385 1377 struct ceph_parse_opts_ctx *pctx = fc->fs_private; 1386 1378 struct ceph_mount_options *fsopt = pctx->opts; 1387 1379 struct super_block *sb = fc->root->d_sb; 1388 - struct ceph_fs_client *fsc = ceph_sb_to_client(sb); 1380 + struct ceph_fs_client *fsc = ceph_sb_to_fs_client(sb); 1389 1381 1390 1382 err = ceph_apply_test_dummy_encryption(sb, fc, fsopt); 1391 1383 if (err) ··· 1405 1397 kfree(fsc->mount_options->mon_addr); 1406 1398 fsc->mount_options->mon_addr = fsopt->mon_addr; 1407 1399 fsopt->mon_addr = NULL; 1408 - pr_notice("ceph: monitor addresses recorded, but not used for reconnection"); 1400 + pr_notice_client(fsc->client, 1401 + "monitor addresses recorded, but not used for reconnection"); 1409 1402 } 1410 1403 1411 1404 sync_filesystem(sb); ··· 1525 1516 1526 1517 static void ceph_kill_sb(struct super_block *s) 1527 1518 { 1528 - struct ceph_fs_client *fsc = ceph_sb_to_client(s); 1519 + struct ceph_fs_client *fsc = ceph_sb_to_fs_client(s); 1520 + struct ceph_client *cl = fsc->client; 1529 1521 struct ceph_mds_client *mdsc = fsc->mdsc; 1530 1522 bool wait; 1531 1523 1532 - dout("kill_sb %p\n", s); 1524 + doutc(cl, "%p\n", s); 1533 1525 1534 1526 ceph_mdsc_pre_umount(mdsc); 1535 1527 flush_fs_workqueues(fsc); ··· 1561 1551 &mdsc->stopping_waiter, 1562 1552 fsc->client->options->mount_timeout); 1563 1553 if (!timeleft) /* timed out */ 1564 - pr_warn("umount timed out, %ld\n", timeleft); 1554 + pr_warn_client(cl, "umount timed out, %ld\n", timeleft); 1565 1555 else if (timeleft < 0) /* killed */ 1566 - pr_warn("umount was killed, %ld\n", timeleft); 1556 + pr_warn_client(cl, "umount was killed, %ld\n", timeleft); 1567 1557 } 1568 1558 1569 1559 mdsc->stopping = CEPH_MDSC_STOPPING_FLUSHED; ··· 1582 1572 .name = "ceph", 1583 1573 .init_fs_context = ceph_init_fs_context, 1584 1574 .kill_sb = ceph_kill_sb, 1585 - .fs_flags = FS_RENAME_DOES_D_MOVE, 1575 + .fs_flags = FS_RENAME_DOES_D_MOVE | FS_ALLOW_IDMAP, 1586 1576 }; 1587 1577 MODULE_ALIAS_FS("ceph"); 1588 1578 1589 1579 int ceph_force_reconnect(struct super_block *sb) 1590 1580 { 1591 - struct ceph_fs_client *fsc = ceph_sb_to_client(sb); 1581 + struct ceph_fs_client *fsc = ceph_sb_to_fs_client(sb); 1592 1582 int err = 0; 1593 1583 1594 1584 fsc->mount_state = CEPH_MOUNT_RECOVER; ··· 1680 1670 }; 1681 1671 module_param_cb(mount_syntax_v1, &param_ops_mount_syntax, &mount_support, 0444); 1682 1672 module_param_cb(mount_syntax_v2, &param_ops_mount_syntax, &mount_support, 0444); 1673 + 1674 + bool enable_unsafe_idmap = false; 1675 + module_param(enable_unsafe_idmap, bool, 0644); 1676 + MODULE_PARM_DESC(enable_unsafe_idmap, 1677 + "Allow to use idmapped mounts with MDS without CEPHFS_FEATURE_HAS_OWNER_UIDGID"); 1683 1678 1684 1679 module_init(init_ceph); 1685 1680 module_exit(exit_ceph);
+15 -8
fs/ceph/super.h
··· 488 488 } 489 489 490 490 static inline struct ceph_fs_client * 491 - ceph_inode_to_client(const struct inode *inode) 491 + ceph_inode_to_fs_client(const struct inode *inode) 492 492 { 493 493 return (struct ceph_fs_client *)inode->i_sb->s_fs_info; 494 494 } 495 495 496 496 static inline struct ceph_fs_client * 497 - ceph_sb_to_client(const struct super_block *sb) 497 + ceph_sb_to_fs_client(const struct super_block *sb) 498 498 { 499 499 return (struct ceph_fs_client *)sb->s_fs_info; 500 500 } ··· 502 502 static inline struct ceph_mds_client * 503 503 ceph_sb_to_mdsc(const struct super_block *sb) 504 504 { 505 - return (struct ceph_mds_client *)ceph_sb_to_client(sb)->mdsc; 505 + return (struct ceph_mds_client *)ceph_sb_to_fs_client(sb)->mdsc; 506 + } 507 + 508 + static inline struct ceph_client * 509 + ceph_inode_to_client(const struct inode *inode) 510 + { 511 + return (struct ceph_client *)ceph_inode_to_fs_client(inode)->client; 506 512 } 507 513 508 514 static inline struct ceph_vino ··· 564 558 */ 565 559 static inline u64 ceph_present_ino(struct super_block *sb, u64 ino) 566 560 { 567 - if (unlikely(ceph_test_mount_opt(ceph_sb_to_client(sb), INO32))) 561 + if (unlikely(ceph_test_mount_opt(ceph_sb_to_fs_client(sb), INO32))) 568 562 return ceph_ino_to_ino32(ino); 569 563 return ino; 570 564 } ··· 1100 1094 struct ceph_fscrypt_auth *fscrypt_auth; 1101 1095 }; 1102 1096 1103 - extern int __ceph_setattr(struct inode *inode, struct iattr *attr, 1104 - struct ceph_iattr *cia); 1097 + extern int __ceph_setattr(struct mnt_idmap *idmap, struct inode *inode, 1098 + struct iattr *attr, struct ceph_iattr *cia); 1105 1099 extern int ceph_setattr(struct mnt_idmap *idmap, 1106 1100 struct dentry *dentry, struct iattr *attr); 1107 1101 extern int ceph_getattr(struct mnt_idmap *idmap, ··· 1112 1106 static inline bool ceph_inode_is_shutdown(struct inode *inode) 1113 1107 { 1114 1108 unsigned long flags = READ_ONCE(ceph_inode(inode)->i_ceph_flags); 1115 - struct ceph_fs_client *fsc = ceph_inode_to_client(inode); 1109 + struct ceph_fs_client *fsc = ceph_inode_to_fs_client(inode); 1116 1110 int state = READ_ONCE(fsc->mount_state); 1117 1111 1118 1112 return (flags & CEPH_I_SHUTDOWN) || state >= CEPH_MOUNT_SHUTDOWN; ··· 1229 1223 unsigned cap, unsigned seq, u64 realmino, int flags, 1230 1224 struct ceph_cap **new_cap); 1231 1225 extern void __ceph_remove_cap(struct ceph_cap *cap, bool queue_release); 1232 - extern void ceph_remove_cap(struct ceph_cap *cap, bool queue_release); 1226 + extern void ceph_remove_cap(struct ceph_mds_client *mdsc, struct ceph_cap *cap, 1227 + bool queue_release); 1233 1228 extern void __ceph_remove_caps(struct ceph_inode_info *ci); 1234 1229 extern void ceph_put_cap(struct ceph_mds_client *mdsc, 1235 1230 struct ceph_cap *cap);
+63 -45
fs/ceph/xattr.c
··· 57 57 static ssize_t ceph_vxattrcb_layout(struct ceph_inode_info *ci, char *val, 58 58 size_t size) 59 59 { 60 - struct ceph_fs_client *fsc = ceph_sb_to_client(ci->netfs.inode.i_sb); 60 + struct ceph_fs_client *fsc = ceph_sb_to_fs_client(ci->netfs.inode.i_sb); 61 + struct ceph_client *cl = fsc->client; 61 62 struct ceph_osd_client *osdc = &fsc->client->osdc; 62 63 struct ceph_string *pool_ns; 63 64 s64 pool = ci->i_layout.pool_id; ··· 70 69 71 70 pool_ns = ceph_try_get_string(ci->i_layout.pool_ns); 72 71 73 - dout("ceph_vxattrcb_layout %p\n", &ci->netfs.inode); 72 + doutc(cl, "%p\n", &ci->netfs.inode); 74 73 down_read(&osdc->lock); 75 74 pool_name = ceph_pg_pool_name_by_id(osdc->osdmap, pool); 76 75 if (pool_name) { ··· 162 161 char *val, size_t size) 163 162 { 164 163 ssize_t ret; 165 - struct ceph_fs_client *fsc = ceph_sb_to_client(ci->netfs.inode.i_sb); 164 + struct ceph_fs_client *fsc = ceph_sb_to_fs_client(ci->netfs.inode.i_sb); 166 165 struct ceph_osd_client *osdc = &fsc->client->osdc; 167 166 s64 pool = ci->i_layout.pool_id; 168 167 const char *pool_name; ··· 314 313 static ssize_t ceph_vxattrcb_cluster_fsid(struct ceph_inode_info *ci, 315 314 char *val, size_t size) 316 315 { 317 - struct ceph_fs_client *fsc = ceph_sb_to_client(ci->netfs.inode.i_sb); 316 + struct ceph_fs_client *fsc = ceph_sb_to_fs_client(ci->netfs.inode.i_sb); 318 317 319 318 return ceph_fmt_xattr(val, size, "%pU", &fsc->client->fsid); 320 319 } ··· 322 321 static ssize_t ceph_vxattrcb_client_id(struct ceph_inode_info *ci, 323 322 char *val, size_t size) 324 323 { 325 - struct ceph_fs_client *fsc = ceph_sb_to_client(ci->netfs.inode.i_sb); 324 + struct ceph_fs_client *fsc = ceph_sb_to_fs_client(ci->netfs.inode.i_sb); 326 325 327 326 return ceph_fmt_xattr(val, size, "client%lld", 328 327 ceph_client_gid(fsc->client)); ··· 571 570 int flags, int update_xattr, 572 571 struct ceph_inode_xattr **newxattr) 573 572 { 573 + struct inode *inode = &ci->netfs.inode; 574 + struct ceph_client *cl = ceph_inode_to_client(inode); 574 575 struct rb_node **p; 575 576 struct rb_node *parent = NULL; 576 577 struct ceph_inode_xattr *xattr = NULL; ··· 629 626 xattr->should_free_name = update_xattr; 630 627 631 628 ci->i_xattrs.count++; 632 - dout("%s count=%d\n", __func__, ci->i_xattrs.count); 629 + doutc(cl, "count=%d\n", ci->i_xattrs.count); 633 630 } else { 634 631 kfree(*newxattr); 635 632 *newxattr = NULL; ··· 657 654 if (new) { 658 655 rb_link_node(&xattr->node, parent, p); 659 656 rb_insert_color(&xattr->node, &ci->i_xattrs.index); 660 - dout("%s p=%p\n", __func__, p); 657 + doutc(cl, "p=%p\n", p); 661 658 } 662 659 663 - dout("%s added %llx.%llx xattr %p %.*s=%.*s%s\n", __func__, 664 - ceph_vinop(&ci->netfs.inode), xattr, name_len, name, 665 - min(val_len, MAX_XATTR_VAL_PRINT_LEN), val, 666 - val_len > MAX_XATTR_VAL_PRINT_LEN ? "..." : ""); 660 + doutc(cl, "added %p %llx.%llx xattr %p %.*s=%.*s%s\n", inode, 661 + ceph_vinop(inode), xattr, name_len, name, min(val_len, 662 + MAX_XATTR_VAL_PRINT_LEN), val, 663 + val_len > MAX_XATTR_VAL_PRINT_LEN ? "..." : ""); 667 664 668 665 return 0; 669 666 } ··· 671 668 static struct ceph_inode_xattr *__get_xattr(struct ceph_inode_info *ci, 672 669 const char *name) 673 670 { 671 + struct ceph_client *cl = ceph_inode_to_client(&ci->netfs.inode); 674 672 struct rb_node **p; 675 673 struct rb_node *parent = NULL; 676 674 struct ceph_inode_xattr *xattr = NULL; ··· 692 688 else { 693 689 int len = min(xattr->val_len, MAX_XATTR_VAL_PRINT_LEN); 694 690 695 - dout("%s %s: found %.*s%s\n", __func__, name, len, 696 - xattr->val, xattr->val_len > len ? "..." : ""); 691 + doutc(cl, "%s found %.*s%s\n", name, len, xattr->val, 692 + xattr->val_len > len ? "..." : ""); 697 693 return xattr; 698 694 } 699 695 } 700 696 701 - dout("%s %s: not found\n", __func__, name); 697 + doutc(cl, "%s not found\n", name); 702 698 703 699 return NULL; 704 700 } ··· 739 735 static char *__copy_xattr_names(struct ceph_inode_info *ci, 740 736 char *dest) 741 737 { 738 + struct ceph_client *cl = ceph_inode_to_client(&ci->netfs.inode); 742 739 struct rb_node *p; 743 740 struct ceph_inode_xattr *xattr = NULL; 744 741 745 742 p = rb_first(&ci->i_xattrs.index); 746 - dout("__copy_xattr_names count=%d\n", ci->i_xattrs.count); 743 + doutc(cl, "count=%d\n", ci->i_xattrs.count); 747 744 748 745 while (p) { 749 746 xattr = rb_entry(p, struct ceph_inode_xattr, node); 750 747 memcpy(dest, xattr->name, xattr->name_len); 751 748 dest[xattr->name_len] = '\0'; 752 749 753 - dout("dest=%s %p (%s) (%d/%d)\n", dest, xattr, xattr->name, 754 - xattr->name_len, ci->i_xattrs.names_size); 750 + doutc(cl, "dest=%s %p (%s) (%d/%d)\n", dest, xattr, xattr->name, 751 + xattr->name_len, ci->i_xattrs.names_size); 755 752 756 753 dest += xattr->name_len + 1; 757 754 p = rb_next(p); ··· 763 758 764 759 void __ceph_destroy_xattrs(struct ceph_inode_info *ci) 765 760 { 761 + struct ceph_client *cl = ceph_inode_to_client(&ci->netfs.inode); 766 762 struct rb_node *p, *tmp; 767 763 struct ceph_inode_xattr *xattr = NULL; 768 764 769 765 p = rb_first(&ci->i_xattrs.index); 770 766 771 - dout("__ceph_destroy_xattrs p=%p\n", p); 767 + doutc(cl, "p=%p\n", p); 772 768 773 769 while (p) { 774 770 xattr = rb_entry(p, struct ceph_inode_xattr, node); 775 771 tmp = p; 776 772 p = rb_next(tmp); 777 - dout("__ceph_destroy_xattrs next p=%p (%.*s)\n", p, 778 - xattr->name_len, xattr->name); 773 + doutc(cl, "next p=%p (%.*s)\n", p, xattr->name_len, xattr->name); 779 774 rb_erase(tmp, &ci->i_xattrs.index); 780 775 781 776 __free_xattr(xattr); ··· 792 787 __releases(ci->i_ceph_lock) 793 788 __acquires(ci->i_ceph_lock) 794 789 { 790 + struct ceph_client *cl = ceph_inode_to_client(inode); 795 791 u32 namelen; 796 792 u32 numattr = 0; 797 793 void *p, *end; ··· 804 798 int err = 0; 805 799 int i; 806 800 807 - dout("__build_xattrs() len=%d\n", 808 - ci->i_xattrs.blob ? (int)ci->i_xattrs.blob->vec.iov_len : 0); 801 + doutc(cl, "len=%d\n", 802 + ci->i_xattrs.blob ? (int)ci->i_xattrs.blob->vec.iov_len : 0); 809 803 810 804 if (ci->i_xattrs.index_version >= ci->i_xattrs.version) 811 805 return 0; /* already built */ ··· 880 874 static int __get_required_blob_size(struct ceph_inode_info *ci, int name_size, 881 875 int val_size) 882 876 { 877 + struct ceph_client *cl = ceph_inode_to_client(&ci->netfs.inode); 878 + 883 879 /* 884 880 * 4 bytes for the length, and additional 4 bytes per each xattr name, 885 881 * 4 bytes per each value ··· 889 881 int size = 4 + ci->i_xattrs.count*(4 + 4) + 890 882 ci->i_xattrs.names_size + 891 883 ci->i_xattrs.vals_size; 892 - dout("__get_required_blob_size c=%d names.size=%d vals.size=%d\n", 893 - ci->i_xattrs.count, ci->i_xattrs.names_size, 894 - ci->i_xattrs.vals_size); 884 + doutc(cl, "c=%d names.size=%d vals.size=%d\n", ci->i_xattrs.count, 885 + ci->i_xattrs.names_size, ci->i_xattrs.vals_size); 895 886 896 887 if (name_size) 897 888 size += 4 + 4 + name_size + val_size; ··· 906 899 */ 907 900 struct ceph_buffer *__ceph_build_xattrs_blob(struct ceph_inode_info *ci) 908 901 { 902 + struct inode *inode = &ci->netfs.inode; 903 + struct ceph_client *cl = ceph_inode_to_client(inode); 909 904 struct rb_node *p; 910 905 struct ceph_inode_xattr *xattr = NULL; 911 906 struct ceph_buffer *old_blob = NULL; 912 907 void *dest; 913 908 914 - dout("__build_xattrs_blob %p\n", &ci->netfs.inode); 909 + doutc(cl, "%p %llx.%llx\n", inode, ceph_vinop(inode)); 915 910 if (ci->i_xattrs.dirty) { 916 911 int need = __get_required_blob_size(ci, 0, 0); 917 912 ··· 971 962 ssize_t __ceph_getxattr(struct inode *inode, const char *name, void *value, 972 963 size_t size) 973 964 { 965 + struct ceph_client *cl = ceph_inode_to_client(inode); 974 966 struct ceph_inode_info *ci = ceph_inode(inode); 975 967 struct ceph_inode_xattr *xattr; 976 968 struct ceph_vxattr *vxattr; ··· 1010 1000 req_mask = __get_request_mask(inode); 1011 1001 1012 1002 spin_lock(&ci->i_ceph_lock); 1013 - dout("getxattr %p name '%s' ver=%lld index_ver=%lld\n", inode, name, 1014 - ci->i_xattrs.version, ci->i_xattrs.index_version); 1003 + doutc(cl, "%p %llx.%llx name '%s' ver=%lld index_ver=%lld\n", inode, 1004 + ceph_vinop(inode), name, ci->i_xattrs.version, 1005 + ci->i_xattrs.index_version); 1015 1006 1016 1007 if (ci->i_xattrs.version == 0 || 1017 1008 !((req_mask & CEPH_CAP_XATTR_SHARED) || ··· 1021 1010 1022 1011 /* security module gets xattr while filling trace */ 1023 1012 if (current->journal_info) { 1024 - pr_warn_ratelimited("sync getxattr %p " 1025 - "during filling trace\n", inode); 1013 + pr_warn_ratelimited_client(cl, 1014 + "sync %p %llx.%llx during filling trace\n", 1015 + inode, ceph_vinop(inode)); 1026 1016 return -EBUSY; 1027 1017 } 1028 1018 ··· 1065 1053 ssize_t ceph_listxattr(struct dentry *dentry, char *names, size_t size) 1066 1054 { 1067 1055 struct inode *inode = d_inode(dentry); 1056 + struct ceph_client *cl = ceph_inode_to_client(inode); 1068 1057 struct ceph_inode_info *ci = ceph_inode(inode); 1069 1058 bool len_only = (size == 0); 1070 1059 u32 namelen; 1071 1060 int err; 1072 1061 1073 1062 spin_lock(&ci->i_ceph_lock); 1074 - dout("listxattr %p ver=%lld index_ver=%lld\n", inode, 1075 - ci->i_xattrs.version, ci->i_xattrs.index_version); 1063 + doutc(cl, "%p %llx.%llx ver=%lld index_ver=%lld\n", inode, 1064 + ceph_vinop(inode), ci->i_xattrs.version, 1065 + ci->i_xattrs.index_version); 1076 1066 1077 1067 if (ci->i_xattrs.version == 0 || 1078 1068 !__ceph_caps_issued_mask_metric(ci, CEPH_CAP_XATTR_SHARED, 1)) { ··· 1108 1094 static int ceph_sync_setxattr(struct inode *inode, const char *name, 1109 1095 const char *value, size_t size, int flags) 1110 1096 { 1111 - struct ceph_fs_client *fsc = ceph_sb_to_client(inode->i_sb); 1097 + struct ceph_fs_client *fsc = ceph_sb_to_fs_client(inode->i_sb); 1098 + struct ceph_client *cl = ceph_inode_to_client(inode); 1112 1099 struct ceph_inode_info *ci = ceph_inode(inode); 1113 1100 struct ceph_mds_request *req; 1114 1101 struct ceph_mds_client *mdsc = fsc->mdsc; ··· 1134 1119 flags |= CEPH_XATTR_REMOVE; 1135 1120 } 1136 1121 1137 - dout("setxattr value size: %zu\n", size); 1122 + doutc(cl, "name %s value size %zu\n", name, size); 1138 1123 1139 1124 /* do request */ 1140 1125 req = ceph_mdsc_create_request(mdsc, op, USE_AUTH_MDS); ··· 1163 1148 req->r_num_caps = 1; 1164 1149 req->r_inode_drop = CEPH_CAP_XATTR_SHARED; 1165 1150 1166 - dout("xattr.ver (before): %lld\n", ci->i_xattrs.version); 1151 + doutc(cl, "xattr.ver (before): %lld\n", ci->i_xattrs.version); 1167 1152 err = ceph_mdsc_do_request(mdsc, NULL, req); 1168 1153 ceph_mdsc_put_request(req); 1169 - dout("xattr.ver (after): %lld\n", ci->i_xattrs.version); 1154 + doutc(cl, "xattr.ver (after): %lld\n", ci->i_xattrs.version); 1170 1155 1171 1156 out: 1172 1157 if (pagelist) ··· 1177 1162 int __ceph_setxattr(struct inode *inode, const char *name, 1178 1163 const void *value, size_t size, int flags) 1179 1164 { 1165 + struct ceph_client *cl = ceph_inode_to_client(inode); 1180 1166 struct ceph_vxattr *vxattr; 1181 1167 struct ceph_inode_info *ci = ceph_inode(inode); 1182 - struct ceph_mds_client *mdsc = ceph_sb_to_client(inode->i_sb)->mdsc; 1168 + struct ceph_mds_client *mdsc = ceph_sb_to_fs_client(inode->i_sb)->mdsc; 1183 1169 struct ceph_cap_flush *prealloc_cf = NULL; 1184 1170 struct ceph_buffer *old_blob = NULL; 1185 1171 int issued; ··· 1236 1220 required_blob_size = __get_required_blob_size(ci, name_len, val_len); 1237 1221 if ((ci->i_xattrs.version == 0) || !(issued & CEPH_CAP_XATTR_EXCL) || 1238 1222 (required_blob_size > mdsc->mdsmap->m_max_xattr_size)) { 1239 - dout("%s do sync setxattr: version: %llu size: %d max: %llu\n", 1240 - __func__, ci->i_xattrs.version, required_blob_size, 1241 - mdsc->mdsmap->m_max_xattr_size); 1223 + doutc(cl, "sync version: %llu size: %d max: %llu\n", 1224 + ci->i_xattrs.version, required_blob_size, 1225 + mdsc->mdsmap->m_max_xattr_size); 1242 1226 goto do_sync; 1243 1227 } 1244 1228 ··· 1252 1236 } 1253 1237 } 1254 1238 1255 - dout("setxattr %p name '%s' issued %s\n", inode, name, 1256 - ceph_cap_string(issued)); 1239 + doutc(cl, "%p %llx.%llx name '%s' issued %s\n", inode, 1240 + ceph_vinop(inode), name, ceph_cap_string(issued)); 1257 1241 __build_xattrs(inode); 1258 1242 1259 1243 if (!ci->i_xattrs.prealloc_blob || ··· 1262 1246 1263 1247 spin_unlock(&ci->i_ceph_lock); 1264 1248 ceph_buffer_put(old_blob); /* Shouldn't be required */ 1265 - dout(" pre-allocating new blob size=%d\n", required_blob_size); 1249 + doutc(cl, " pre-allocating new blob size=%d\n", 1250 + required_blob_size); 1266 1251 blob = ceph_buffer_new(required_blob_size, GFP_NOFS); 1267 1252 if (!blob) 1268 1253 goto do_sync_unlocked; ··· 1302 1285 1303 1286 /* security module set xattr while filling trace */ 1304 1287 if (current->journal_info) { 1305 - pr_warn_ratelimited("sync setxattr %p " 1306 - "during filling trace\n", inode); 1288 + pr_warn_ratelimited_client(cl, 1289 + "sync %p %llx.%llx during filling trace\n", 1290 + inode, ceph_vinop(inode)); 1307 1291 err = -EBUSY; 1308 1292 } else { 1309 1293 err = ceph_sync_setxattr(inode, name, value, size, flags);
+2
fs/mnt_idmapping.c
··· 256 256 257 257 return idmap; 258 258 } 259 + EXPORT_SYMBOL_GPL(mnt_idmap_get); 259 260 260 261 /** 261 262 * mnt_idmap_put - put a reference to an idmapping ··· 272 271 kfree(idmap); 273 272 } 274 273 } 274 + EXPORT_SYMBOL_GPL(mnt_idmap_put);
+38
include/linux/ceph/ceph_debug.h
··· 19 19 pr_debug("%.*s %12.12s:%-4d : " fmt, \ 20 20 8 - (int)sizeof(KBUILD_MODNAME), " ", \ 21 21 kbasename(__FILE__), __LINE__, ##__VA_ARGS__) 22 + # define doutc(client, fmt, ...) \ 23 + pr_debug("%.*s %12.12s:%-4d : [%pU %llu] " fmt, \ 24 + 8 - (int)sizeof(KBUILD_MODNAME), " ", \ 25 + kbasename(__FILE__), __LINE__, \ 26 + &client->fsid, client->monc.auth->global_id, \ 27 + ##__VA_ARGS__) 22 28 # else 23 29 /* faux printk call just to see any compiler warnings. */ 24 30 # define dout(fmt, ...) do { \ 25 31 if (0) \ 26 32 printk(KERN_DEBUG fmt, ##__VA_ARGS__); \ 27 33 } while (0) 34 + # define doutc(client, fmt, ...) do { \ 35 + if (0) \ 36 + printk(KERN_DEBUG "[%pU %llu] " fmt, \ 37 + &client->fsid, \ 38 + client->monc.auth->global_id, \ 39 + ##__VA_ARGS__); \ 40 + } while (0) 28 41 # endif 29 42 30 43 #else ··· 46 33 * or, just wrap pr_debug 47 34 */ 48 35 # define dout(fmt, ...) pr_debug(" " fmt, ##__VA_ARGS__) 36 + # define doutc(client, fmt, ...) \ 37 + pr_debug(" [%pU %llu] %s: " fmt, &client->fsid, \ 38 + client->monc.auth->global_id, __func__, ##__VA_ARGS__) 49 39 50 40 #endif 41 + 42 + #define pr_notice_client(client, fmt, ...) \ 43 + pr_notice("[%pU %llu]: " fmt, &client->fsid, \ 44 + client->monc.auth->global_id, ##__VA_ARGS__) 45 + #define pr_info_client(client, fmt, ...) \ 46 + pr_info("[%pU %llu]: " fmt, &client->fsid, \ 47 + client->monc.auth->global_id, ##__VA_ARGS__) 48 + #define pr_warn_client(client, fmt, ...) \ 49 + pr_warn("[%pU %llu]: " fmt, &client->fsid, \ 50 + client->monc.auth->global_id, ##__VA_ARGS__) 51 + #define pr_warn_once_client(client, fmt, ...) \ 52 + pr_warn_once("[%pU %llu]: " fmt, &client->fsid, \ 53 + client->monc.auth->global_id, ##__VA_ARGS__) 54 + #define pr_err_client(client, fmt, ...) \ 55 + pr_err("[%pU %llu]: " fmt, &client->fsid, \ 56 + client->monc.auth->global_id, ##__VA_ARGS__) 57 + #define pr_warn_ratelimited_client(client, fmt, ...) \ 58 + pr_warn_ratelimited("[%pU %llu]: " fmt, &client->fsid, \ 59 + client->monc.auth->global_id, ##__VA_ARGS__) 60 + #define pr_err_ratelimited_client(client, fmt, ...) \ 61 + pr_err_ratelimited("[%pU %llu]: " fmt, &client->fsid, \ 62 + client->monc.auth->global_id, ##__VA_ARGS__) 51 63 52 64 #endif
+9 -1
include/linux/ceph/ceph_fs.h
··· 357 357 CEPH_MDS_OP_RENAMESNAP = 0x01403, 358 358 }; 359 359 360 + #define IS_CEPH_MDS_OP_NEWINODE(op) (op == CEPH_MDS_OP_CREATE || \ 361 + op == CEPH_MDS_OP_MKNOD || \ 362 + op == CEPH_MDS_OP_MKDIR || \ 363 + op == CEPH_MDS_OP_SYMLINK) 364 + 360 365 extern const char *ceph_mds_op_name(int op); 361 366 362 367 #define CEPH_SETATTR_MODE (1 << 0) ··· 502 497 union ceph_mds_request_args args; 503 498 } __attribute__ ((packed)); 504 499 505 - #define CEPH_MDS_REQUEST_HEAD_VERSION 2 500 + #define CEPH_MDS_REQUEST_HEAD_VERSION 3 506 501 507 502 struct ceph_mds_request_head_old { 508 503 __le16 version; /* struct version */ ··· 533 528 534 529 __le32 ext_num_retry; /* new count retry attempts */ 535 530 __le32 ext_num_fwd; /* new count fwd attempts */ 531 + 532 + __le32 struct_len; /* to store size of struct ceph_mds_request_head */ 533 + __le32 owner_uid, owner_gid; /* used for OPs which create inodes */ 536 534 } __attribute__ ((packed)); 537 535 538 536 /* cap/lease release record */
+4 -1
include/linux/ceph/mdsmap.h fs/ceph/mdsmap.h
··· 5 5 #include <linux/bug.h> 6 6 #include <linux/ceph/types.h> 7 7 8 + struct ceph_mds_client; 9 + 8 10 /* 9 11 * mds map - describe servers in the mds cluster. 10 12 * ··· 67 65 } 68 66 69 67 extern int ceph_mdsmap_get_random_mds(struct ceph_mdsmap *m); 70 - struct ceph_mdsmap *ceph_mdsmap_decode(void **p, void *end, bool msgr2); 68 + struct ceph_mdsmap *ceph_mdsmap_decode(struct ceph_mds_client *mdsc, void **p, 69 + void *end, bool msgr2); 71 70 extern void ceph_mdsmap_destroy(struct ceph_mdsmap *m); 72 71 extern bool ceph_mdsmap_is_cluster_available(struct ceph_mdsmap *m); 73 72
+3
include/linux/mnt_idmapping.h
··· 115 115 116 116 int vfsgid_in_group_p(vfsgid_t vfsgid); 117 117 118 + struct mnt_idmap *mnt_idmap_get(struct mnt_idmap *idmap); 119 + void mnt_idmap_put(struct mnt_idmap *idmap); 120 + 118 121 vfsuid_t make_vfsuid(struct mnt_idmap *idmap, 119 122 struct user_namespace *fs_userns, kuid_t kuid); 120 123