diff options
-rw-r--r-- | fs/bcachefs/fs-io.c | 16 | ||||
-rw-r--r-- | fs/bcachefs/fs.c | 2 | ||||
-rw-r--r-- | fs/bcachefs/super-io.c | 12 | ||||
-rw-r--r-- | fs/bcachefs/super.c | 4 |
4 files changed, 11 insertions, 23 deletions
diff --git a/fs/bcachefs/fs-io.c b/fs/bcachefs/fs-io.c index a27f3749df5a..c7b70e1677e3 100644 --- a/fs/bcachefs/fs-io.c +++ b/fs/bcachefs/fs-io.c @@ -2497,12 +2497,7 @@ static __always_inline void bch2_dio_write_end(struct dio_write *dio) mutex_unlock(&inode->ei_quota_lock); } - if (likely(!bio_flagged(bio, BIO_NO_PAGE_REF))) { - struct folio_iter fi; - - bio_for_each_folio_all(fi, bio) - folio_put(fi.folio); - } + bio_release_pages(bio, false); if (unlikely(dio->op.error)) set_bit(EI_INODE_ERROR, &inode->ei_flags); @@ -2621,12 +2616,7 @@ out: err: dio->op.error = ret; - if (!bio_flagged(bio, BIO_NO_PAGE_REF)) { - struct folio_iter fi; - - bio_for_each_folio_all(fi, bio) - folio_put(fi.folio); - } + bio_release_pages(bio, false); bch2_quota_reservation_put(c, inode, &dio->quota_res); goto out; @@ -2752,7 +2742,6 @@ ssize_t bch2_write_iter(struct kiocb *iocb, struct iov_iter *from) } /* We can write back this queue in page reclaim */ - current->backing_dev_info = inode_to_bdi(&inode->v); inode_lock(&inode->v); ret = generic_write_checks(iocb, from); @@ -2772,7 +2761,6 @@ ssize_t bch2_write_iter(struct kiocb *iocb, struct iov_iter *from) iocb->ki_pos += ret; unlock: inode_unlock(&inode->v); - current->backing_dev_info = NULL; if (ret > 0) ret = generic_write_sync(iocb, ret); diff --git a/fs/bcachefs/fs.c b/fs/bcachefs/fs.c index 1c5b649fc5a9..b1bafbeae71d 100644 --- a/fs/bcachefs/fs.c +++ b/fs/bcachefs/fs.c @@ -1014,7 +1014,7 @@ static const struct file_operations bch_file_operations = { .mmap = bch2_mmap, .open = generic_file_open, .fsync = bch2_fsync, - .splice_read = generic_file_splice_read, + .splice_read = filemap_splice_read, .splice_write = iter_file_splice_write, .fallocate = bch2_fallocate_dispatch, .unlocked_ioctl = bch2_fs_file_ioctl, diff --git a/fs/bcachefs/super-io.c b/fs/bcachefs/super-io.c index 5a15d649d357..34889c157f0c 100644 --- a/fs/bcachefs/super-io.c +++ b/fs/bcachefs/super-io.c @@ -100,7 +100,7 @@ void bch2_free_super(struct bch_sb_handle *sb) { kfree(sb->bio); if (!IS_ERR_OR_NULL(sb->bdev)) - blkdev_put(sb->bdev, sb->mode); + blkdev_put(sb->bdev, sb); kfree(sb->sb); memset(sb, 0, sizeof(*sb)); @@ -595,22 +595,22 @@ int bch2_read_super(const char *path, struct bch_opts *opts, pr_verbose_init(*opts, ""); memset(sb, 0, sizeof(*sb)); - sb->mode = FMODE_READ; + sb->mode = BLK_OPEN_READ; sb->have_bio = true; if (!opt_get(*opts, noexcl)) - sb->mode |= FMODE_EXCL; + sb->mode |= BLK_OPEN_EXCL; if (!opt_get(*opts, nochanges)) - sb->mode |= FMODE_WRITE; + sb->mode |= BLK_OPEN_WRITE; - sb->bdev = blkdev_get_by_path(path, sb->mode, sb); + sb->bdev = blkdev_get_by_path(path, sb->mode, sb, NULL); if (IS_ERR(sb->bdev) && PTR_ERR(sb->bdev) == -EACCES && opt_get(*opts, read_only)) { sb->mode &= ~FMODE_WRITE; - sb->bdev = blkdev_get_by_path(path, sb->mode, sb); + sb->bdev = blkdev_get_by_path(path, sb->mode, sb, NULL); if (!IS_ERR(sb->bdev)) opt_set(*opts, nochanges, true); } diff --git a/fs/bcachefs/super.c b/fs/bcachefs/super.c index 2754f023032c..00c8998a1adf 100644 --- a/fs/bcachefs/super.c +++ b/fs/bcachefs/super.c @@ -1221,8 +1221,8 @@ static int __bch2_dev_attach_bdev(struct bch_dev *ca, struct bch_sb_handle *sb) /* Commit: */ ca->disk_sb = *sb; - if (sb->mode & FMODE_EXCL) - ca->disk_sb.bdev->bd_holder = ca; + if (sb->mode & BLK_OPEN_EXCL) + ca->disk_sb.bdev->bd_holder = &ca->disk_sb; memset(sb, 0, sizeof(*sb)); ca->dev = ca->disk_sb.bdev->bd_dev; |