Merge tag 'for-linus-5.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rw...
[linux-2.6-microblaze.git] / drivers / block / loop.c
index 121f96d..084f9b8 100644 (file)
@@ -190,8 +190,8 @@ static void __loop_update_dio(struct loop_device *lo, bool dio)
         */
        if (dio) {
                if (queue_logical_block_size(lo->lo_queue) >= sb_bsize &&
-                               !(lo->lo_offset & dio_align) &&
-                               mapping->a_ops->direct_IO)
+                   !(lo->lo_offset & dio_align) &&
+                   (file->f_mode & FMODE_CAN_ODIRECT))
                        use_dio = true;
                else
                        use_dio = false;
@@ -1821,12 +1821,14 @@ static blk_status_t loop_queue_rq(struct blk_mq_hw_ctx *hctx,
        cmd->blkcg_css = NULL;
        cmd->memcg_css = NULL;
 #ifdef CONFIG_BLK_CGROUP
-       if (rq->bio && rq->bio->bi_blkg) {
-               cmd->blkcg_css = &bio_blkcg(rq->bio)->css;
+       if (rq->bio) {
+               cmd->blkcg_css = bio_blkcg_css(rq->bio);
 #ifdef CONFIG_MEMCG
-               cmd->memcg_css =
-                       cgroup_get_e_css(cmd->blkcg_css->cgroup,
-                                       &memory_cgrp_subsys);
+               if (cmd->blkcg_css) {
+                       cmd->memcg_css =
+                               cgroup_get_e_css(cmd->blkcg_css->cgroup,
+                                               &memory_cgrp_subsys);
+               }
 #endif
        }
 #endif