OSDN Git Service

Merge tag 'for-5.18/write-streams-2022-03-18' of git://git.kernel.dk/linux-block
[uclinux-h8/linux.git] / fs / iomap / direct-io.c
index e2ba136..b08f5dc 100644 (file)
@@ -6,6 +6,7 @@
 #include <linux/module.h>
 #include <linux/compiler.h>
 #include <linux/fs.h>
+#include <linux/fscrypt.h>
 #include <linux/pagemap.h>
 #include <linux/iomap.h>
 #include <linux/backing-dev.h>
@@ -179,11 +180,14 @@ static void iomap_dio_bio_end_io(struct bio *bio)
 static void iomap_dio_zero(const struct iomap_iter *iter, struct iomap_dio *dio,
                loff_t pos, unsigned len)
 {
+       struct inode *inode = file_inode(dio->iocb->ki_filp);
        struct page *page = ZERO_PAGE(0);
        int flags = REQ_SYNC | REQ_IDLE;
        struct bio *bio;
 
        bio = bio_alloc(iter->iomap.bdev, 1, REQ_OP_WRITE | flags, GFP_KERNEL);
+       fscrypt_set_bio_crypt_ctx(bio, inode, pos >> inode->i_blkbits,
+                                 GFP_KERNEL);
        bio->bi_iter.bi_sector = iomap_sector(&iter->iomap, pos);
        bio->bi_private = dio;
        bio->bi_end_io = iomap_dio_bio_end_io;
@@ -308,8 +312,9 @@ static loff_t iomap_dio_bio_iter(const struct iomap_iter *iter,
                }
 
                bio = bio_alloc(iomap->bdev, nr_pages, bio_opf, GFP_KERNEL);
+               fscrypt_set_bio_crypt_ctx(bio, inode, pos >> inode->i_blkbits,
+                                         GFP_KERNEL);
                bio->bi_iter.bi_sector = iomap_sector(iomap, pos);
-               bio->bi_write_hint = dio->iocb->ki_hint;
                bio->bi_ioprio = dio->iocb->ki_ioprio;
                bio->bi_private = dio;
                bio->bi_end_io = iomap_dio_bio_end_io;