From: kernel test robot <lkp@intel.com>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] [gfs2:for-next 1/2] fs/gfs2/file.c:948:12: error: invalid storage class for function 'fallocate_chunk'
Date: Wed, 12 May 2021 02:46:43 +0800 [thread overview]
Message-ID: <202105120235.kIBxbUA3-lkp@intel.com> (raw)
tree: https://git.kernel.org/pub/scm/linux/kernel/git/gfs2/linux-gfs2.git for-next
head: 5bec51f9bc58e6d724fa3588b77e4c2f865dd13a
commit: a1381d36d843d4f108fe24b384a8a24694fe0bb5 [1/2] gfs2: Prevent direct-I/O write fallback errors from getting lost
config: m68k-randconfig-r016-20210511 (attached as .config)
compiler: m68k-linux-gcc (GCC) 9.3.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/gfs2/linux-gfs2.git/commit/?id=a1381d36d843d4f108fe24b384a8a24694fe0bb5
git remote add gfs2 https://git.kernel.org/pub/scm/linux/kernel/git/gfs2/linux-gfs2.git
git fetch --no-tags gfs2 for-next
git checkout a1381d36d843d4f108fe24b384a8a24694fe0bb5
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross W=1 ARCH=m68k
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All error/warnings (new ones prefixed by >>):
fs/gfs2/file.c: In function 'gfs2_file_write_iter':
>> fs/gfs2/file.c:948:12: error: invalid storage class for function 'fallocate_chunk'
948 | static int fallocate_chunk(struct inode *inode, loff_t offset, loff_t len,
| ^~~~~~~~~~~~~~~
>> fs/gfs2/file.c:948:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
948 | static int fallocate_chunk(struct inode *inode, loff_t offset, loff_t len,
| ^~~~~~
>> fs/gfs2/file.c:1002:13: error: invalid storage class for function 'calc_max_reserv'
1002 | static void calc_max_reserv(struct gfs2_inode *ip, loff_t *len,
| ^~~~~~~~~~~~~~~
>> fs/gfs2/file.c:1024:13: error: invalid storage class for function '__gfs2_fallocate'
1024 | static long __gfs2_fallocate(struct file *file, int mode, loff_t offset, loff_t len)
| ^~~~~~~~~~~~~~~~
>> fs/gfs2/file.c:1140:13: error: invalid storage class for function 'gfs2_fallocate'
1140 | static long gfs2_fallocate(struct file *file, int mode, loff_t offset, loff_t len)
| ^~~~~~~~~~~~~~
>> fs/gfs2/file.c:1189:16: error: invalid storage class for function 'gfs2_file_splice_write'
1189 | static ssize_t gfs2_file_splice_write(struct pipe_inode_info *pipe,
| ^~~~~~~~~~~~~~~~~~~~~~
>> fs/gfs2/file.c:1393:1: error: expected declaration or statement at end of input
1393 | };
| ^
fs/gfs2/file.c:1385:30: warning: unused variable 'gfs2_dir_fops_nolock' [-Wunused-variable]
1385 | const struct file_operations gfs2_dir_fops_nolock = {
| ^~~~~~~~~~~~~~~~~~~~
fs/gfs2/file.c:1368:30: warning: unused variable 'gfs2_file_fops_nolock' [-Wunused-variable]
1368 | const struct file_operations gfs2_file_fops_nolock = {
| ^~~~~~~~~~~~~~~~~~~~~
At top level:
fs/gfs2/file.c:872:16: warning: 'gfs2_file_write_iter' defined but not used [-Wunused-function]
872 | static ssize_t gfs2_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
| ^~~~~~~~~~~~~~~~~~~~
vim +/fallocate_chunk +948 fs/gfs2/file.c
56aa616a03feca Steven Whitehouse 2009-12-08 947
2fe17c1075836b Christoph Hellwig 2011-01-14 @948 static int fallocate_chunk(struct inode *inode, loff_t offset, loff_t len,
2fe17c1075836b Christoph Hellwig 2011-01-14 949 int mode)
2fe17c1075836b Christoph Hellwig 2011-01-14 950 {
fffb64127adc3e Andreas Gruenbacher 2018-03-29 951 struct super_block *sb = inode->i_sb;
2fe17c1075836b Christoph Hellwig 2011-01-14 952 struct gfs2_inode *ip = GFS2_I(inode);
fffb64127adc3e Andreas Gruenbacher 2018-03-29 953 loff_t end = offset + len;
2fe17c1075836b Christoph Hellwig 2011-01-14 954 struct buffer_head *dibh;
2fe17c1075836b Christoph Hellwig 2011-01-14 955 int error;
2fe17c1075836b Christoph Hellwig 2011-01-14 956
2fe17c1075836b Christoph Hellwig 2011-01-14 957 error = gfs2_meta_inode_buffer(ip, &dibh);
2fe17c1075836b Christoph Hellwig 2011-01-14 958 if (unlikely(error))
64dd153c83743a Benjamin Marzinski 2011-09-12 959 return error;
2fe17c1075836b Christoph Hellwig 2011-01-14 960
350a9b0a7269c6 Steven Whitehouse 2012-12-14 961 gfs2_trans_add_meta(ip->i_gl, dibh);
2fe17c1075836b Christoph Hellwig 2011-01-14 962
2fe17c1075836b Christoph Hellwig 2011-01-14 963 if (gfs2_is_stuffed(ip)) {
2fe17c1075836b Christoph Hellwig 2011-01-14 964 error = gfs2_unstuff_dinode(ip, NULL);
2fe17c1075836b Christoph Hellwig 2011-01-14 965 if (unlikely(error))
2fe17c1075836b Christoph Hellwig 2011-01-14 966 goto out;
2fe17c1075836b Christoph Hellwig 2011-01-14 967 }
2fe17c1075836b Christoph Hellwig 2011-01-14 968
fffb64127adc3e Andreas Gruenbacher 2018-03-29 969 while (offset < end) {
c25892827c7996 Andreas Gruenbacher 2018-07-06 970 struct iomap iomap = { };
c25892827c7996 Andreas Gruenbacher 2018-07-06 971
54992257fe4bb9 Andreas Gruenbacher 2021-03-27 972 error = gfs2_iomap_alloc(inode, offset, end - offset, &iomap);
fffb64127adc3e Andreas Gruenbacher 2018-03-29 973 if (error)
64dd153c83743a Benjamin Marzinski 2011-09-12 974 goto out;
fffb64127adc3e Andreas Gruenbacher 2018-03-29 975 offset = iomap.offset + iomap.length;
d505a96a3b16f4 Andreas Gruenbacher 2018-06-24 976 if (!(iomap.flags & IOMAP_F_NEW))
64dd153c83743a Benjamin Marzinski 2011-09-12 977 continue;
fffb64127adc3e Andreas Gruenbacher 2018-03-29 978 error = sb_issue_zeroout(sb, iomap.addr >> inode->i_blkbits,
fffb64127adc3e Andreas Gruenbacher 2018-03-29 979 iomap.length >> inode->i_blkbits,
fffb64127adc3e Andreas Gruenbacher 2018-03-29 980 GFP_NOFS);
fffb64127adc3e Andreas Gruenbacher 2018-03-29 981 if (error) {
fffb64127adc3e Andreas Gruenbacher 2018-03-29 982 fs_err(GFS2_SB(inode), "Failed to zero data buffers\n");
2fe17c1075836b Christoph Hellwig 2011-01-14 983 goto out;
2fe17c1075836b Christoph Hellwig 2011-01-14 984 }
64dd153c83743a Benjamin Marzinski 2011-09-12 985 }
2fe17c1075836b Christoph Hellwig 2011-01-14 986 out:
64dd153c83743a Benjamin Marzinski 2011-09-12 987 brelse(dibh);
2fe17c1075836b Christoph Hellwig 2011-01-14 988 return error;
2fe17c1075836b Christoph Hellwig 2011-01-14 989 }
f3b64b57c044fe Andreas Gruenbacher 2019-08-31 990
d9be0cda774e7f Abhi Das 2015-03-18 991 /**
d9be0cda774e7f Abhi Das 2015-03-18 992 * calc_max_reserv() - Reverse of write_calc_reserv. Given a number of
d9be0cda774e7f Abhi Das 2015-03-18 993 * blocks, determine how many bytes can be written.
d9be0cda774e7f Abhi Das 2015-03-18 994 * @ip: The inode in question.
d9be0cda774e7f Abhi Das 2015-03-18 995 * @len: Max cap of bytes. What we return in *len must be <= this.
d9be0cda774e7f Abhi Das 2015-03-18 996 * @data_blocks: Compute and return the number of data blocks needed
d9be0cda774e7f Abhi Das 2015-03-18 997 * @ind_blocks: Compute and return the number of indirect blocks needed
d9be0cda774e7f Abhi Das 2015-03-18 998 * @max_blocks: The total blocks available to work with.
d9be0cda774e7f Abhi Das 2015-03-18 999 *
d9be0cda774e7f Abhi Das 2015-03-18 1000 * Returns: void, but @len, @data_blocks and @ind_blocks are filled in.
d9be0cda774e7f Abhi Das 2015-03-18 1001 */
d9be0cda774e7f Abhi Das 2015-03-18 @1002 static void calc_max_reserv(struct gfs2_inode *ip, loff_t *len,
d9be0cda774e7f Abhi Das 2015-03-18 1003 unsigned int *data_blocks, unsigned int *ind_blocks,
d9be0cda774e7f Abhi Das 2015-03-18 1004 unsigned int max_blocks)
2fe17c1075836b Christoph Hellwig 2011-01-14 1005 {
d9be0cda774e7f Abhi Das 2015-03-18 1006 loff_t max = *len;
2fe17c1075836b Christoph Hellwig 2011-01-14 1007 const struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
2fe17c1075836b Christoph Hellwig 2011-01-14 1008 unsigned int tmp, max_data = max_blocks - 3 * (sdp->sd_max_height - 1);
2fe17c1075836b Christoph Hellwig 2011-01-14 1009
2fe17c1075836b Christoph Hellwig 2011-01-14 1010 for (tmp = max_data; tmp > sdp->sd_diptrs;) {
2fe17c1075836b Christoph Hellwig 2011-01-14 1011 tmp = DIV_ROUND_UP(tmp, sdp->sd_inptrs);
2fe17c1075836b Christoph Hellwig 2011-01-14 1012 max_data -= tmp;
2fe17c1075836b Christoph Hellwig 2011-01-14 1013 }
d9be0cda774e7f Abhi Das 2015-03-18 1014
2fe17c1075836b Christoph Hellwig 2011-01-14 1015 *data_blocks = max_data;
2fe17c1075836b Christoph Hellwig 2011-01-14 1016 *ind_blocks = max_blocks - max_data;
2fe17c1075836b Christoph Hellwig 2011-01-14 1017 *len = ((loff_t)max_data - 3) << sdp->sd_sb.sb_bsize_shift;
2fe17c1075836b Christoph Hellwig 2011-01-14 1018 if (*len > max) {
2fe17c1075836b Christoph Hellwig 2011-01-14 1019 *len = max;
2fe17c1075836b Christoph Hellwig 2011-01-14 1020 gfs2_write_calc_reserv(ip, max, data_blocks, ind_blocks);
2fe17c1075836b Christoph Hellwig 2011-01-14 1021 }
2fe17c1075836b Christoph Hellwig 2011-01-14 1022 }
2fe17c1075836b Christoph Hellwig 2011-01-14 1023
9c9f1159a54c61 Andrew Price 2014-11-12 @1024 static long __gfs2_fallocate(struct file *file, int mode, loff_t offset, loff_t len)
2fe17c1075836b Christoph Hellwig 2011-01-14 1025 {
496ad9aa8ef448 Al Viro 2013-01-23 1026 struct inode *inode = file_inode(file);
2fe17c1075836b Christoph Hellwig 2011-01-14 1027 struct gfs2_sbd *sdp = GFS2_SB(inode);
2fe17c1075836b Christoph Hellwig 2011-01-14 1028 struct gfs2_inode *ip = GFS2_I(inode);
7b9cff467144c8 Steven Whitehouse 2013-10-02 1029 struct gfs2_alloc_parms ap = { .aflags = 0, };
2fe17c1075836b Christoph Hellwig 2011-01-14 1030 unsigned int data_blocks = 0, ind_blocks = 0, rblocks;
174d1232ebc84f Andreas Gruenbacher 2018-02-20 1031 loff_t bytes, max_bytes, max_blks;
2fe17c1075836b Christoph Hellwig 2011-01-14 1032 int error;
4442f2e03ed964 Steven Whitehouse 2011-11-21 1033 const loff_t pos = offset;
4442f2e03ed964 Steven Whitehouse 2011-11-21 1034 const loff_t count = len;
6905d9e4dda611 Benjamin Marzinski 2011-04-26 1035 loff_t bsize_mask = ~((loff_t)sdp->sd_sb.sb_bsize - 1);
2fe17c1075836b Christoph Hellwig 2011-01-14 1036 loff_t next = (offset + len - 1) >> sdp->sd_sb.sb_bsize_shift;
64dd153c83743a Benjamin Marzinski 2011-09-12 1037 loff_t max_chunk_size = UINT_MAX & bsize_mask;
a0846a534c5fbc Bob Peterson 2014-02-06 1038
2fe17c1075836b Christoph Hellwig 2011-01-14 1039 next = (next + 1) << sdp->sd_sb.sb_bsize_shift;
2fe17c1075836b Christoph Hellwig 2011-01-14 1040
6905d9e4dda611 Benjamin Marzinski 2011-04-26 1041 offset &= bsize_mask;
2fe17c1075836b Christoph Hellwig 2011-01-14 1042
2fe17c1075836b Christoph Hellwig 2011-01-14 1043 len = next - offset;
2fe17c1075836b Christoph Hellwig 2011-01-14 1044 bytes = sdp->sd_max_rg_data * sdp->sd_sb.sb_bsize / 2;
2fe17c1075836b Christoph Hellwig 2011-01-14 1045 if (!bytes)
2fe17c1075836b Christoph Hellwig 2011-01-14 1046 bytes = UINT_MAX;
6905d9e4dda611 Benjamin Marzinski 2011-04-26 1047 bytes &= bsize_mask;
6905d9e4dda611 Benjamin Marzinski 2011-04-26 1048 if (bytes == 0)
6905d9e4dda611 Benjamin Marzinski 2011-04-26 1049 bytes = sdp->sd_sb.sb_bsize;
2fe17c1075836b Christoph Hellwig 2011-01-14 1050
da1dfb6af849cb Steven Whitehouse 2012-07-26 1051 gfs2_size_hint(file, offset, len);
8e2e00473598dd Bob Peterson 2012-07-19 1052
d9be0cda774e7f Abhi Das 2015-03-18 1053 gfs2_write_calc_reserv(ip, PAGE_SIZE, &data_blocks, &ind_blocks);
d9be0cda774e7f Abhi Das 2015-03-18 1054 ap.min_target = data_blocks + ind_blocks;
d9be0cda774e7f Abhi Das 2015-03-18 1055
2fe17c1075836b Christoph Hellwig 2011-01-14 1056 while (len > 0) {
2fe17c1075836b Christoph Hellwig 2011-01-14 1057 if (len < bytes)
2fe17c1075836b Christoph Hellwig 2011-01-14 1058 bytes = len;
58a7d5fb8e3127 Benjamin Marzinski 2012-03-08 1059 if (!gfs2_write_alloc_required(ip, offset, bytes)) {
58a7d5fb8e3127 Benjamin Marzinski 2012-03-08 1060 len -= bytes;
58a7d5fb8e3127 Benjamin Marzinski 2012-03-08 1061 offset += bytes;
58a7d5fb8e3127 Benjamin Marzinski 2012-03-08 1062 continue;
58a7d5fb8e3127 Benjamin Marzinski 2012-03-08 1063 }
d9be0cda774e7f Abhi Das 2015-03-18 1064
d9be0cda774e7f Abhi Das 2015-03-18 1065 /* We need to determine how many bytes we can actually
d9be0cda774e7f Abhi Das 2015-03-18 1066 * fallocate without exceeding quota or going over the
d9be0cda774e7f Abhi Das 2015-03-18 1067 * end of the fs. We start off optimistically by assuming
d9be0cda774e7f Abhi Das 2015-03-18 1068 * we can write max_bytes */
d9be0cda774e7f Abhi Das 2015-03-18 1069 max_bytes = (len > max_chunk_size) ? max_chunk_size : len;
d9be0cda774e7f Abhi Das 2015-03-18 1070
d9be0cda774e7f Abhi Das 2015-03-18 1071 /* Since max_bytes is most likely a theoretical max, we
d9be0cda774e7f Abhi Das 2015-03-18 1072 * calculate a more realistic 'bytes' to serve as a good
d9be0cda774e7f Abhi Das 2015-03-18 1073 * starting point for the number of bytes we may be able
d9be0cda774e7f Abhi Das 2015-03-18 1074 * to write */
2fe17c1075836b Christoph Hellwig 2011-01-14 1075 gfs2_write_calc_reserv(ip, bytes, &data_blocks, &ind_blocks);
7b9cff467144c8 Steven Whitehouse 2013-10-02 1076 ap.target = data_blocks + ind_blocks;
b8fbf471edb3db Abhi Das 2015-03-18 1077
b8fbf471edb3db Abhi Das 2015-03-18 1078 error = gfs2_quota_lock_check(ip, &ap);
2fe17c1075836b Christoph Hellwig 2011-01-14 1079 if (error)
9c9f1159a54c61 Andrew Price 2014-11-12 1080 return error;
d9be0cda774e7f Abhi Das 2015-03-18 1081 /* ap.allowed tells us how many blocks quota will allow
d9be0cda774e7f Abhi Das 2015-03-18 1082 * us to write. Check if this reduces max_blks */
174d1232ebc84f Andreas Gruenbacher 2018-02-20 1083 max_blks = UINT_MAX;
174d1232ebc84f Andreas Gruenbacher 2018-02-20 1084 if (ap.allowed)
d9be0cda774e7f Abhi Das 2015-03-18 1085 max_blks = ap.allowed;
2fe17c1075836b Christoph Hellwig 2011-01-14 1086
7b9cff467144c8 Steven Whitehouse 2013-10-02 1087 error = gfs2_inplace_reserve(ip, &ap);
d9be0cda774e7f Abhi Das 2015-03-18 1088 if (error)
2fe17c1075836b Christoph Hellwig 2011-01-14 1089 goto out_qunlock;
d9be0cda774e7f Abhi Das 2015-03-18 1090
d9be0cda774e7f Abhi Das 2015-03-18 1091 /* check if the selected rgrp limits our max_blks further */
725d0e9d464d56 Andreas Gruenbacher 2018-10-02 1092 if (ip->i_res.rs_reserved < max_blks)
725d0e9d464d56 Andreas Gruenbacher 2018-10-02 1093 max_blks = ip->i_res.rs_reserved;
d9be0cda774e7f Abhi Das 2015-03-18 1094
d9be0cda774e7f Abhi Das 2015-03-18 1095 /* Almost done. Calculate bytes that can be written using
d9be0cda774e7f Abhi Das 2015-03-18 1096 * max_blks. We also recompute max_bytes, data_blocks and
d9be0cda774e7f Abhi Das 2015-03-18 1097 * ind_blocks */
d9be0cda774e7f Abhi Das 2015-03-18 1098 calc_max_reserv(ip, &max_bytes, &data_blocks,
d9be0cda774e7f Abhi Das 2015-03-18 1099 &ind_blocks, max_blks);
2fe17c1075836b Christoph Hellwig 2011-01-14 1100
2fe17c1075836b Christoph Hellwig 2011-01-14 1101 rblocks = RES_DINODE + ind_blocks + RES_STATFS + RES_QUOTA +
71f890f7f758f3 Steven Whitehouse 2012-07-30 1102 RES_RG_HDR + gfs2_rg_blocks(ip, data_blocks + ind_blocks);
2fe17c1075836b Christoph Hellwig 2011-01-14 1103 if (gfs2_is_jdata(ip))
2fe17c1075836b Christoph Hellwig 2011-01-14 1104 rblocks += data_blocks ? data_blocks : 1;
2fe17c1075836b Christoph Hellwig 2011-01-14 1105
2fe17c1075836b Christoph Hellwig 2011-01-14 1106 error = gfs2_trans_begin(sdp, rblocks,
45eb05042d5667 Andreas Gruenbacher 2019-09-02 1107 PAGE_SIZE >> inode->i_blkbits);
2fe17c1075836b Christoph Hellwig 2011-01-14 1108 if (error)
2fe17c1075836b Christoph Hellwig 2011-01-14 1109 goto out_trans_fail;
2fe17c1075836b Christoph Hellwig 2011-01-14 1110
2fe17c1075836b Christoph Hellwig 2011-01-14 1111 error = fallocate_chunk(inode, offset, max_bytes, mode);
2fe17c1075836b Christoph Hellwig 2011-01-14 1112 gfs2_trans_end(sdp);
2fe17c1075836b Christoph Hellwig 2011-01-14 1113
2fe17c1075836b Christoph Hellwig 2011-01-14 1114 if (error)
2fe17c1075836b Christoph Hellwig 2011-01-14 1115 goto out_trans_fail;
2fe17c1075836b Christoph Hellwig 2011-01-14 1116
2fe17c1075836b Christoph Hellwig 2011-01-14 1117 len -= max_bytes;
2fe17c1075836b Christoph Hellwig 2011-01-14 1118 offset += max_bytes;
2fe17c1075836b Christoph Hellwig 2011-01-14 1119 gfs2_inplace_release(ip);
2fe17c1075836b Christoph Hellwig 2011-01-14 1120 gfs2_quota_unlock(ip);
2fe17c1075836b Christoph Hellwig 2011-01-14 1121 }
4442f2e03ed964 Steven Whitehouse 2011-11-21 1122
0a6a4abc84668d Andreas Gruenbacher 2019-08-08 1123 if (!(mode & FALLOC_FL_KEEP_SIZE) && (pos + count) > inode->i_size)
1885867b84d58e Andrew Price 2014-11-12 1124 i_size_write(inode, pos + count);
98f1a696a1b2f6 Andrew Price 2014-11-12 1125 file_update_time(file);
4b813f09405823 Andrew Price 2015-09-22 1126 mark_inode_dirty(inode);
1885867b84d58e Andrew Price 2014-11-12 1127
dde0c2e7984829 Christoph Hellwig 2016-04-07 1128 if ((file->f_flags & O_DSYNC) || IS_SYNC(file->f_mapping->host))
dde0c2e7984829 Christoph Hellwig 2016-04-07 1129 return vfs_fsync_range(file, pos, pos + count - 1,
dde0c2e7984829 Christoph Hellwig 2016-04-07 1130 (file->f_flags & __O_SYNC) ? 0 : 1);
dde0c2e7984829 Christoph Hellwig 2016-04-07 1131 return 0;
2fe17c1075836b Christoph Hellwig 2011-01-14 1132
2fe17c1075836b Christoph Hellwig 2011-01-14 1133 out_trans_fail:
2fe17c1075836b Christoph Hellwig 2011-01-14 1134 gfs2_inplace_release(ip);
2fe17c1075836b Christoph Hellwig 2011-01-14 1135 out_qunlock:
2fe17c1075836b Christoph Hellwig 2011-01-14 1136 gfs2_quota_unlock(ip);
9c9f1159a54c61 Andrew Price 2014-11-12 1137 return error;
9c9f1159a54c61 Andrew Price 2014-11-12 1138 }
9c9f1159a54c61 Andrew Price 2014-11-12 1139
9c9f1159a54c61 Andrew Price 2014-11-12 @1140 static long gfs2_fallocate(struct file *file, int mode, loff_t offset, loff_t len)
9c9f1159a54c61 Andrew Price 2014-11-12 1141 {
9c9f1159a54c61 Andrew Price 2014-11-12 1142 struct inode *inode = file_inode(file);
d4d7fc12b642a1 Andrew Price 2017-04-05 1143 struct gfs2_sbd *sdp = GFS2_SB(inode);
9c9f1159a54c61 Andrew Price 2014-11-12 1144 struct gfs2_inode *ip = GFS2_I(inode);
9c9f1159a54c61 Andrew Price 2014-11-12 1145 struct gfs2_holder gh;
9c9f1159a54c61 Andrew Price 2014-11-12 1146 int ret;
9c9f1159a54c61 Andrew Price 2014-11-12 1147
4e56a6411fbce6 Andreas Gruenbacher 2017-12-14 1148 if (mode & ~(FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE))
d4d7fc12b642a1 Andrew Price 2017-04-05 1149 return -EOPNOTSUPP;
d4d7fc12b642a1 Andrew Price 2017-04-05 1150 /* fallocate is needed by gfs2_grow to reserve space in the rindex */
d4d7fc12b642a1 Andrew Price 2017-04-05 1151 if (gfs2_is_jdata(ip) && inode != sdp->sd_rindex)
9c9f1159a54c61 Andrew Price 2014-11-12 1152 return -EOPNOTSUPP;
9c9f1159a54c61 Andrew Price 2014-11-12 1153
5955102c9984fa Al Viro 2016-01-22 1154 inode_lock(inode);
9c9f1159a54c61 Andrew Price 2014-11-12 1155
9c9f1159a54c61 Andrew Price 2014-11-12 1156 gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &gh);
9c9f1159a54c61 Andrew Price 2014-11-12 1157 ret = gfs2_glock_nq(&gh);
9c9f1159a54c61 Andrew Price 2014-11-12 1158 if (ret)
9c9f1159a54c61 Andrew Price 2014-11-12 1159 goto out_uninit;
9c9f1159a54c61 Andrew Price 2014-11-12 1160
9c9f1159a54c61 Andrew Price 2014-11-12 1161 if (!(mode & FALLOC_FL_KEEP_SIZE) &&
9c9f1159a54c61 Andrew Price 2014-11-12 1162 (offset + len) > inode->i_size) {
9c9f1159a54c61 Andrew Price 2014-11-12 1163 ret = inode_newsize_ok(inode, offset + len);
9c9f1159a54c61 Andrew Price 2014-11-12 1164 if (ret)
9c9f1159a54c61 Andrew Price 2014-11-12 1165 goto out_unlock;
9c9f1159a54c61 Andrew Price 2014-11-12 1166 }
9c9f1159a54c61 Andrew Price 2014-11-12 1167
9c9f1159a54c61 Andrew Price 2014-11-12 1168 ret = get_write_access(inode);
9c9f1159a54c61 Andrew Price 2014-11-12 1169 if (ret)
9c9f1159a54c61 Andrew Price 2014-11-12 1170 goto out_unlock;
9c9f1159a54c61 Andrew Price 2014-11-12 1171
4e56a6411fbce6 Andreas Gruenbacher 2017-12-14 1172 if (mode & FALLOC_FL_PUNCH_HOLE) {
4e56a6411fbce6 Andreas Gruenbacher 2017-12-14 1173 ret = __gfs2_punch_hole(file, offset, len);
4e56a6411fbce6 Andreas Gruenbacher 2017-12-14 1174 } else {
9c9f1159a54c61 Andrew Price 2014-11-12 1175 ret = __gfs2_fallocate(file, mode, offset, len);
9c9f1159a54c61 Andrew Price 2014-11-12 1176 if (ret)
a097dc7e24cba7 Bob Peterson 2015-07-16 1177 gfs2_rs_deltree(&ip->i_res);
4e56a6411fbce6 Andreas Gruenbacher 2017-12-14 1178 }
a097dc7e24cba7 Bob Peterson 2015-07-16 1179
9c9f1159a54c61 Andrew Price 2014-11-12 1180 put_write_access(inode);
2fe17c1075836b Christoph Hellwig 2011-01-14 1181 out_unlock:
a0846a534c5fbc Bob Peterson 2014-02-06 1182 gfs2_glock_dq(&gh);
2fe17c1075836b Christoph Hellwig 2011-01-14 1183 out_uninit:
a0846a534c5fbc Bob Peterson 2014-02-06 1184 gfs2_holder_uninit(&gh);
5955102c9984fa Al Viro 2016-01-22 1185 inode_unlock(inode);
9c9f1159a54c61 Andrew Price 2014-11-12 1186 return ret;
2fe17c1075836b Christoph Hellwig 2011-01-14 1187 }
2fe17c1075836b Christoph Hellwig 2011-01-14 1188
:::::: The code at line 948 was first introduced by commit
:::::: 2fe17c1075836b66678ed2a305fd09b6773883aa fallocate should be a file operation
:::::: TO: Christoph Hellwig <hch@lst.de>
:::::: CC: Al Viro <viro@zeniv.linux.org.uk>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all at lists.01.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 25865 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/cluster-devel/attachments/20210512/e0b823ec/attachment.gz>
WARNING: multiple messages have this Message-ID (diff)
From: kernel test robot <lkp@intel.com>
To: kbuild-all@lists.01.org
Subject: [gfs2:for-next 1/2] fs/gfs2/file.c:948:12: error: invalid storage class for function 'fallocate_chunk'
Date: Wed, 12 May 2021 02:46:43 +0800 [thread overview]
Message-ID: <202105120235.kIBxbUA3-lkp@intel.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 23490 bytes --]
tree: https://git.kernel.org/pub/scm/linux/kernel/git/gfs2/linux-gfs2.git for-next
head: 5bec51f9bc58e6d724fa3588b77e4c2f865dd13a
commit: a1381d36d843d4f108fe24b384a8a24694fe0bb5 [1/2] gfs2: Prevent direct-I/O write fallback errors from getting lost
config: m68k-randconfig-r016-20210511 (attached as .config)
compiler: m68k-linux-gcc (GCC) 9.3.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/gfs2/linux-gfs2.git/commit/?id=a1381d36d843d4f108fe24b384a8a24694fe0bb5
git remote add gfs2 https://git.kernel.org/pub/scm/linux/kernel/git/gfs2/linux-gfs2.git
git fetch --no-tags gfs2 for-next
git checkout a1381d36d843d4f108fe24b384a8a24694fe0bb5
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross W=1 ARCH=m68k
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All error/warnings (new ones prefixed by >>):
fs/gfs2/file.c: In function 'gfs2_file_write_iter':
>> fs/gfs2/file.c:948:12: error: invalid storage class for function 'fallocate_chunk'
948 | static int fallocate_chunk(struct inode *inode, loff_t offset, loff_t len,
| ^~~~~~~~~~~~~~~
>> fs/gfs2/file.c:948:1: warning: ISO C90 forbids mixed declarations and code [-Wdeclaration-after-statement]
948 | static int fallocate_chunk(struct inode *inode, loff_t offset, loff_t len,
| ^~~~~~
>> fs/gfs2/file.c:1002:13: error: invalid storage class for function 'calc_max_reserv'
1002 | static void calc_max_reserv(struct gfs2_inode *ip, loff_t *len,
| ^~~~~~~~~~~~~~~
>> fs/gfs2/file.c:1024:13: error: invalid storage class for function '__gfs2_fallocate'
1024 | static long __gfs2_fallocate(struct file *file, int mode, loff_t offset, loff_t len)
| ^~~~~~~~~~~~~~~~
>> fs/gfs2/file.c:1140:13: error: invalid storage class for function 'gfs2_fallocate'
1140 | static long gfs2_fallocate(struct file *file, int mode, loff_t offset, loff_t len)
| ^~~~~~~~~~~~~~
>> fs/gfs2/file.c:1189:16: error: invalid storage class for function 'gfs2_file_splice_write'
1189 | static ssize_t gfs2_file_splice_write(struct pipe_inode_info *pipe,
| ^~~~~~~~~~~~~~~~~~~~~~
>> fs/gfs2/file.c:1393:1: error: expected declaration or statement at end of input
1393 | };
| ^
fs/gfs2/file.c:1385:30: warning: unused variable 'gfs2_dir_fops_nolock' [-Wunused-variable]
1385 | const struct file_operations gfs2_dir_fops_nolock = {
| ^~~~~~~~~~~~~~~~~~~~
fs/gfs2/file.c:1368:30: warning: unused variable 'gfs2_file_fops_nolock' [-Wunused-variable]
1368 | const struct file_operations gfs2_file_fops_nolock = {
| ^~~~~~~~~~~~~~~~~~~~~
At top level:
fs/gfs2/file.c:872:16: warning: 'gfs2_file_write_iter' defined but not used [-Wunused-function]
872 | static ssize_t gfs2_file_write_iter(struct kiocb *iocb, struct iov_iter *from)
| ^~~~~~~~~~~~~~~~~~~~
vim +/fallocate_chunk +948 fs/gfs2/file.c
56aa616a03feca Steven Whitehouse 2009-12-08 947
2fe17c1075836b Christoph Hellwig 2011-01-14 @948 static int fallocate_chunk(struct inode *inode, loff_t offset, loff_t len,
2fe17c1075836b Christoph Hellwig 2011-01-14 949 int mode)
2fe17c1075836b Christoph Hellwig 2011-01-14 950 {
fffb64127adc3e Andreas Gruenbacher 2018-03-29 951 struct super_block *sb = inode->i_sb;
2fe17c1075836b Christoph Hellwig 2011-01-14 952 struct gfs2_inode *ip = GFS2_I(inode);
fffb64127adc3e Andreas Gruenbacher 2018-03-29 953 loff_t end = offset + len;
2fe17c1075836b Christoph Hellwig 2011-01-14 954 struct buffer_head *dibh;
2fe17c1075836b Christoph Hellwig 2011-01-14 955 int error;
2fe17c1075836b Christoph Hellwig 2011-01-14 956
2fe17c1075836b Christoph Hellwig 2011-01-14 957 error = gfs2_meta_inode_buffer(ip, &dibh);
2fe17c1075836b Christoph Hellwig 2011-01-14 958 if (unlikely(error))
64dd153c83743a Benjamin Marzinski 2011-09-12 959 return error;
2fe17c1075836b Christoph Hellwig 2011-01-14 960
350a9b0a7269c6 Steven Whitehouse 2012-12-14 961 gfs2_trans_add_meta(ip->i_gl, dibh);
2fe17c1075836b Christoph Hellwig 2011-01-14 962
2fe17c1075836b Christoph Hellwig 2011-01-14 963 if (gfs2_is_stuffed(ip)) {
2fe17c1075836b Christoph Hellwig 2011-01-14 964 error = gfs2_unstuff_dinode(ip, NULL);
2fe17c1075836b Christoph Hellwig 2011-01-14 965 if (unlikely(error))
2fe17c1075836b Christoph Hellwig 2011-01-14 966 goto out;
2fe17c1075836b Christoph Hellwig 2011-01-14 967 }
2fe17c1075836b Christoph Hellwig 2011-01-14 968
fffb64127adc3e Andreas Gruenbacher 2018-03-29 969 while (offset < end) {
c25892827c7996 Andreas Gruenbacher 2018-07-06 970 struct iomap iomap = { };
c25892827c7996 Andreas Gruenbacher 2018-07-06 971
54992257fe4bb9 Andreas Gruenbacher 2021-03-27 972 error = gfs2_iomap_alloc(inode, offset, end - offset, &iomap);
fffb64127adc3e Andreas Gruenbacher 2018-03-29 973 if (error)
64dd153c83743a Benjamin Marzinski 2011-09-12 974 goto out;
fffb64127adc3e Andreas Gruenbacher 2018-03-29 975 offset = iomap.offset + iomap.length;
d505a96a3b16f4 Andreas Gruenbacher 2018-06-24 976 if (!(iomap.flags & IOMAP_F_NEW))
64dd153c83743a Benjamin Marzinski 2011-09-12 977 continue;
fffb64127adc3e Andreas Gruenbacher 2018-03-29 978 error = sb_issue_zeroout(sb, iomap.addr >> inode->i_blkbits,
fffb64127adc3e Andreas Gruenbacher 2018-03-29 979 iomap.length >> inode->i_blkbits,
fffb64127adc3e Andreas Gruenbacher 2018-03-29 980 GFP_NOFS);
fffb64127adc3e Andreas Gruenbacher 2018-03-29 981 if (error) {
fffb64127adc3e Andreas Gruenbacher 2018-03-29 982 fs_err(GFS2_SB(inode), "Failed to zero data buffers\n");
2fe17c1075836b Christoph Hellwig 2011-01-14 983 goto out;
2fe17c1075836b Christoph Hellwig 2011-01-14 984 }
64dd153c83743a Benjamin Marzinski 2011-09-12 985 }
2fe17c1075836b Christoph Hellwig 2011-01-14 986 out:
64dd153c83743a Benjamin Marzinski 2011-09-12 987 brelse(dibh);
2fe17c1075836b Christoph Hellwig 2011-01-14 988 return error;
2fe17c1075836b Christoph Hellwig 2011-01-14 989 }
f3b64b57c044fe Andreas Gruenbacher 2019-08-31 990
d9be0cda774e7f Abhi Das 2015-03-18 991 /**
d9be0cda774e7f Abhi Das 2015-03-18 992 * calc_max_reserv() - Reverse of write_calc_reserv. Given a number of
d9be0cda774e7f Abhi Das 2015-03-18 993 * blocks, determine how many bytes can be written.
d9be0cda774e7f Abhi Das 2015-03-18 994 * @ip: The inode in question.
d9be0cda774e7f Abhi Das 2015-03-18 995 * @len: Max cap of bytes. What we return in *len must be <= this.
d9be0cda774e7f Abhi Das 2015-03-18 996 * @data_blocks: Compute and return the number of data blocks needed
d9be0cda774e7f Abhi Das 2015-03-18 997 * @ind_blocks: Compute and return the number of indirect blocks needed
d9be0cda774e7f Abhi Das 2015-03-18 998 * @max_blocks: The total blocks available to work with.
d9be0cda774e7f Abhi Das 2015-03-18 999 *
d9be0cda774e7f Abhi Das 2015-03-18 1000 * Returns: void, but @len, @data_blocks and @ind_blocks are filled in.
d9be0cda774e7f Abhi Das 2015-03-18 1001 */
d9be0cda774e7f Abhi Das 2015-03-18 @1002 static void calc_max_reserv(struct gfs2_inode *ip, loff_t *len,
d9be0cda774e7f Abhi Das 2015-03-18 1003 unsigned int *data_blocks, unsigned int *ind_blocks,
d9be0cda774e7f Abhi Das 2015-03-18 1004 unsigned int max_blocks)
2fe17c1075836b Christoph Hellwig 2011-01-14 1005 {
d9be0cda774e7f Abhi Das 2015-03-18 1006 loff_t max = *len;
2fe17c1075836b Christoph Hellwig 2011-01-14 1007 const struct gfs2_sbd *sdp = GFS2_SB(&ip->i_inode);
2fe17c1075836b Christoph Hellwig 2011-01-14 1008 unsigned int tmp, max_data = max_blocks - 3 * (sdp->sd_max_height - 1);
2fe17c1075836b Christoph Hellwig 2011-01-14 1009
2fe17c1075836b Christoph Hellwig 2011-01-14 1010 for (tmp = max_data; tmp > sdp->sd_diptrs;) {
2fe17c1075836b Christoph Hellwig 2011-01-14 1011 tmp = DIV_ROUND_UP(tmp, sdp->sd_inptrs);
2fe17c1075836b Christoph Hellwig 2011-01-14 1012 max_data -= tmp;
2fe17c1075836b Christoph Hellwig 2011-01-14 1013 }
d9be0cda774e7f Abhi Das 2015-03-18 1014
2fe17c1075836b Christoph Hellwig 2011-01-14 1015 *data_blocks = max_data;
2fe17c1075836b Christoph Hellwig 2011-01-14 1016 *ind_blocks = max_blocks - max_data;
2fe17c1075836b Christoph Hellwig 2011-01-14 1017 *len = ((loff_t)max_data - 3) << sdp->sd_sb.sb_bsize_shift;
2fe17c1075836b Christoph Hellwig 2011-01-14 1018 if (*len > max) {
2fe17c1075836b Christoph Hellwig 2011-01-14 1019 *len = max;
2fe17c1075836b Christoph Hellwig 2011-01-14 1020 gfs2_write_calc_reserv(ip, max, data_blocks, ind_blocks);
2fe17c1075836b Christoph Hellwig 2011-01-14 1021 }
2fe17c1075836b Christoph Hellwig 2011-01-14 1022 }
2fe17c1075836b Christoph Hellwig 2011-01-14 1023
9c9f1159a54c61 Andrew Price 2014-11-12 @1024 static long __gfs2_fallocate(struct file *file, int mode, loff_t offset, loff_t len)
2fe17c1075836b Christoph Hellwig 2011-01-14 1025 {
496ad9aa8ef448 Al Viro 2013-01-23 1026 struct inode *inode = file_inode(file);
2fe17c1075836b Christoph Hellwig 2011-01-14 1027 struct gfs2_sbd *sdp = GFS2_SB(inode);
2fe17c1075836b Christoph Hellwig 2011-01-14 1028 struct gfs2_inode *ip = GFS2_I(inode);
7b9cff467144c8 Steven Whitehouse 2013-10-02 1029 struct gfs2_alloc_parms ap = { .aflags = 0, };
2fe17c1075836b Christoph Hellwig 2011-01-14 1030 unsigned int data_blocks = 0, ind_blocks = 0, rblocks;
174d1232ebc84f Andreas Gruenbacher 2018-02-20 1031 loff_t bytes, max_bytes, max_blks;
2fe17c1075836b Christoph Hellwig 2011-01-14 1032 int error;
4442f2e03ed964 Steven Whitehouse 2011-11-21 1033 const loff_t pos = offset;
4442f2e03ed964 Steven Whitehouse 2011-11-21 1034 const loff_t count = len;
6905d9e4dda611 Benjamin Marzinski 2011-04-26 1035 loff_t bsize_mask = ~((loff_t)sdp->sd_sb.sb_bsize - 1);
2fe17c1075836b Christoph Hellwig 2011-01-14 1036 loff_t next = (offset + len - 1) >> sdp->sd_sb.sb_bsize_shift;
64dd153c83743a Benjamin Marzinski 2011-09-12 1037 loff_t max_chunk_size = UINT_MAX & bsize_mask;
a0846a534c5fbc Bob Peterson 2014-02-06 1038
2fe17c1075836b Christoph Hellwig 2011-01-14 1039 next = (next + 1) << sdp->sd_sb.sb_bsize_shift;
2fe17c1075836b Christoph Hellwig 2011-01-14 1040
6905d9e4dda611 Benjamin Marzinski 2011-04-26 1041 offset &= bsize_mask;
2fe17c1075836b Christoph Hellwig 2011-01-14 1042
2fe17c1075836b Christoph Hellwig 2011-01-14 1043 len = next - offset;
2fe17c1075836b Christoph Hellwig 2011-01-14 1044 bytes = sdp->sd_max_rg_data * sdp->sd_sb.sb_bsize / 2;
2fe17c1075836b Christoph Hellwig 2011-01-14 1045 if (!bytes)
2fe17c1075836b Christoph Hellwig 2011-01-14 1046 bytes = UINT_MAX;
6905d9e4dda611 Benjamin Marzinski 2011-04-26 1047 bytes &= bsize_mask;
6905d9e4dda611 Benjamin Marzinski 2011-04-26 1048 if (bytes == 0)
6905d9e4dda611 Benjamin Marzinski 2011-04-26 1049 bytes = sdp->sd_sb.sb_bsize;
2fe17c1075836b Christoph Hellwig 2011-01-14 1050
da1dfb6af849cb Steven Whitehouse 2012-07-26 1051 gfs2_size_hint(file, offset, len);
8e2e00473598dd Bob Peterson 2012-07-19 1052
d9be0cda774e7f Abhi Das 2015-03-18 1053 gfs2_write_calc_reserv(ip, PAGE_SIZE, &data_blocks, &ind_blocks);
d9be0cda774e7f Abhi Das 2015-03-18 1054 ap.min_target = data_blocks + ind_blocks;
d9be0cda774e7f Abhi Das 2015-03-18 1055
2fe17c1075836b Christoph Hellwig 2011-01-14 1056 while (len > 0) {
2fe17c1075836b Christoph Hellwig 2011-01-14 1057 if (len < bytes)
2fe17c1075836b Christoph Hellwig 2011-01-14 1058 bytes = len;
58a7d5fb8e3127 Benjamin Marzinski 2012-03-08 1059 if (!gfs2_write_alloc_required(ip, offset, bytes)) {
58a7d5fb8e3127 Benjamin Marzinski 2012-03-08 1060 len -= bytes;
58a7d5fb8e3127 Benjamin Marzinski 2012-03-08 1061 offset += bytes;
58a7d5fb8e3127 Benjamin Marzinski 2012-03-08 1062 continue;
58a7d5fb8e3127 Benjamin Marzinski 2012-03-08 1063 }
d9be0cda774e7f Abhi Das 2015-03-18 1064
d9be0cda774e7f Abhi Das 2015-03-18 1065 /* We need to determine how many bytes we can actually
d9be0cda774e7f Abhi Das 2015-03-18 1066 * fallocate without exceeding quota or going over the
d9be0cda774e7f Abhi Das 2015-03-18 1067 * end of the fs. We start off optimistically by assuming
d9be0cda774e7f Abhi Das 2015-03-18 1068 * we can write max_bytes */
d9be0cda774e7f Abhi Das 2015-03-18 1069 max_bytes = (len > max_chunk_size) ? max_chunk_size : len;
d9be0cda774e7f Abhi Das 2015-03-18 1070
d9be0cda774e7f Abhi Das 2015-03-18 1071 /* Since max_bytes is most likely a theoretical max, we
d9be0cda774e7f Abhi Das 2015-03-18 1072 * calculate a more realistic 'bytes' to serve as a good
d9be0cda774e7f Abhi Das 2015-03-18 1073 * starting point for the number of bytes we may be able
d9be0cda774e7f Abhi Das 2015-03-18 1074 * to write */
2fe17c1075836b Christoph Hellwig 2011-01-14 1075 gfs2_write_calc_reserv(ip, bytes, &data_blocks, &ind_blocks);
7b9cff467144c8 Steven Whitehouse 2013-10-02 1076 ap.target = data_blocks + ind_blocks;
b8fbf471edb3db Abhi Das 2015-03-18 1077
b8fbf471edb3db Abhi Das 2015-03-18 1078 error = gfs2_quota_lock_check(ip, &ap);
2fe17c1075836b Christoph Hellwig 2011-01-14 1079 if (error)
9c9f1159a54c61 Andrew Price 2014-11-12 1080 return error;
d9be0cda774e7f Abhi Das 2015-03-18 1081 /* ap.allowed tells us how many blocks quota will allow
d9be0cda774e7f Abhi Das 2015-03-18 1082 * us to write. Check if this reduces max_blks */
174d1232ebc84f Andreas Gruenbacher 2018-02-20 1083 max_blks = UINT_MAX;
174d1232ebc84f Andreas Gruenbacher 2018-02-20 1084 if (ap.allowed)
d9be0cda774e7f Abhi Das 2015-03-18 1085 max_blks = ap.allowed;
2fe17c1075836b Christoph Hellwig 2011-01-14 1086
7b9cff467144c8 Steven Whitehouse 2013-10-02 1087 error = gfs2_inplace_reserve(ip, &ap);
d9be0cda774e7f Abhi Das 2015-03-18 1088 if (error)
2fe17c1075836b Christoph Hellwig 2011-01-14 1089 goto out_qunlock;
d9be0cda774e7f Abhi Das 2015-03-18 1090
d9be0cda774e7f Abhi Das 2015-03-18 1091 /* check if the selected rgrp limits our max_blks further */
725d0e9d464d56 Andreas Gruenbacher 2018-10-02 1092 if (ip->i_res.rs_reserved < max_blks)
725d0e9d464d56 Andreas Gruenbacher 2018-10-02 1093 max_blks = ip->i_res.rs_reserved;
d9be0cda774e7f Abhi Das 2015-03-18 1094
d9be0cda774e7f Abhi Das 2015-03-18 1095 /* Almost done. Calculate bytes that can be written using
d9be0cda774e7f Abhi Das 2015-03-18 1096 * max_blks. We also recompute max_bytes, data_blocks and
d9be0cda774e7f Abhi Das 2015-03-18 1097 * ind_blocks */
d9be0cda774e7f Abhi Das 2015-03-18 1098 calc_max_reserv(ip, &max_bytes, &data_blocks,
d9be0cda774e7f Abhi Das 2015-03-18 1099 &ind_blocks, max_blks);
2fe17c1075836b Christoph Hellwig 2011-01-14 1100
2fe17c1075836b Christoph Hellwig 2011-01-14 1101 rblocks = RES_DINODE + ind_blocks + RES_STATFS + RES_QUOTA +
71f890f7f758f3 Steven Whitehouse 2012-07-30 1102 RES_RG_HDR + gfs2_rg_blocks(ip, data_blocks + ind_blocks);
2fe17c1075836b Christoph Hellwig 2011-01-14 1103 if (gfs2_is_jdata(ip))
2fe17c1075836b Christoph Hellwig 2011-01-14 1104 rblocks += data_blocks ? data_blocks : 1;
2fe17c1075836b Christoph Hellwig 2011-01-14 1105
2fe17c1075836b Christoph Hellwig 2011-01-14 1106 error = gfs2_trans_begin(sdp, rblocks,
45eb05042d5667 Andreas Gruenbacher 2019-09-02 1107 PAGE_SIZE >> inode->i_blkbits);
2fe17c1075836b Christoph Hellwig 2011-01-14 1108 if (error)
2fe17c1075836b Christoph Hellwig 2011-01-14 1109 goto out_trans_fail;
2fe17c1075836b Christoph Hellwig 2011-01-14 1110
2fe17c1075836b Christoph Hellwig 2011-01-14 1111 error = fallocate_chunk(inode, offset, max_bytes, mode);
2fe17c1075836b Christoph Hellwig 2011-01-14 1112 gfs2_trans_end(sdp);
2fe17c1075836b Christoph Hellwig 2011-01-14 1113
2fe17c1075836b Christoph Hellwig 2011-01-14 1114 if (error)
2fe17c1075836b Christoph Hellwig 2011-01-14 1115 goto out_trans_fail;
2fe17c1075836b Christoph Hellwig 2011-01-14 1116
2fe17c1075836b Christoph Hellwig 2011-01-14 1117 len -= max_bytes;
2fe17c1075836b Christoph Hellwig 2011-01-14 1118 offset += max_bytes;
2fe17c1075836b Christoph Hellwig 2011-01-14 1119 gfs2_inplace_release(ip);
2fe17c1075836b Christoph Hellwig 2011-01-14 1120 gfs2_quota_unlock(ip);
2fe17c1075836b Christoph Hellwig 2011-01-14 1121 }
4442f2e03ed964 Steven Whitehouse 2011-11-21 1122
0a6a4abc84668d Andreas Gruenbacher 2019-08-08 1123 if (!(mode & FALLOC_FL_KEEP_SIZE) && (pos + count) > inode->i_size)
1885867b84d58e Andrew Price 2014-11-12 1124 i_size_write(inode, pos + count);
98f1a696a1b2f6 Andrew Price 2014-11-12 1125 file_update_time(file);
4b813f09405823 Andrew Price 2015-09-22 1126 mark_inode_dirty(inode);
1885867b84d58e Andrew Price 2014-11-12 1127
dde0c2e7984829 Christoph Hellwig 2016-04-07 1128 if ((file->f_flags & O_DSYNC) || IS_SYNC(file->f_mapping->host))
dde0c2e7984829 Christoph Hellwig 2016-04-07 1129 return vfs_fsync_range(file, pos, pos + count - 1,
dde0c2e7984829 Christoph Hellwig 2016-04-07 1130 (file->f_flags & __O_SYNC) ? 0 : 1);
dde0c2e7984829 Christoph Hellwig 2016-04-07 1131 return 0;
2fe17c1075836b Christoph Hellwig 2011-01-14 1132
2fe17c1075836b Christoph Hellwig 2011-01-14 1133 out_trans_fail:
2fe17c1075836b Christoph Hellwig 2011-01-14 1134 gfs2_inplace_release(ip);
2fe17c1075836b Christoph Hellwig 2011-01-14 1135 out_qunlock:
2fe17c1075836b Christoph Hellwig 2011-01-14 1136 gfs2_quota_unlock(ip);
9c9f1159a54c61 Andrew Price 2014-11-12 1137 return error;
9c9f1159a54c61 Andrew Price 2014-11-12 1138 }
9c9f1159a54c61 Andrew Price 2014-11-12 1139
9c9f1159a54c61 Andrew Price 2014-11-12 @1140 static long gfs2_fallocate(struct file *file, int mode, loff_t offset, loff_t len)
9c9f1159a54c61 Andrew Price 2014-11-12 1141 {
9c9f1159a54c61 Andrew Price 2014-11-12 1142 struct inode *inode = file_inode(file);
d4d7fc12b642a1 Andrew Price 2017-04-05 1143 struct gfs2_sbd *sdp = GFS2_SB(inode);
9c9f1159a54c61 Andrew Price 2014-11-12 1144 struct gfs2_inode *ip = GFS2_I(inode);
9c9f1159a54c61 Andrew Price 2014-11-12 1145 struct gfs2_holder gh;
9c9f1159a54c61 Andrew Price 2014-11-12 1146 int ret;
9c9f1159a54c61 Andrew Price 2014-11-12 1147
4e56a6411fbce6 Andreas Gruenbacher 2017-12-14 1148 if (mode & ~(FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE))
d4d7fc12b642a1 Andrew Price 2017-04-05 1149 return -EOPNOTSUPP;
d4d7fc12b642a1 Andrew Price 2017-04-05 1150 /* fallocate is needed by gfs2_grow to reserve space in the rindex */
d4d7fc12b642a1 Andrew Price 2017-04-05 1151 if (gfs2_is_jdata(ip) && inode != sdp->sd_rindex)
9c9f1159a54c61 Andrew Price 2014-11-12 1152 return -EOPNOTSUPP;
9c9f1159a54c61 Andrew Price 2014-11-12 1153
5955102c9984fa Al Viro 2016-01-22 1154 inode_lock(inode);
9c9f1159a54c61 Andrew Price 2014-11-12 1155
9c9f1159a54c61 Andrew Price 2014-11-12 1156 gfs2_holder_init(ip->i_gl, LM_ST_EXCLUSIVE, 0, &gh);
9c9f1159a54c61 Andrew Price 2014-11-12 1157 ret = gfs2_glock_nq(&gh);
9c9f1159a54c61 Andrew Price 2014-11-12 1158 if (ret)
9c9f1159a54c61 Andrew Price 2014-11-12 1159 goto out_uninit;
9c9f1159a54c61 Andrew Price 2014-11-12 1160
9c9f1159a54c61 Andrew Price 2014-11-12 1161 if (!(mode & FALLOC_FL_KEEP_SIZE) &&
9c9f1159a54c61 Andrew Price 2014-11-12 1162 (offset + len) > inode->i_size) {
9c9f1159a54c61 Andrew Price 2014-11-12 1163 ret = inode_newsize_ok(inode, offset + len);
9c9f1159a54c61 Andrew Price 2014-11-12 1164 if (ret)
9c9f1159a54c61 Andrew Price 2014-11-12 1165 goto out_unlock;
9c9f1159a54c61 Andrew Price 2014-11-12 1166 }
9c9f1159a54c61 Andrew Price 2014-11-12 1167
9c9f1159a54c61 Andrew Price 2014-11-12 1168 ret = get_write_access(inode);
9c9f1159a54c61 Andrew Price 2014-11-12 1169 if (ret)
9c9f1159a54c61 Andrew Price 2014-11-12 1170 goto out_unlock;
9c9f1159a54c61 Andrew Price 2014-11-12 1171
4e56a6411fbce6 Andreas Gruenbacher 2017-12-14 1172 if (mode & FALLOC_FL_PUNCH_HOLE) {
4e56a6411fbce6 Andreas Gruenbacher 2017-12-14 1173 ret = __gfs2_punch_hole(file, offset, len);
4e56a6411fbce6 Andreas Gruenbacher 2017-12-14 1174 } else {
9c9f1159a54c61 Andrew Price 2014-11-12 1175 ret = __gfs2_fallocate(file, mode, offset, len);
9c9f1159a54c61 Andrew Price 2014-11-12 1176 if (ret)
a097dc7e24cba7 Bob Peterson 2015-07-16 1177 gfs2_rs_deltree(&ip->i_res);
4e56a6411fbce6 Andreas Gruenbacher 2017-12-14 1178 }
a097dc7e24cba7 Bob Peterson 2015-07-16 1179
9c9f1159a54c61 Andrew Price 2014-11-12 1180 put_write_access(inode);
2fe17c1075836b Christoph Hellwig 2011-01-14 1181 out_unlock:
a0846a534c5fbc Bob Peterson 2014-02-06 1182 gfs2_glock_dq(&gh);
2fe17c1075836b Christoph Hellwig 2011-01-14 1183 out_uninit:
a0846a534c5fbc Bob Peterson 2014-02-06 1184 gfs2_holder_uninit(&gh);
5955102c9984fa Al Viro 2016-01-22 1185 inode_unlock(inode);
9c9f1159a54c61 Andrew Price 2014-11-12 1186 return ret;
2fe17c1075836b Christoph Hellwig 2011-01-14 1187 }
2fe17c1075836b Christoph Hellwig 2011-01-14 1188
:::::: The code at line 948 was first introduced by commit
:::::: 2fe17c1075836b66678ed2a305fd09b6773883aa fallocate should be a file operation
:::::: TO: Christoph Hellwig <hch@lst.de>
:::::: CC: Al Viro <viro@zeniv.linux.org.uk>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org
[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 25865 bytes --]
next reply other threads:[~2021-05-11 18:46 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-05-11 18:46 kernel test robot [this message]
2021-05-11 18:46 ` [gfs2:for-next 1/2] fs/gfs2/file.c:948:12: error: invalid storage class for function 'fallocate_chunk' kernel test robot
-- strict thread matches above, loose matches on Subject: below --
2021-05-11 18:42 [Cluster-devel] " kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202105120235.kIBxbUA3-lkp@intel.com \
--to=lkp@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.