Skip to content

Commit

Permalink
Merge branch 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel…
Browse files Browse the repository at this point in the history
…/git/tytso/ext4

* 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4:
  ext4: Add EXT4_IOC_TRIM ioctl to handle batched discard
  fs: Do not dispatch FITRIM through separate super_operation
  ext4: ext4_fill_super shouldn't return 0 on corruption
  jbd2: fix /proc/fs/jbd2/<dev> when using an external journal
  ext4: missing unlock in ext4_clear_request_list()
  ext4: fix setting random pages PageUptodate
  • Loading branch information
Linus Torvalds committed Nov 20, 2010
2 parents 76db8ac + e681c04 commit b86db47
Show file tree
Hide file tree
Showing 6 changed files with 37 additions and 56 deletions.
24 changes: 24 additions & 0 deletions fs/ext4/ioctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -331,6 +331,30 @@ long ext4_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
return err;
}

case FITRIM:
{
struct super_block *sb = inode->i_sb;
struct fstrim_range range;
int ret = 0;

if (!capable(CAP_SYS_ADMIN))
return -EPERM;

if (copy_from_user(&range, (struct fstrim_range *)arg,
sizeof(range)))
return -EFAULT;

ret = ext4_trim_fs(sb, &range);
if (ret < 0)
return ret;

if (copy_to_user((struct fstrim_range *)arg, &range,
sizeof(range)))
return -EFAULT;

return 0;
}

default:
return -ENOTTY;
}
Expand Down
4 changes: 2 additions & 2 deletions fs/ext4/page-io.c
Original file line number Diff line number Diff line change
Expand Up @@ -237,8 +237,6 @@ static void ext4_end_bio(struct bio *bio, int error)
} while (bh != head);
}

put_io_page(io_end->pages[i]);

/*
* If this is a partial write which happened to make
* all buffers uptodate then we can optimize away a
Expand All @@ -248,6 +246,8 @@ static void ext4_end_bio(struct bio *bio, int error)
*/
if (!partial_write)
SetPageUptodate(page);

put_io_page(io_end->pages[i]);
}
io_end->num_io_pages = 0;
inode = io_end->inode;
Expand Down
9 changes: 3 additions & 6 deletions fs/ext4/super.c
Original file line number Diff line number Diff line change
Expand Up @@ -1197,7 +1197,6 @@ static const struct super_operations ext4_sops = {
.quota_write = ext4_quota_write,
#endif
.bdev_try_to_free_page = bdev_try_to_free_page,
.trim_fs = ext4_trim_fs
};

static const struct super_operations ext4_nojournal_sops = {
Expand Down Expand Up @@ -2799,9 +2798,6 @@ static void ext4_clear_request_list(void)
struct ext4_li_request *elr;

mutex_lock(&ext4_li_info->li_list_mtx);
if (list_empty(&ext4_li_info->li_request_list))
return;

list_for_each_safe(pos, n, &ext4_li_info->li_request_list) {
elr = list_entry(pos, struct ext4_li_request,
lr_request);
Expand Down Expand Up @@ -3268,13 +3264,14 @@ static int ext4_fill_super(struct super_block *sb, void *data, int silent)
* Test whether we have more sectors than will fit in sector_t,
* and whether the max offset is addressable by the page cache.
*/
ret = generic_check_addressable(sb->s_blocksize_bits,
err = generic_check_addressable(sb->s_blocksize_bits,
ext4_blocks_count(es));
if (ret) {
if (err) {
ext4_msg(sb, KERN_ERR, "filesystem"
" too large to mount safely on this system");
if (sizeof(sector_t) < 8)
ext4_msg(sb, KERN_WARNING, "CONFIG_LBDAF not enabled");
ret = err;
goto failed_mount;
}

Expand Down
39 changes: 0 additions & 39 deletions fs/ioctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -529,41 +529,6 @@ static int ioctl_fsthaw(struct file *filp)
return thaw_super(sb);
}

static int ioctl_fstrim(struct file *filp, void __user *argp)
{
struct super_block *sb = filp->f_path.dentry->d_inode->i_sb;
struct fstrim_range range;
int ret = 0;

if (!capable(CAP_SYS_ADMIN))
return -EPERM;

/* If filesystem doesn't support trim feature, return. */
if (sb->s_op->trim_fs == NULL)
return -EOPNOTSUPP;

/* If a blockdevice-backed filesystem isn't specified, return EINVAL. */
if (sb->s_bdev == NULL)
return -EINVAL;

if (argp == NULL) {
range.start = 0;
range.len = ULLONG_MAX;
range.minlen = 0;
} else if (copy_from_user(&range, argp, sizeof(range)))
return -EFAULT;

ret = sb->s_op->trim_fs(sb, &range);
if (ret < 0)
return ret;

if ((argp != NULL) &&
(copy_to_user(argp, &range, sizeof(range))))
return -EFAULT;

return 0;
}

/*
* When you add any new common ioctls to the switches above and below
* please update compat_sys_ioctl() too.
Expand Down Expand Up @@ -614,10 +579,6 @@ int do_vfs_ioctl(struct file *filp, unsigned int fd, unsigned int cmd,
error = ioctl_fsthaw(filp);
break;

case FITRIM:
error = ioctl_fstrim(filp, argp);
break;

case FS_IOC_FIEMAP:
return ioctl_fiemap(filp, arg);

Expand Down
16 changes: 8 additions & 8 deletions fs/jbd2/journal.c
Original file line number Diff line number Diff line change
Expand Up @@ -899,6 +899,14 @@ journal_t * jbd2_journal_init_dev(struct block_device *bdev,

/* journal descriptor can store up to n blocks -bzzz */
journal->j_blocksize = blocksize;
journal->j_dev = bdev;
journal->j_fs_dev = fs_dev;
journal->j_blk_offset = start;
journal->j_maxlen = len;
bdevname(journal->j_dev, journal->j_devname);
p = journal->j_devname;
while ((p = strchr(p, '/')))
*p = '!';
jbd2_stats_proc_init(journal);
n = journal->j_blocksize / sizeof(journal_block_tag_t);
journal->j_wbufsize = n;
Expand All @@ -908,14 +916,6 @@ journal_t * jbd2_journal_init_dev(struct block_device *bdev,
__func__);
goto out_err;
}
journal->j_dev = bdev;
journal->j_fs_dev = fs_dev;
journal->j_blk_offset = start;
journal->j_maxlen = len;
bdevname(journal->j_dev, journal->j_devname);
p = journal->j_devname;
while ((p = strchr(p, '/')))
*p = '!';

bh = __getblk(journal->j_dev, start, journal->j_blocksize);
if (!bh) {
Expand Down
1 change: 0 additions & 1 deletion include/linux/fs.h
Original file line number Diff line number Diff line change
Expand Up @@ -1612,7 +1612,6 @@ struct super_operations {
ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t);
#endif
int (*bdev_try_to_free_page)(struct super_block*, struct page*, gfp_t);
int (*trim_fs) (struct super_block *, struct fstrim_range *);
};

/*
Expand Down

0 comments on commit b86db47

Please sign in to comment.