tree: https://git.kernel.org/pub/scm/linux/kernel/git/jlayton/linux.git locks-next head: 94188bd995060ccc14ac0f9e83858fcab8aac951 commit: 94188bd995060ccc14ac0f9e83858fcab8aac951 [1/1] filelock: move file locking definitions to separate header file config: m68k-allmodconfig compiler: m68k-linux-gcc (GCC) 12.1.0 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://git.kernel.org/pub/scm/linux/kernel/git/jlayton/linux.git/commit/?id=94188bd995060ccc14ac0f9e83858fcab8aac951 git remote add jlayton https://git.kernel.org/pub/scm/linux/kernel/git/jlayton/linux.git git fetch --no-tags jlayton locks-next git checkout 94188bd995060ccc14ac0f9e83858fcab8aac951 # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=m68k olddefconfig COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=m68k SHELL=/bin/bash fs/ceph/ If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot All errors (new ones prefixed by >>): fs/ceph/caps.c: In function 'ceph_get_caps': >> fs/ceph/caps.c:2916:21: error: implicit declaration of function 'vfs_inode_has_locks' [-Werror=implicit-function-declaration] 2916 | if (vfs_inode_has_locks(inode)) | ^~~~~~~~~~~~~~~~~~~ cc1: some warnings being treated as errors vim +/vfs_inode_has_locks +2916 fs/ceph/caps.c 2b1ac852eb67a6 Yan, Zheng 2016-10-25 2890 a8599bd821d084 Sage Weil 2009-10-06 2891 /* a8599bd821d084 Sage Weil 2009-10-06 2892 * Wait for caps, and take cap references. If we can't get a WR cap a8599bd821d084 Sage Weil 2009-10-06 2893 * due to a small max_size, make sure we check_max_size (and possibly a8599bd821d084 Sage Weil 2009-10-06 2894 * ask the mds) so we don't get hung up indefinitely. a8599bd821d084 Sage Weil 2009-10-06 2895 */ e72968e15b297a Jeff Layton 2021-04-05 2896 int ceph_get_caps(struct file *filp, int need, int want, loff_t endoff, int *got) a8599bd821d084 Sage Weil 2009-10-06 2897 { ff5d913dfc7142 Yan, Zheng 2019-07-25 2898 struct ceph_file_info *fi = filp->private_data; 5e3ded1bb642f2 Yan, Zheng 2019-07-25 2899 struct inode *inode = file_inode(filp); 5e3ded1bb642f2 Yan, Zheng 2019-07-25 2900 struct ceph_inode_info *ci = ceph_inode(inode); 81f148a910045c Yan, Zheng 2019-07-25 2901 struct ceph_fs_client *fsc = ceph_inode_to_client(inode); ff5d913dfc7142 Yan, Zheng 2019-07-25 2902 int ret, _got, flags; a8599bd821d084 Sage Weil 2009-10-06 2903 5e3ded1bb642f2 Yan, Zheng 2019-07-25 2904 ret = ceph_pool_perm_check(inode, need); 10183a69551f76 Yan, Zheng 2015-04-27 2905 if (ret < 0) 10183a69551f76 Yan, Zheng 2015-04-27 2906 return ret; 10183a69551f76 Yan, Zheng 2015-04-27 2907 81f148a910045c Yan, Zheng 2019-07-25 2908 if ((fi->fmode & CEPH_FILE_MODE_WR) && 81f148a910045c Yan, Zheng 2019-07-25 2909 fi->filp_gen != READ_ONCE(fsc->filp_gen)) 81f148a910045c Yan, Zheng 2019-07-25 2910 return -EBADF; 81f148a910045c Yan, Zheng 2019-07-25 2911 719a2514e9bf31 Yan, Zheng 2020-03-05 2912 flags = get_used_fmode(need | want); 719a2514e9bf31 Yan, Zheng 2020-03-05 2913 5dda377cf0a6bd Yan, Zheng 2015-04-30 2914 while (true) { 719a2514e9bf31 Yan, Zheng 2020-03-05 2915 flags &= CEPH_FILE_MODE_MASK; 461ab10ef7e6ea Xiubo Li 2022-11-17 @2916 if (vfs_inode_has_locks(inode)) 719a2514e9bf31 Yan, Zheng 2020-03-05 2917 flags |= CHECK_FILELOCK; c4d4a582c538e8 Yan, Zheng 2015-01-09 2918 _got = 0; 5e3ded1bb642f2 Yan, Zheng 2019-07-25 2919 ret = try_get_cap_refs(inode, need, want, endoff, ff5d913dfc7142 Yan, Zheng 2019-07-25 2920 flags, &_got); 546d402085d6ea Yan, Zheng 2020-03-10 2921 WARN_ON_ONCE(ret == -EAGAIN); 7b2f936fc8282a Yan, Zheng 2019-05-20 2922 if (!ret) { 3a3430affce5de Jeff Layton 2019-11-20 2923 struct ceph_mds_client *mdsc = fsc->mdsc; 3a3430affce5de Jeff Layton 2019-11-20 2924 struct cap_wait cw; 5c341ee32881c5 Nikolay Borisov 2016-10-11 2925 DEFINE_WAIT_FUNC(wait, woken_wake_function); 3a3430affce5de Jeff Layton 2019-11-20 2926 ebce3eb2f7ef9f Jeff Layton 2020-08-18 2927 cw.ino = ceph_ino(inode); 3a3430affce5de Jeff Layton 2019-11-20 2928 cw.tgid = current->tgid; 3a3430affce5de Jeff Layton 2019-11-20 2929 cw.need = need; 3a3430affce5de Jeff Layton 2019-11-20 2930 cw.want = want; 3a3430affce5de Jeff Layton 2019-11-20 2931 3a3430affce5de Jeff Layton 2019-11-20 2932 spin_lock(&mdsc->caps_list_lock); 3a3430affce5de Jeff Layton 2019-11-20 2933 list_add(&cw.list, &mdsc->cap_wait_list); 3a3430affce5de Jeff Layton 2019-11-20 2934 spin_unlock(&mdsc->caps_list_lock); 3a3430affce5de Jeff Layton 2019-11-20 2935 719a2514e9bf31 Yan, Zheng 2020-03-05 2936 /* make sure used fmode not timeout */ 719a2514e9bf31 Yan, Zheng 2020-03-05 2937 ceph_get_fmode(ci, flags, FMODE_WAIT_BIAS); 5c341ee32881c5 Nikolay Borisov 2016-10-11 2938 add_wait_queue(&ci->i_cap_wq, &wait); 5c341ee32881c5 Nikolay Borisov 2016-10-11 2939 ff5d913dfc7142 Yan, Zheng 2019-07-25 2940 flags |= NON_BLOCKING; 5e3ded1bb642f2 Yan, Zheng 2019-07-25 2941 while (!(ret = try_get_cap_refs(inode, need, want, ff5d913dfc7142 Yan, Zheng 2019-07-25 2942 endoff, flags, &_got))) { 6e09d0fb64402c Yan, Zheng 2016-12-22 2943 if (signal_pending(current)) { 6e09d0fb64402c Yan, Zheng 2016-12-22 2944 ret = -ERESTARTSYS; 6e09d0fb64402c Yan, Zheng 2016-12-22 2945 break; 6e09d0fb64402c Yan, Zheng 2016-12-22 2946 } 5c341ee32881c5 Nikolay Borisov 2016-10-11 2947 wait_woken(&wait, TASK_INTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT); 6e09d0fb64402c Yan, Zheng 2016-12-22 2948 } 5c341ee32881c5 Nikolay Borisov 2016-10-11 2949 5c341ee32881c5 Nikolay Borisov 2016-10-11 2950 remove_wait_queue(&ci->i_cap_wq, &wait); 719a2514e9bf31 Yan, Zheng 2020-03-05 2951 ceph_put_fmode(ci, flags, FMODE_WAIT_BIAS); 3a3430affce5de Jeff Layton 2019-11-20 2952 3a3430affce5de Jeff Layton 2019-11-20 2953 spin_lock(&mdsc->caps_list_lock); 3a3430affce5de Jeff Layton 2019-11-20 2954 list_del(&cw.list); 3a3430affce5de Jeff Layton 2019-11-20 2955 spin_unlock(&mdsc->caps_list_lock); 3a3430affce5de Jeff Layton 2019-11-20 2956 7b2f936fc8282a Yan, Zheng 2019-05-20 2957 if (ret == -EAGAIN) 5dda377cf0a6bd Yan, Zheng 2015-04-30 2958 continue; 77310320c299b0 Yan, Zheng 2016-04-08 2959 } 81f148a910045c Yan, Zheng 2019-07-25 2960 81f148a910045c Yan, Zheng 2019-07-25 2961 if ((fi->fmode & CEPH_FILE_MODE_WR) && 81f148a910045c Yan, Zheng 2019-07-25 2962 fi->filp_gen != READ_ONCE(fsc->filp_gen)) { 81f148a910045c Yan, Zheng 2019-07-25 2963 if (ret >= 0 && _got) 81f148a910045c Yan, Zheng 2019-07-25 2964 ceph_put_cap_refs(ci, _got); 81f148a910045c Yan, Zheng 2019-07-25 2965 return -EBADF; 81f148a910045c Yan, Zheng 2019-07-25 2966 } 81f148a910045c Yan, Zheng 2019-07-25 2967 7b2f936fc8282a Yan, Zheng 2019-05-20 2968 if (ret < 0) { 8006daff5f94b1 Jeff Layton 2021-09-07 2969 if (ret == -EFBIG || ret == -EUCLEAN) { 9bccb76574ad9b Yan, Zheng 2020-03-10 2970 int ret2 = ceph_wait_on_async_create(inode); 9bccb76574ad9b Yan, Zheng 2020-03-10 2971 if (ret2 < 0) 9bccb76574ad9b Yan, Zheng 2020-03-10 2972 return ret2; 9bccb76574ad9b Yan, Zheng 2020-03-10 2973 } 546d402085d6ea Yan, Zheng 2020-03-10 2974 if (ret == -EFBIG) { 546d402085d6ea Yan, Zheng 2020-03-10 2975 check_max_size(inode, endoff); 546d402085d6ea Yan, Zheng 2020-03-10 2976 continue; 546d402085d6ea Yan, Zheng 2020-03-10 2977 } 8006daff5f94b1 Jeff Layton 2021-09-07 2978 if (ret == -EUCLEAN) { 77310320c299b0 Yan, Zheng 2016-04-08 2979 /* session was killed, try renew caps */ 719a2514e9bf31 Yan, Zheng 2020-03-05 2980 ret = ceph_renew_caps(inode, flags); 77310320c299b0 Yan, Zheng 2016-04-08 2981 if (ret == 0) 77310320c299b0 Yan, Zheng 2016-04-08 2982 continue; 7b2f936fc8282a Yan, Zheng 2019-05-20 2983 } c4d4a582c538e8 Yan, Zheng 2015-01-09 2984 return ret; 5dda377cf0a6bd Yan, Zheng 2015-04-30 2985 } c4d4a582c538e8 Yan, Zheng 2015-01-09 2986 874c8ca1e60b2c David Howells 2022-06-09 2987 if (S_ISREG(ci->netfs.inode.i_mode) && 4849077604f012 Xiubo Li 2022-06-07 2988 ceph_has_inline_data(ci) && c4d4a582c538e8 Yan, Zheng 2015-01-09 2989 (_got & (CEPH_CAP_FILE_CACHE|CEPH_CAP_FILE_LAZYIO)) && 5e3ded1bb642f2 Yan, Zheng 2019-07-25 2990 i_size_read(inode) > 0) { 5dda377cf0a6bd Yan, Zheng 2015-04-30 2991 struct page *page = 5e3ded1bb642f2 Yan, Zheng 2019-07-25 2992 find_get_page(inode->i_mapping, 0); c4d4a582c538e8 Yan, Zheng 2015-01-09 2993 if (page) { e72968e15b297a Jeff Layton 2021-04-05 2994 bool uptodate = PageUptodate(page); e72968e15b297a Jeff Layton 2021-04-05 2995 09cbfeaf1a5a67 Kirill A. Shutemov 2016-04-01 2996 put_page(page); e72968e15b297a Jeff Layton 2021-04-05 2997 if (uptodate) e72968e15b297a Jeff Layton 2021-04-05 2998 break; c4d4a582c538e8 Yan, Zheng 2015-01-09 2999 } c4d4a582c538e8 Yan, Zheng 2015-01-09 3000 /* 5dda377cf0a6bd Yan, Zheng 2015-04-30 3001 * drop cap refs first because getattr while 5dda377cf0a6bd Yan, Zheng 2015-04-30 3002 * holding * caps refs can cause deadlock. c4d4a582c538e8 Yan, Zheng 2015-01-09 3003 */ c4d4a582c538e8 Yan, Zheng 2015-01-09 3004 ceph_put_cap_refs(ci, _got); c4d4a582c538e8 Yan, Zheng 2015-01-09 3005 _got = 0; c4d4a582c538e8 Yan, Zheng 2015-01-09 3006 5dda377cf0a6bd Yan, Zheng 2015-04-30 3007 /* 5dda377cf0a6bd Yan, Zheng 2015-04-30 3008 * getattr request will bring inline data into 5dda377cf0a6bd Yan, Zheng 2015-04-30 3009 * page cache 5dda377cf0a6bd Yan, Zheng 2015-04-30 3010 */ 5e3ded1bb642f2 Yan, Zheng 2019-07-25 3011 ret = __ceph_do_getattr(inode, NULL, 5dda377cf0a6bd Yan, Zheng 2015-04-30 3012 CEPH_STAT_CAP_INLINE_DATA, 5dda377cf0a6bd Yan, Zheng 2015-04-30 3013 true); c4d4a582c538e8 Yan, Zheng 2015-01-09 3014 if (ret < 0) a8599bd821d084 Sage Weil 2009-10-06 3015 return ret; 5dda377cf0a6bd Yan, Zheng 2015-04-30 3016 continue; c4d4a582c538e8 Yan, Zheng 2015-01-09 3017 } 5dda377cf0a6bd Yan, Zheng 2015-04-30 3018 break; 5dda377cf0a6bd Yan, Zheng 2015-04-30 3019 } c4d4a582c538e8 Yan, Zheng 2015-01-09 3020 *got = _got; c4d4a582c538e8 Yan, Zheng 2015-01-09 3021 return 0; a8599bd821d084 Sage Weil 2009-10-06 3022 } a8599bd821d084 Sage Weil 2009-10-06 3023 :::::: The code at line 2916 was first introduced by commit :::::: 461ab10ef7e6ea9b41a0571a7fc6a72af9549a3c ceph: switch to vfs_inode_has_locks() to fix file lock bug :::::: TO: Xiubo Li :::::: CC: Ilya Dryomov -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests