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]

Reply via email to