CC: [email protected] CC: [email protected] CC: [email protected] TO: Jeff Layton <[email protected]>
tree: https://github.com/ceph/ceph-client.git wip-fscrypt head: 4ec0d0e0cc68c6525ace02e7a8a5bb57a4242997 commit: 16a6682845642c1929a94e826c4426c22ef909d4 [29/63] ceph: add encrypted fname handling to ceph_mdsc_build_path :::::: branch date: 33 hours ago :::::: commit date: 33 hours ago config: x86_64-randconfig-c007 (https://download.01.org/0day-ci/archive/20220221/[email protected]/config) compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project d271fc04d5b97b12e6b797c6067d3c96a8d7470e) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/ceph/ceph-client/commit/16a6682845642c1929a94e826c4426c22ef909d4 git remote add ceph-client https://github.com/ceph/ceph-client.git git fetch --no-tags ceph-client wip-fscrypt git checkout 16a6682845642c1929a94e826c4426c22ef909d4 # save the config file to linux build tree COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=x86_64 clang-analyzer If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot <[email protected]> clang-analyzer warnings: (new ones prefixed by >>) fs/notify/fanotify/fanotify_user.c:1598:24: note: Left side of '&&' is false if (mask & FAN_RENAME && !(fid_mode & FAN_REPORT_NAME)) ^ fs/notify/fanotify/fanotify_user.c:1601:6: note: Assuming the condition is false if (flags & FAN_MARK_FLUSH) { ^~~~~~~~~~~~~~~~~~~~~~ fs/notify/fanotify/fanotify_user.c:1601:2: note: Taking false branch if (flags & FAN_MARK_FLUSH) { ^ fs/notify/fanotify/fanotify_user.c:1614:6: note: Assuming 'ret' is 0 if (ret) ^~~ fs/notify/fanotify/fanotify_user.c:1614:2: note: Taking false branch if (ret) ^ fs/notify/fanotify/fanotify_user.c:1617:6: note: Assuming the condition is false if (flags & FAN_MARK_ADD) { ^~~~~~~~~~~~~~~~~~~~ fs/notify/fanotify/fanotify_user.c:1617:2: note: Taking false branch if (flags & FAN_MARK_ADD) { ^ fs/notify/fanotify/fanotify_user.c:1623:6: note: Assuming 'fid_mode' is 0 if (fid_mode) { ^~~~~~~~ fs/notify/fanotify/fanotify_user.c:1623:2: note: Taking false branch if (fid_mode) { ^ fs/notify/fanotify/fanotify_user.c:1636:6: note: 'mark_type' is not equal to FAN_MARK_INODE if (mark_type == FAN_MARK_INODE) ^~~~~~~~~ fs/notify/fanotify/fanotify_user.c:1636:2: note: Taking false branch if (mark_type == FAN_MARK_INODE) ^ fs/notify/fanotify/fanotify_user.c:1642:6: note: Assuming 'mnt' is null if (mnt || !S_ISDIR(inode->i_mode)) { ^~~ fs/notify/fanotify/fanotify_user.c:1642:6: note: Left side of '||' is false fs/notify/fanotify/fanotify_user.c:1642:14: note: Access to field 'i_mode' results in a dereference of a null pointer (loaded from variable 'inode') if (mnt || !S_ISDIR(inode->i_mode)) { ^ include/uapi/linux/stat.h:23:22: note: expanded from macro 'S_ISDIR' #define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) ^~ Suppressed 6 warnings (6 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 4 warnings generated. Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 6 warnings generated. drivers/acpi/power.c:951:2: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy] strcpy(acpi_device_name(device), ACPI_POWER_DEVICE_NAME); ^~~~~~ drivers/acpi/power.c:951:2: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 strcpy(acpi_device_name(device), ACPI_POWER_DEVICE_NAME); ^~~~~~ drivers/acpi/power.c:952:2: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy] strcpy(acpi_device_class(device), ACPI_POWER_CLASS); ^~~~~~ drivers/acpi/power.c:952:2: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 strcpy(acpi_device_class(device), ACPI_POWER_CLASS); ^~~~~~ Suppressed 4 warnings (4 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 8 warnings generated. drivers/acpi/event.c:31:2: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy] strcpy(event.device_class, dev->pnp.device_class); ^~~~~~ drivers/acpi/event.c:31:2: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 strcpy(event.device_class, dev->pnp.device_class); ^~~~~~ drivers/acpi/event.c:32:2: warning: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 [clang-analyzer-security.insecureAPI.strcpy] strcpy(event.bus_id, dev->pnp.bus_id); ^~~~~~ drivers/acpi/event.c:32:2: note: Call to function 'strcpy' is insecure as it does not provide bounding of the memory buffer. Replace unbounded copy functions with analogous functions that support length arguments such as 'strlcpy'. CWE-119 strcpy(event.bus_id, dev->pnp.bus_id); ^~~~~~ Suppressed 6 warnings (6 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 11 warnings generated. fs/ceph/mds_client.c:518:46: warning: Although the value stored to 'ino' is used in the enclosing expression, the value is never actually read from 'ino' [clang-analyzer-deadcode.DeadStores] int err = xa_insert(&s->s_delegated_inos, ino = start++, ^ ~~~~~~~ fs/ceph/mds_client.c:518:46: note: Although the value stored to 'ino' is used in the enclosing expression, the value is never actually read from 'ino' int err = xa_insert(&s->s_delegated_inos, ino = start++, ^ ~~~~~~~ fs/ceph/mds_client.c:1487:2: warning: Value stored to 'mstate' is never read [clang-analyzer-deadcode.DeadStores] mstate = ceph_mdsmap_get_state(mdsc->mdsmap, mds); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/ceph/mds_client.c:1487:2: note: Value stored to 'mstate' is never read mstate = ceph_mdsmap_get_state(mdsc->mdsmap, mds); ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> fs/ceph/mds_client.c:3915:19: warning: Assigned value is garbage or >> undefined [clang-analyzer-core.uninitialized.Assign] rec.v2.pathbase = cpu_to_le64(pathbase); ^ fs/ceph/mds_client.c:5269:2: note: Loop condition is false. Exiting loop pr_warn("mds%d closed our session\n", s->s_mds); ^ include/linux/printk.h:499:2: note: expanded from macro 'pr_warn' printk(KERN_WARNING pr_fmt(fmt), ##__VA_ARGS__) ^ include/linux/printk.h:446:26: note: expanded from macro 'printk' #define printk(fmt, ...) printk_index_wrap(_printk, fmt, ##__VA_ARGS__) ^ include/linux/printk.h:417:3: note: expanded from macro 'printk_index_wrap' __printk_index_emit(_fmt, NULL, NULL); \ ^ include/linux/printk.h:392:34: note: expanded from macro '__printk_index_emit' #define __printk_index_emit(...) do {} while (0) ^ fs/ceph/mds_client.c:5270:2: note: Calling 'send_mds_reconnect' send_mds_reconnect(mdsc, s); ^~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/ceph/mds_client.c:4120:2: note: Loop condition is false. Exiting loop pr_info("mds%d reconnect start\n", mds); ^ include/linux/printk.h:519:2: note: expanded from macro 'pr_info' printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__) ^ include/linux/printk.h:446:26: note: expanded from macro 'printk' #define printk(fmt, ...) printk_index_wrap(_printk, fmt, ##__VA_ARGS__) ^ include/linux/printk.h:417:3: note: expanded from macro 'printk_index_wrap' __printk_index_emit(_fmt, NULL, NULL); \ ^ include/linux/printk.h:392:34: note: expanded from macro '__printk_index_emit' #define __printk_index_emit(...) do {} while (0) ^ fs/ceph/mds_client.c:4123:6: note: Assuming field 'pagelist' is non-null if (!recon_state.pagelist) ^~~~~~~~~~~~~~~~~~~~~ fs/ceph/mds_client.c:4123:2: note: Taking false branch if (!recon_state.pagelist) ^ fs/ceph/mds_client.c:4127:6: note: Assuming 'reply' is non-null if (!reply) ^~~~~~ fs/ceph/mds_client.c:4127:2: note: Taking false branch if (!reply) ^ fs/ceph/mds_client.c:4136:2: note: Taking false branch dout("session %p state %s\n", session, ^ include/linux/ceph/ceph_debug.h:35:25: note: expanded from macro 'dout' # define dout(fmt, ...) pr_debug(" " fmt, ##__VA_ARGS__) ^ include/linux/printk.h:576:2: note: expanded from macro 'pr_debug' no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__) ^ include/linux/printk.h:131:2: note: expanded from macro 'no_printk' if (0) \ ^ fs/ceph/mds_client.c:4156:6: note: Assuming field 's_root' is null if (mdsc->fsc->sb->s_root) ^~~~~~~~~~~~~~~~~~~~~ fs/ceph/mds_client.c:4156:2: note: Taking false branch if (mdsc->fsc->sb->s_root) ^ fs/ceph/mds_client.c:4173:6: note: Assuming 'err' is 0 if (err) ^~~ fs/ceph/mds_client.c:4173:2: note: Taking false branch if (err) ^ fs/ceph/mds_client.c:4176:6: note: Assuming the condition is false if (test_bit(CEPHFS_FEATURE_MULTI_RECONNECT, &session->s_features)) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/ceph/mds_client.c:4176:2: note: Taking false branch if (test_bit(CEPHFS_FEATURE_MULTI_RECONNECT, &session->s_features)) { ^ fs/ceph/mds_client.c:4179:13: note: Assuming the condition is false } else if (session->s_con.peer_features & CEPH_FEATURE_MDSENC) { ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/ceph/mds_client.c:4179:9: note: Taking false branch } else if (session->s_con.peer_features & CEPH_FEATURE_MDSENC) { ^ fs/ceph/mds_client.c:4185:8: note: Calling 'ceph_iterate_session_caps' err = ceph_iterate_session_caps(session, reconnect_caps_cb, &recon_state); ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ fs/ceph/mds_client.c:1643:2: note: Taking false branch dout("iterate_session_caps %p mds%d\n", session, session->s_mds); ^ include/linux/ceph/ceph_debug.h:35:25: note: expanded from macro 'dout' # define dout(fmt, ...) pr_debug(" " fmt, ##__VA_ARGS__) ^ include/linux/printk.h:576:2: note: expanded from macro 'pr_debug' no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__) ^ include/linux/printk.h:131:2: note: expanded from macro 'no_printk' if (0) \ ^ fs/ceph/mds_client.c:1646:2: note: Loop condition is true. Entering loop body while (p != &session->s_caps) { vim +3915 fs/ceph/mds_client.c a33f6432b3a63a Yan, Zheng 2020-08-11 3856 2f2dc053404feb Sage Weil 2009-10-06 3857 /* 2f2dc053404feb Sage Weil 2009-10-06 3858 * Encode information about a cap for a reconnect with the MDS. 2f2dc053404feb Sage Weil 2009-10-06 3859 */ a25949b99003b7 Jeff Layton 2020-02-18 3860 static int reconnect_caps_cb(struct inode *inode, struct ceph_cap *cap, 2f2dc053404feb Sage Weil 2009-10-06 3861 void *arg) 2f2dc053404feb Sage Weil 2009-10-06 3862 { 20cb34ae9e4b00 Sage Weil 2010-05-12 3863 union { 20cb34ae9e4b00 Sage Weil 2010-05-12 3864 struct ceph_mds_cap_reconnect v2; 20cb34ae9e4b00 Sage Weil 2010-05-12 3865 struct ceph_mds_cap_reconnect_v1 v1; 20cb34ae9e4b00 Sage Weil 2010-05-12 3866 } rec; b3f8d68f38a879 Yan, Zheng 2017-09-11 3867 struct ceph_inode_info *ci = cap->ci; 20cb34ae9e4b00 Sage Weil 2010-05-12 3868 struct ceph_reconnect_state *recon_state = arg; 20cb34ae9e4b00 Sage Weil 2010-05-12 3869 struct ceph_pagelist *pagelist = recon_state->pagelist; a33f6432b3a63a Yan, Zheng 2020-08-11 3870 struct dentry *dentry; a33f6432b3a63a Yan, Zheng 2020-08-11 3871 char *path; ee2a095d3b24f3 Xiubo Li 2021-11-30 3872 int pathlen = 0, err; a33f6432b3a63a Yan, Zheng 2020-08-11 3873 u64 pathbase; 3469ed0d149ba7 Yan, Zheng 2016-07-05 3874 u64 snap_follows; 2f2dc053404feb Sage Weil 2009-10-06 3875 2f2dc053404feb Sage Weil 2009-10-06 3876 dout(" adding %p ino %llx.%llx cap %p %lld %s\n", 2f2dc053404feb Sage Weil 2009-10-06 3877 inode, ceph_vinop(inode), cap, cap->cap_id, 2f2dc053404feb Sage Weil 2009-10-06 3878 ceph_cap_string(cap->issued)); 2f2dc053404feb Sage Weil 2009-10-06 3879 a33f6432b3a63a Yan, Zheng 2020-08-11 3880 dentry = d_find_primary(inode); a33f6432b3a63a Yan, Zheng 2020-08-11 3881 if (dentry) { a33f6432b3a63a Yan, Zheng 2020-08-11 3882 /* set pathbase to parent dir when msg_version >= 2 */ a33f6432b3a63a Yan, Zheng 2020-08-11 3883 path = ceph_mdsc_build_path(dentry, &pathlen, &pathbase, a33f6432b3a63a Yan, Zheng 2020-08-11 3884 recon_state->msg_version >= 2); a33f6432b3a63a Yan, Zheng 2020-08-11 3885 dput(dentry); a33f6432b3a63a Yan, Zheng 2020-08-11 3886 if (IS_ERR(path)) { a33f6432b3a63a Yan, Zheng 2020-08-11 3887 err = PTR_ERR(path); a33f6432b3a63a Yan, Zheng 2020-08-11 3888 goto out_err; a33f6432b3a63a Yan, Zheng 2020-08-11 3889 } a33f6432b3a63a Yan, Zheng 2020-08-11 3890 } else { a33f6432b3a63a Yan, Zheng 2020-08-11 3891 path = NULL; a33f6432b3a63a Yan, Zheng 2020-08-11 3892 pathbase = 0; a33f6432b3a63a Yan, Zheng 2020-08-11 3893 } a33f6432b3a63a Yan, Zheng 2020-08-11 3894 be655596b3de58 Sage Weil 2011-11-30 3895 spin_lock(&ci->i_ceph_lock); 2f2dc053404feb Sage Weil 2009-10-06 3896 cap->seq = 0; /* reset cap seq */ 2f2dc053404feb Sage Weil 2009-10-06 3897 cap->issue_seq = 0; /* and issue_seq */ 667ca05cd9f02f Yan, Zheng 2013-05-31 3898 cap->mseq = 0; /* and migrate_seq */ 52d60f8e18b855 Jeff Layton 2021-06-04 3899 cap->cap_gen = atomic_read(&cap->session->s_cap_gen); 20cb34ae9e4b00 Sage Weil 2010-05-12 3900 a25949b99003b7 Jeff Layton 2020-02-18 3901 /* These are lost when the session goes away */ 785892fe88f693 Jeff Layton 2020-01-02 3902 if (S_ISDIR(inode->i_mode)) { 785892fe88f693 Jeff Layton 2020-01-02 3903 if (cap->issued & CEPH_CAP_DIR_CREATE) { 785892fe88f693 Jeff Layton 2020-01-02 3904 ceph_put_string(rcu_dereference_raw(ci->i_cached_layout.pool_ns)); 785892fe88f693 Jeff Layton 2020-01-02 3905 memset(&ci->i_cached_layout, 0, sizeof(ci->i_cached_layout)); 785892fe88f693 Jeff Layton 2020-01-02 3906 } a25949b99003b7 Jeff Layton 2020-02-18 3907 cap->issued &= ~CEPH_CAP_ANY_DIR_OPS; 785892fe88f693 Jeff Layton 2020-01-02 3908 } a25949b99003b7 Jeff Layton 2020-02-18 3909 121f22a19a3057 Yan, Zheng 2016-07-04 3910 if (recon_state->msg_version >= 2) { 20cb34ae9e4b00 Sage Weil 2010-05-12 3911 rec.v2.cap_id = cpu_to_le64(cap->cap_id); 20cb34ae9e4b00 Sage Weil 2010-05-12 3912 rec.v2.wanted = cpu_to_le32(__ceph_caps_wanted(ci)); 20cb34ae9e4b00 Sage Weil 2010-05-12 3913 rec.v2.issued = cpu_to_le32(cap->issued); 20cb34ae9e4b00 Sage Weil 2010-05-12 3914 rec.v2.snaprealm = cpu_to_le64(ci->i_snap_realm->ino); a33f6432b3a63a Yan, Zheng 2020-08-11 @3915 rec.v2.pathbase = cpu_to_le64(pathbase); ec1dff25b0a012 Jeff Layton 2017-10-31 3916 rec.v2.flock_len = (__force __le32) ec1dff25b0a012 Jeff Layton 2017-10-31 3917 ((ci->i_ceph_flags & CEPH_I_ERROR_FILELOCK) ? 0 : 1); 20cb34ae9e4b00 Sage Weil 2010-05-12 3918 } else { 20cb34ae9e4b00 Sage Weil 2010-05-12 3919 rec.v1.cap_id = cpu_to_le64(cap->cap_id); 20cb34ae9e4b00 Sage Weil 2010-05-12 3920 rec.v1.wanted = cpu_to_le32(__ceph_caps_wanted(ci)); 20cb34ae9e4b00 Sage Weil 2010-05-12 3921 rec.v1.issued = cpu_to_le32(cap->issued); 2d6795fbb8c34e Jeff Layton 2021-04-09 3922 rec.v1.size = cpu_to_le64(i_size_read(inode)); 9bbeab41ce5054 Arnd Bergmann 2018-07-13 3923 ceph_encode_timespec64(&rec.v1.mtime, &inode->i_mtime); 9bbeab41ce5054 Arnd Bergmann 2018-07-13 3924 ceph_encode_timespec64(&rec.v1.atime, &inode->i_atime); 20cb34ae9e4b00 Sage Weil 2010-05-12 3925 rec.v1.snaprealm = cpu_to_le64(ci->i_snap_realm->ino); a33f6432b3a63a Yan, Zheng 2020-08-11 3926 rec.v1.pathbase = cpu_to_le64(pathbase); 20cb34ae9e4b00 Sage Weil 2010-05-12 3927 } 3469ed0d149ba7 Yan, Zheng 2016-07-05 3928 3469ed0d149ba7 Yan, Zheng 2016-07-05 3929 if (list_empty(&ci->i_cap_snaps)) { 92776fd2c230f8 Yan, Zheng 2017-08-16 3930 snap_follows = ci->i_head_snapc ? ci->i_head_snapc->seq : 0; 3469ed0d149ba7 Yan, Zheng 2016-07-05 3931 } else { 3469ed0d149ba7 Yan, Zheng 2016-07-05 3932 struct ceph_cap_snap *capsnap = 3469ed0d149ba7 Yan, Zheng 2016-07-05 3933 list_first_entry(&ci->i_cap_snaps, 3469ed0d149ba7 Yan, Zheng 2016-07-05 3934 struct ceph_cap_snap, ci_item); 3469ed0d149ba7 Yan, Zheng 2016-07-05 3935 snap_follows = capsnap->follows; 20cb34ae9e4b00 Sage Weil 2010-05-12 3936 } be655596b3de58 Sage Weil 2011-11-30 3937 spin_unlock(&ci->i_ceph_lock); 2f2dc053404feb Sage Weil 2009-10-06 3938 121f22a19a3057 Yan, Zheng 2016-07-04 3939 if (recon_state->msg_version >= 2) { 40819f6fb227c1 Greg Farnum 2010-08-02 3940 int num_fcntl_locks, num_flock_locks; 4deb14a2593dfa Yan, Zheng 2017-09-11 3941 struct ceph_filelock *flocks = NULL; 81c5a1487e52a3 Yan, Zheng 2019-01-01 3942 size_t struct_len, total_len = sizeof(u64); 121f22a19a3057 Yan, Zheng 2016-07-04 3943 u8 struct_v = 0; 40819f6fb227c1 Greg Farnum 2010-08-02 3944 39be95e9c8c0b5 Jim Schutt 2013-05-15 3945 encode_again: b3f8d68f38a879 Yan, Zheng 2017-09-11 3946 if (rec.v2.flock_len) { 39be95e9c8c0b5 Jim Schutt 2013-05-15 3947 ceph_count_locks(inode, &num_fcntl_locks, &num_flock_locks); b3f8d68f38a879 Yan, Zheng 2017-09-11 3948 } else { b3f8d68f38a879 Yan, Zheng 2017-09-11 3949 num_fcntl_locks = 0; b3f8d68f38a879 Yan, Zheng 2017-09-11 3950 num_flock_locks = 0; b3f8d68f38a879 Yan, Zheng 2017-09-11 3951 } 4deb14a2593dfa Yan, Zheng 2017-09-11 3952 if (num_fcntl_locks + num_flock_locks > 0) { 6da2ec56059c3c Kees Cook 2018-06-12 3953 flocks = kmalloc_array(num_fcntl_locks + num_flock_locks, 6da2ec56059c3c Kees Cook 2018-06-12 3954 sizeof(struct ceph_filelock), 6da2ec56059c3c Kees Cook 2018-06-12 3955 GFP_NOFS); 39be95e9c8c0b5 Jim Schutt 2013-05-15 3956 if (!flocks) { 39be95e9c8c0b5 Jim Schutt 2013-05-15 3957 err = -ENOMEM; 5ccedf1ccd710b Yan, Zheng 2018-12-13 3958 goto out_err; 39be95e9c8c0b5 Jim Schutt 2013-05-15 3959 } 39be95e9c8c0b5 Jim Schutt 2013-05-15 3960 err = ceph_encode_locks_to_buffer(inode, flocks, 39be95e9c8c0b5 Jim Schutt 2013-05-15 3961 num_fcntl_locks, 39be95e9c8c0b5 Jim Schutt 2013-05-15 3962 num_flock_locks); 39be95e9c8c0b5 Jim Schutt 2013-05-15 3963 if (err) { 39be95e9c8c0b5 Jim Schutt 2013-05-15 3964 kfree(flocks); 4deb14a2593dfa Yan, Zheng 2017-09-11 3965 flocks = NULL; 39be95e9c8c0b5 Jim Schutt 2013-05-15 3966 if (err == -ENOSPC) 39be95e9c8c0b5 Jim Schutt 2013-05-15 3967 goto encode_again; 5ccedf1ccd710b Yan, Zheng 2018-12-13 3968 goto out_err; 39be95e9c8c0b5 Jim Schutt 2013-05-15 3969 } 4deb14a2593dfa Yan, Zheng 2017-09-11 3970 } else { 4deb14a2593dfa Yan, Zheng 2017-09-11 3971 kfree(flocks); 4deb14a2593dfa Yan, Zheng 2017-09-11 3972 flocks = NULL; 4deb14a2593dfa Yan, Zheng 2017-09-11 3973 } 121f22a19a3057 Yan, Zheng 2016-07-04 3974 121f22a19a3057 Yan, Zheng 2016-07-04 3975 if (recon_state->msg_version >= 3) { 121f22a19a3057 Yan, Zheng 2016-07-04 3976 /* version, compat_version and struct_len */ 81c5a1487e52a3 Yan, Zheng 2019-01-01 3977 total_len += 2 * sizeof(u8) + sizeof(u32); 3469ed0d149ba7 Yan, Zheng 2016-07-05 3978 struct_v = 2; 121f22a19a3057 Yan, Zheng 2016-07-04 3979 } 39be95e9c8c0b5 Jim Schutt 2013-05-15 3980 /* 39be95e9c8c0b5 Jim Schutt 2013-05-15 3981 * number of encoded locks is stable, so copy to pagelist 39be95e9c8c0b5 Jim Schutt 2013-05-15 3982 */ 121f22a19a3057 Yan, Zheng 2016-07-04 3983 struct_len = 2 * sizeof(u32) + 40819f6fb227c1 Greg Farnum 2010-08-02 3984 (num_fcntl_locks + num_flock_locks) * 121f22a19a3057 Yan, Zheng 2016-07-04 3985 sizeof(struct ceph_filelock); 121f22a19a3057 Yan, Zheng 2016-07-04 3986 rec.v2.flock_len = cpu_to_le32(struct_len); 121f22a19a3057 Yan, Zheng 2016-07-04 3987 a33f6432b3a63a Yan, Zheng 2020-08-11 3988 struct_len += sizeof(u32) + pathlen + sizeof(rec.v2); 121f22a19a3057 Yan, Zheng 2016-07-04 3989 3469ed0d149ba7 Yan, Zheng 2016-07-05 3990 if (struct_v >= 2) 3469ed0d149ba7 Yan, Zheng 2016-07-05 3991 struct_len += sizeof(u64); /* snap_follows */ 3469ed0d149ba7 Yan, Zheng 2016-07-05 3992 121f22a19a3057 Yan, Zheng 2016-07-04 3993 total_len += struct_len; 81c5a1487e52a3 Yan, Zheng 2019-01-01 3994 81c5a1487e52a3 Yan, Zheng 2019-01-01 3995 if (pagelist->length + total_len > RECONNECT_MAX_SIZE) { 81c5a1487e52a3 Yan, Zheng 2019-01-01 3996 err = send_reconnect_partial(recon_state); 81c5a1487e52a3 Yan, Zheng 2019-01-01 3997 if (err) 81c5a1487e52a3 Yan, Zheng 2019-01-01 3998 goto out_freeflocks; 81c5a1487e52a3 Yan, Zheng 2019-01-01 3999 pagelist = recon_state->pagelist; 5ccedf1ccd710b Yan, Zheng 2018-12-13 4000 } 121f22a19a3057 Yan, Zheng 2016-07-04 4001 81c5a1487e52a3 Yan, Zheng 2019-01-01 4002 err = ceph_pagelist_reserve(pagelist, total_len); 81c5a1487e52a3 Yan, Zheng 2019-01-01 4003 if (err) 81c5a1487e52a3 Yan, Zheng 2019-01-01 4004 goto out_freeflocks; 81c5a1487e52a3 Yan, Zheng 2019-01-01 4005 81c5a1487e52a3 Yan, Zheng 2019-01-01 4006 ceph_pagelist_encode_64(pagelist, ceph_ino(inode)); 121f22a19a3057 Yan, Zheng 2016-07-04 4007 if (recon_state->msg_version >= 3) { 121f22a19a3057 Yan, Zheng 2016-07-04 4008 ceph_pagelist_encode_8(pagelist, struct_v); 121f22a19a3057 Yan, Zheng 2016-07-04 4009 ceph_pagelist_encode_8(pagelist, 1); 121f22a19a3057 Yan, Zheng 2016-07-04 4010 ceph_pagelist_encode_32(pagelist, struct_len); 121f22a19a3057 Yan, Zheng 2016-07-04 4011 } a33f6432b3a63a Yan, Zheng 2020-08-11 4012 ceph_pagelist_encode_string(pagelist, path, pathlen); 121f22a19a3057 Yan, Zheng 2016-07-04 4013 ceph_pagelist_append(pagelist, &rec, sizeof(rec.v2)); 121f22a19a3057 Yan, Zheng 2016-07-04 4014 ceph_locks_to_pagelist(flocks, pagelist, 5ccedf1ccd710b Yan, Zheng 2018-12-13 4015 num_fcntl_locks, num_flock_locks); 3469ed0d149ba7 Yan, Zheng 2016-07-05 4016 if (struct_v >= 2) 3469ed0d149ba7 Yan, Zheng 2016-07-05 4017 ceph_pagelist_encode_64(pagelist, snap_follows); 81c5a1487e52a3 Yan, Zheng 2019-01-01 4018 out_freeflocks: 39be95e9c8c0b5 Jim Schutt 2013-05-15 4019 kfree(flocks); 3612abbd5df6ba Sage Weil 2010-09-07 4020 } else { 5ccedf1ccd710b Yan, Zheng 2018-12-13 4021 err = ceph_pagelist_reserve(pagelist, 81c5a1487e52a3 Yan, Zheng 2019-01-01 4022 sizeof(u64) + sizeof(u32) + 81c5a1487e52a3 Yan, Zheng 2019-01-01 4023 pathlen + sizeof(rec.v1)); a33f6432b3a63a Yan, Zheng 2020-08-11 4024 if (err) a33f6432b3a63a Yan, Zheng 2020-08-11 4025 goto out_err; 5ccedf1ccd710b Yan, Zheng 2018-12-13 4026 81c5a1487e52a3 Yan, Zheng 2019-01-01 4027 ceph_pagelist_encode_64(pagelist, ceph_ino(inode)); 121f22a19a3057 Yan, Zheng 2016-07-04 4028 ceph_pagelist_encode_string(pagelist, path, pathlen); 121f22a19a3057 Yan, Zheng 2016-07-04 4029 ceph_pagelist_append(pagelist, &rec, sizeof(rec.v1)); 40819f6fb227c1 Greg Farnum 2010-08-02 4030 } 44c99757fae80e Yan, Zheng 2013-09-22 4031 5ccedf1ccd710b Yan, Zheng 2018-12-13 4032 out_err: a33f6432b3a63a Yan, Zheng 2020-08-11 4033 ceph_mdsc_free_path(path, pathlen); a33f6432b3a63a Yan, Zheng 2020-08-11 4034 if (!err) 81c5a1487e52a3 Yan, Zheng 2019-01-01 4035 recon_state->nr_caps++; 81c5a1487e52a3 Yan, Zheng 2019-01-01 4036 return err; 81c5a1487e52a3 Yan, Zheng 2019-01-01 4037 } 81c5a1487e52a3 Yan, Zheng 2019-01-01 4038 :::::: The code at line 3915 was first introduced by commit :::::: a33f6432b3a63a4909dbbb0967f7c9df8ff2de91 ceph: encode inodes' parent/d_name in cap reconnect message :::::: TO: Yan, Zheng <[email protected]> :::::: CC: Ilya Dryomov <[email protected]> --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/[email protected] _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
