diff options
Diffstat (limited to 'fs/dax.c')
-rw-r--r-- | fs/dax.c | 7 |
1 files changed, 6 insertions, 1 deletions
@@ -208,7 +208,12 @@ static ssize_t dax_io(struct inode *inode, struct iov_iter *iter, | |||
208 | dax.addr += first; | 208 | dax.addr += first; |
209 | size = map_len - first; | 209 | size = map_len - first; |
210 | } | 210 | } |
211 | max = min(pos + size, end); | 211 | /* |
212 | * pos + size is one past the last offset for IO, | ||
213 | * so pos + size can overflow loff_t at extreme offsets. | ||
214 | * Cast to u64 to catch this and get the true minimum. | ||
215 | */ | ||
216 | max = min_t(u64, pos + size, end); | ||
212 | } | 217 | } |
213 | 218 | ||
214 | if (iov_iter_rw(iter) == WRITE) { | 219 | if (iov_iter_rw(iter) == WRITE) { |