diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-10-23 08:49:34 +0300 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-10-23 08:49:34 +0300 |
commit | d888af9654ee33b74e5eb7cdb27f223645d872e9 (patch) | |
tree | 927f09532c93239697cf0ddeb49d3a550c323275 /fs | |
parent | e589db7a6a9c8f1557007f2cc765ee28ad7a1edd (diff) | |
parent | 4e7a4b01222343481d8ff084dbef9b80f7089a19 (diff) | |
download | lwn-d888af9654ee33b74e5eb7cdb27f223645d872e9.tar.gz lwn-d888af9654ee33b74e5eb7cdb27f223645d872e9.zip |
Merge tag 'jfs-3.7-2' of git://github.com/kleikamp/linux-shaggy
Pull jfs fix from Dave Kleikamp:
"Bug fix: Fix FITRIM argument handling"
* tag 'jfs-3.7-2' of git://github.com/kleikamp/linux-shaggy:
jfs: Fix FITRIM argument handling
Diffstat (limited to 'fs')
-rw-r--r-- | fs/jfs/jfs_discard.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/fs/jfs/jfs_discard.c b/fs/jfs/jfs_discard.c index 9947563e4175..dfcd50304559 100644 --- a/fs/jfs/jfs_discard.c +++ b/fs/jfs/jfs_discard.c @@ -83,7 +83,7 @@ int jfs_ioc_trim(struct inode *ip, struct fstrim_range *range) struct bmap *bmp = JFS_SBI(ip->i_sb)->bmap; struct super_block *sb = ipbmap->i_sb; int agno, agno_end; - s64 start, end, minlen; + u64 start, end, minlen; u64 trimmed = 0; /** @@ -93,15 +93,19 @@ int jfs_ioc_trim(struct inode *ip, struct fstrim_range *range) * minlen: minimum extent length in Bytes */ start = range->start >> sb->s_blocksize_bits; - if (start < 0) - start = 0; end = start + (range->len >> sb->s_blocksize_bits) - 1; - if (end >= bmp->db_mapsize) - end = bmp->db_mapsize - 1; minlen = range->minlen >> sb->s_blocksize_bits; - if (minlen <= 0) + if (minlen == 0) minlen = 1; + if (minlen > bmp->db_agsize || + start >= bmp->db_mapsize || + range->len < sb->s_blocksize) + return -EINVAL; + + if (end >= bmp->db_mapsize) + end = bmp->db_mapsize - 1; + /** * we trim all ag's within the range */ |