From: kbuild test robot <lkp@intel.com>
To: Carlos Maiolino <cmaiolino@redhat.com>
Cc: kbuild-all@01.org, linux-fsdevel@vger.kernel.org, hch@lst.de,
adilger@dilger.ca, jaegeuk@kernel.org, darrick.wong@oracle.com,
miklos@szeredi.hu, rpeterso@redhat.com,
linux-xfs@vger.kernel.org
Subject: Re: [PATCH 7/9] fiemap: Use a callback to fill fiemap extents
Date: Fri, 9 Aug 2019 08:04:56 +0800 [thread overview]
Message-ID: <201908090808.UlvbBeuF%lkp@intel.com> (raw)
In-Reply-To: <20190808082744.31405-8-cmaiolino@redhat.com>
Hi Carlos,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on linus/master]
[cannot apply to v5.3-rc3 next-20190808]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Carlos-Maiolino/New-fiemap-infrastructure-and-bmap-removal/20190808-221354
reproduce:
# apt-get install sparse
# sparse version: v0.6.1-rc1-7-g2b96cd8-dirty
make ARCH=x86_64 allmodconfig
make C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__'
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>
sparse warnings: (new ones prefixed by >>)
>> fs/ioctl.c:87:52: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected struct fiemap_extent [noderef] <asn:1> *dest @@ got n:1> *dest @@
>> fs/ioctl.c:87:52: sparse: expected struct fiemap_extent [noderef] <asn:1> *dest
>> fs/ioctl.c:87:52: sparse: got void *fi_cb_data
fs/ioctl.c:83:5: sparse: sparse: symbol 'fiemap_fill_user_extent' was not declared. Should it be static?
>> fs/ioctl.c:218:28: sparse: sparse: incorrect type in assignment (different address spaces) @@ expected void *[assigned] fi_cb_data @@ got struct fiemap_extent [nvoid *[assigned] fi_cb_data @@
>> fs/ioctl.c:218:28: sparse: expected void *[assigned] fi_cb_data
>> fs/ioctl.c:218:28: sparse: got struct fiemap_extent [noderef] <asn:1> *
>> fs/ioctl.c:224:14: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] <asn:1> * @@ got oderef] <asn:1> * @@
>> fs/ioctl.c:224:14: sparse: expected void const volatile [noderef] <asn:1> *
>> fs/ioctl.c:224:14: sparse: got void *[assigned] fi_cb_data
vim +87 fs/ioctl.c
79
80 #define SET_UNKNOWN_FLAGS (FIEMAP_EXTENT_DELALLOC)
81 #define SET_NO_UNMOUNTED_IO_FLAGS (FIEMAP_EXTENT_DATA_ENCRYPTED)
82 #define SET_NOT_ALIGNED_FLAGS (FIEMAP_EXTENT_DATA_TAIL|FIEMAP_EXTENT_DATA_INLINE)
83 int fiemap_fill_user_extent(struct fiemap_extent_info *fieinfo, u64 logical,
84 u64 phys, u64 len, u32 flags)
85 {
86 struct fiemap_extent extent;
> 87 struct fiemap_extent __user *dest = fieinfo->fi_cb_data;
88
89 /* only count the extents */
90 if (fieinfo->fi_extents_max == 0) {
91 fieinfo->fi_extents_mapped++;
92 return (flags & FIEMAP_EXTENT_LAST) ? 1 : 0;
93 }
94
95 if (fieinfo->fi_extents_mapped >= fieinfo->fi_extents_max)
96 return 1;
97
98 if (flags & SET_UNKNOWN_FLAGS)
99 flags |= FIEMAP_EXTENT_UNKNOWN;
100 if (flags & SET_NO_UNMOUNTED_IO_FLAGS)
101 flags |= FIEMAP_EXTENT_ENCODED;
102 if (flags & SET_NOT_ALIGNED_FLAGS)
103 flags |= FIEMAP_EXTENT_NOT_ALIGNED;
104
105 memset(&extent, 0, sizeof(extent));
106 extent.fe_logical = logical;
107 extent.fe_physical = phys;
108 extent.fe_length = len;
109 extent.fe_flags = flags;
110
111 dest += fieinfo->fi_extents_mapped;
112 if (copy_to_user(dest, &extent, sizeof(extent)))
113 return -EFAULT;
114
115 fieinfo->fi_extents_mapped++;
116 if (fieinfo->fi_extents_mapped == fieinfo->fi_extents_max)
117 return 1;
118 return (flags & FIEMAP_EXTENT_LAST) ? 1 : 0;
119 }
120
121 /**
122 * fiemap_fill_next_extent - Fiemap helper function
123 * @fieinfo: Fiemap context passed into ->fiemap
124 * @logical: Extent logical start offset, in bytes
125 * @phys: Extent physical start offset, in bytes
126 * @len: Extent length, in bytes
127 * @flags: FIEMAP_EXTENT flags that describe this extent
128 *
129 * Called from file system ->fiemap callback. Will populate extent
130 * info as passed in via arguments and copy to user memory. On
131 * success, extent count on fieinfo is incremented.
132 *
133 * Returns 0 on success, -errno on error, 1 if this was the last
134 * extent that will fit in user array.
135 */
136 int fiemap_fill_next_extent(struct fiemap_extent_info *fieinfo, u64 logical,
137 u64 phys, u64 len, u32 flags)
138 {
139 return fieinfo->fi_cb(fieinfo, logical, phys, len, flags);
140 }
141 EXPORT_SYMBOL(fiemap_fill_next_extent);
142
143 /**
144 * fiemap_check_flags - check validity of requested flags for fiemap
145 * @fieinfo: Fiemap context passed into ->fiemap
146 * @fs_flags: Set of fiemap flags that the file system understands
147 *
148 * Called from file system ->fiemap callback. This will compute the
149 * intersection of valid fiemap flags and those that the fs supports. That
150 * value is then compared against the user supplied flags. In case of bad user
151 * flags, the invalid values will be written into the fieinfo structure, and
152 * -EBADR is returned, which tells ioctl_fiemap() to return those values to
153 * userspace. For this reason, a return code of -EBADR should be preserved.
154 *
155 * Returns 0 on success, -EBADR on bad flags.
156 */
157 int fiemap_check_flags(struct fiemap_extent_info *fieinfo, u32 fs_flags)
158 {
159 u32 incompat_flags;
160
161 incompat_flags = fieinfo->fi_flags & ~(FIEMAP_FLAGS_COMPAT & fs_flags);
162 if (incompat_flags) {
163 fieinfo->fi_flags = incompat_flags;
164 return -EBADR;
165 }
166 return 0;
167 }
168 EXPORT_SYMBOL(fiemap_check_flags);
169
170 static int fiemap_check_ranges(struct super_block *sb,
171 u64 start, u64 len, u64 *new_len)
172 {
173 u64 maxbytes = (u64) sb->s_maxbytes;
174
175 *new_len = len;
176
177 if (len == 0)
178 return -EINVAL;
179
180 if (start > maxbytes)
181 return -EFBIG;
182
183 /*
184 * Shrink request scope to what the fs can actually handle.
185 */
186 if (len > maxbytes || (maxbytes - len) < start)
187 *new_len = maxbytes - start;
188
189 return 0;
190 }
191
192 static int ioctl_fiemap(struct file *filp, unsigned long arg)
193 {
194 struct fiemap fiemap;
195 struct fiemap __user *ufiemap = (struct fiemap __user *) arg;
196 struct fiemap_extent_info fieinfo = { 0, };
197 struct inode *inode = file_inode(filp);
198 struct super_block *sb = inode->i_sb;
199 u64 len;
200 int error;
201
202 if (!inode->i_op->fiemap)
203 return -EOPNOTSUPP;
204
205 if (copy_from_user(&fiemap, ufiemap, sizeof(fiemap)))
206 return -EFAULT;
207
208 if (fiemap.fm_extent_count > FIEMAP_MAX_EXTENTS)
209 return -EINVAL;
210
211 error = fiemap_check_ranges(sb, fiemap.fm_start, fiemap.fm_length,
212 &len);
213 if (error)
214 return error;
215
216 fieinfo.fi_flags = fiemap.fm_flags;
217 fieinfo.fi_extents_max = fiemap.fm_extent_count;
> 218 fieinfo.fi_cb_data = ufiemap->fm_extents;
219 fieinfo.fi_start = fiemap.fm_start;
220 fieinfo.fi_len = len;
221 fieinfo.fi_cb = fiemap_fill_user_extent;
222
223 if (fiemap.fm_extent_count != 0 &&
> 224 !access_ok(fieinfo.fi_cb_data,
225 fieinfo.fi_extents_max * sizeof(struct fiemap_extent)))
226 return -EFAULT;
227
228 if (fieinfo.fi_flags & FIEMAP_FLAG_SYNC)
229 filemap_write_and_wait(inode->i_mapping);
230
231 error = inode->i_op->fiemap(inode, &fieinfo);
232 fiemap.fm_flags = fieinfo.fi_flags;
233 fiemap.fm_mapped_extents = fieinfo.fi_extents_mapped;
234 if (copy_to_user(ufiemap, &fiemap, sizeof(fiemap)))
235 error = -EFAULT;
236
237 return error;
238 }
239
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
next prev parent reply other threads:[~2019-08-09 0:05 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-08 8:27 [PATCH 0/9 V5] New ->fiemap infrastructure and ->bmap removal Carlos Maiolino
2019-08-08 8:27 ` [PATCH 1/9] fs: Enable bmap() function to properly return errors Carlos Maiolino
2019-08-08 21:24 ` kbuild test robot
2019-08-14 11:14 ` Christoph Hellwig
2019-08-20 11:36 ` Carlos Maiolino
2019-08-08 8:27 ` [PATCH 2/9] cachefiles: drop direct usage of ->bmap method Carlos Maiolino
2019-08-14 11:15 ` Christoph Hellwig
2019-08-20 11:57 ` Carlos Maiolino
2019-08-20 12:50 ` David Howells
2019-08-29 7:13 ` Christoph Hellwig
2019-08-30 16:17 ` David Howells
2019-08-30 16:59 ` Christoph Hellwig
2019-08-31 0:45 ` David Howells
2019-09-05 22:44 ` Dave Chinner
2019-08-20 13:31 ` David Howells
2019-08-08 8:27 ` [PATCH 3/9] ecryptfs: drop direct calls to ->bmap Carlos Maiolino
2019-08-08 22:50 ` kbuild test robot
2019-08-08 8:27 ` [PATCH 4/9] fibmap: Use bmap instead of ->bmap method in ioctl_fibmap Carlos Maiolino
2019-08-08 20:38 ` kbuild test robot
2019-08-14 11:01 ` Carlos Maiolino
2019-08-14 11:08 ` Christoph Hellwig
2019-08-08 8:27 ` [PATCH 5/9] fs: Move start and length fiemap fields into fiemap_extent_info Carlos Maiolino
2019-08-08 20:21 ` kbuild test robot
2019-08-08 8:27 ` [PATCH 6/9] iomap: Remove length and start fields from iomap_fiemap Carlos Maiolino
2019-08-08 8:27 ` [PATCH 7/9] fiemap: Use a callback to fill fiemap extents Carlos Maiolino
2019-08-09 0:04 ` kbuild test robot [this message]
2019-08-14 11:16 ` Christoph Hellwig
2019-08-08 8:27 ` [PATCH 8/9] Use FIEMAP for FIBMAP calls Carlos Maiolino
2019-08-08 8:27 ` Carlos Maiolino
2019-08-09 1:56 ` kbuild test robot
2019-08-14 11:18 ` Christoph Hellwig
2019-08-20 13:01 ` Carlos Maiolino
2019-08-29 7:15 ` Christoph Hellwig
2019-09-10 12:28 ` Carlos Maiolino
2019-09-16 15:58 ` Darrick J. Wong
2019-08-08 8:27 ` [PATCH 9/9] xfs: Get rid of ->bmap Carlos Maiolino
-- strict thread matches above, loose matches on Subject: below --
2019-09-11 13:43 [PATCH 0/9 V6] New ->fiemap infrastructure and ->bmap removal Carlos Maiolino
2019-09-11 13:43 ` [PATCH 7/9] fiemap: Use a callback to fill fiemap extents Carlos Maiolino
2019-07-31 14:12 [PATCH 0/9 V4] New ->fiemap infrastructure and ->bmap removal Carlos Maiolino
2019-07-31 14:12 ` [PATCH 7/9] fiemap: Use a callback to fill fiemap extents Carlos Maiolino
2019-07-31 23:26 ` Darrick J. Wong
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=201908090808.UlvbBeuF%lkp@intel.com \
--to=lkp@intel.com \
--cc=adilger@dilger.ca \
--cc=cmaiolino@redhat.com \
--cc=darrick.wong@oracle.com \
--cc=hch@lst.de \
--cc=jaegeuk@kernel.org \
--cc=kbuild-all@01.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-xfs@vger.kernel.org \
--cc=miklos@szeredi.hu \
--cc=rpeterso@redhat.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).