Dave Kleikamp
ad3cba223a
nfs: don't dirty kernel pages read by direct-io
...
When we use direct_IO with an NFS backing store, we can trigger a
WARNING in __set_page_dirty(), as below, since we're dirtying the page
unnecessarily in nfs_direct_read_completion().
To fix, replicate the logic in commit 53cbf3b157a0 ("fs: direct-io:
don't dirtying pages for ITER_BVEC/ITER_KVEC direct read").
Other filesystems that implement direct_IO handle this; most use
blockdev_direct_IO(). ceph and cifs have similar logic.
mount 127.0.0.1:/export /nfs
dd if=/dev/zero of=/nfs/image bs=1M count=200
losetup --direct-io=on -f /nfs/image
mkfs.btrfs /dev/loop0
mount -t btrfs /dev/loop0 /mnt/
kernel: WARNING: CPU: 0 PID: 8067 at fs/buffer.c:580 __set_page_dirty+0xaf/0xd0
kernel: Modules linked in: loop(E) nfsv3(E) rpcsec_gss_krb5(E) nfsv4(E) dns_resolver(E) nfs(E) fscache(E) nfsd(E) auth_rpcgss(E) nfs_acl(E) lockd(E) grace(E) fuse(E) tun(E) ip6t_rpfilter(E) ipt_REJECT(E) nf_
kernel: snd_seq(E) snd_seq_device(E) snd_pcm(E) video(E) snd_timer(E) snd(E) soundcore(E) ip_tables(E) xfs(E) libcrc32c(E) sd_mod(E) sr_mod(E) cdrom(E) ata_generic(E) pata_acpi(E) crc32c_intel(E) ahci(E) li
kernel: CPU: 0 PID: 8067 Comm: kworker/0:2 Tainted: G E 4.20.0-rc1.master.20181111.ol7.x86_64 #1
kernel: Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006
kernel: Workqueue: nfsiod rpc_async_release [sunrpc]
kernel: RIP: 0010:__set_page_dirty+0xaf/0xd0
kernel: Code: c3 48 8b 02 f6 c4 04 74 d4 48 89 df e8 ba 05 f7 ff 48 89 c6 eb cb 48 8b 43 08 a8 01 75 1f 48 89 d8 48 8b 00 a8 04 74 02 eb 87 <0f> 0b eb 83 48 83 e8 01 eb 9f 48 83 ea 01 0f 1f 00 eb 8b 48 83 e8
kernel: RSP: 0000:ffffc1c8825b7d78 EFLAGS: 00013046
kernel: RAX: 000fffffc0020089 RBX: fffff2b603308b80 RCX: 0000000000000001
kernel: RDX: 0000000000000001 RSI: ffff9d11478115c8 RDI: ffff9d11478115d0
kernel: RBP: ffffc1c8825b7da0 R08: 0000646f6973666e R09: 8080808080808080
kernel: R10: 0000000000000001 R11: 0000000000000000 R12: ffff9d11478115d0
kernel: R13: ffff9d11478115c8 R14: 0000000000003246 R15: 0000000000000001
kernel: FS: 0000000000000000(0000) GS:ffff9d115ba00000(0000) knlGS:0000000000000000
kernel: CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
kernel: CR2: 00007f408686f640 CR3: 0000000104d8e004 CR4: 00000000000606f0
kernel: DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
kernel: DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
kernel: Call Trace:
kernel: __set_page_dirty_buffers+0xb6/0x110
kernel: set_page_dirty+0x52/0xb0
kernel: nfs_direct_read_completion+0xc4/0x120 [nfs]
kernel: nfs_pgio_release+0x10/0x20 [nfs]
kernel: rpc_free_task+0x30/0x70 [sunrpc]
kernel: rpc_async_release+0x12/0x20 [sunrpc]
kernel: process_one_work+0x174/0x390
kernel: worker_thread+0x4f/0x3e0
kernel: kthread+0x102/0x140
kernel: ? drain_workqueue+0x130/0x130
kernel: ? kthread_stop+0x110/0x110
kernel: ret_from_fork+0x35/0x40
kernel: ---[ end trace 01341980905412c9 ]---
Signed-off-by: Dave Kleikamp <dave.kleikamp@oracle.com>
Signed-off-by: Santosh Shilimkar <santosh.shilimkar@oracle.com>
[forward-ported to v4.20]
Signed-off-by: Calum Mackay <calum.mackay@oracle.com>
Reviewed-by: Dave Kleikamp <dave.kleikamp@oracle.com>
Reviewed-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
2018-12-02 09:43:56 -05:00
..
2018-11-01 19:58:52 -07:00
2018-08-22 10:52:51 -07:00
2018-05-28 12:36:41 +02:00
2018-11-30 10:47:50 -08:00
2018-08-22 12:34:08 -07:00
2018-06-15 18:10:01 -03:00
2018-11-03 10:09:38 -07:00
2018-11-28 08:38:20 -08:00
2018-11-30 16:00:58 +00:00
2018-11-08 17:51:11 +01:00
2018-11-02 14:09:42 -05:00
2018-06-05 16:57:31 -07:00
2018-07-17 06:14:07 -07:00
2018-10-30 12:46:25 -07:00
2018-09-04 11:35:03 +08:00
2018-06-12 20:52:16 -07:00
2018-08-21 23:54:17 -04:00
2018-10-24 00:41:07 +01:00
2018-10-09 23:33:17 -04:00
2018-07-22 14:13:44 +02:00
2018-10-18 02:04:59 -04:00
2018-11-23 09:08:17 -05:00
2018-11-27 10:21:15 +01:00
2018-11-11 16:53:02 -06:00
2018-10-28 11:35:40 -07:00
2018-10-31 08:54:14 -07:00
2018-05-22 14:27:51 -04:00
2018-11-30 15:57:31 +00:00
2018-11-09 15:52:17 +01:00
2018-11-16 11:38:14 -06:00
2018-11-30 14:56:14 -08:00
2018-11-30 14:56:14 -08:00
2018-08-17 16:20:28 -07:00
2018-08-25 12:42:33 -07:00
2018-08-22 10:52:44 -07:00
2018-09-29 22:47:48 -04:00
2018-10-05 18:44:40 -04:00
2018-10-24 11:22:39 +01:00
2018-09-20 09:28:49 -05:00
2018-10-26 16:26:33 -07:00
2018-10-29 16:58:04 -04:00
2018-05-22 14:27:52 -04:00
2018-12-02 09:43:56 -05:00
2018-03-27 13:18:09 -04:00
2018-11-08 12:11:45 -05:00
2018-11-05 14:57:05 -05:00
2018-11-08 15:43:48 +01:00
2018-10-12 22:46:50 -04:00
2018-11-30 14:56:15 -08:00
2018-05-22 14:27:58 -04:00
2018-05-22 14:27:57 -04:00
2018-11-01 19:58:52 -07:00
2018-11-02 09:33:08 -07:00
2018-11-01 11:46:27 -07:00
2018-11-30 09:03:15 -08:00
2018-05-22 14:27:52 -04:00
2018-05-22 14:27:54 -04:00
2018-08-22 18:17:48 +02:00
2018-10-31 08:54:14 -07:00
2018-05-22 14:27:55 -04:00
2018-08-02 09:34:02 -07:00
2018-08-18 11:44:53 -07:00
2018-11-10 08:02:40 -05:00
2018-07-31 11:32:44 -04:00
2018-10-23 13:49:02 +02:00
2018-11-19 10:27:59 +01:00
2018-08-17 16:20:27 -07:00
2018-11-21 10:10:53 -08:00
2018-11-17 10:05:07 -05:00
2018-07-12 10:04:27 -04:00
2018-07-03 16:44:45 -04:00
2018-07-12 10:04:20 -04:00
2018-04-11 10:28:37 -07:00
2018-06-12 16:19:22 -07:00
2018-10-03 16:47:43 +02:00
2018-04-11 10:28:37 -07:00
2018-07-10 23:29:03 -04:00
2018-10-24 00:40:44 +01:00
2018-11-02 11:25:48 -07:00
2018-08-27 14:48:48 +02:00
2018-10-29 14:29:58 -07:00
2018-06-05 19:23:26 +02:00
2018-10-03 16:47:43 +02:00
2018-03-29 15:07:46 -04:00
2018-11-19 09:40:58 -05:00
2018-10-31 08:54:16 -07:00
2018-04-02 20:15:39 +02:00
2018-11-30 08:35:14 -07:00
2018-06-28 10:40:47 -07:00
2018-08-22 10:52:49 -07:00
2018-11-19 11:28:10 +01:00
2018-10-03 16:47:43 +02:00
2018-08-21 18:19:09 -07:00
2018-04-02 20:16:00 +02:00
2018-05-16 07:23:35 +02:00
2018-10-21 10:46:42 -04:00
2018-11-18 10:15:09 -08:00
2018-08-21 18:19:09 -07:00
2018-11-02 09:33:08 -07:00
2018-11-21 10:10:54 -08:00
2018-06-11 08:22:34 -07:00
2018-08-02 08:06:55 +09:00
2018-03-30 11:34:55 -07:00
2018-08-21 18:19:09 -07:00
2018-06-11 08:22:34 -07:00
2018-06-12 16:19:22 -07:00
2018-08-17 16:20:29 -07:00
2018-08-23 18:48:43 -07:00
2018-11-12 01:02:34 -06:00
2018-08-21 18:19:09 -07:00
2018-08-13 19:58:36 -07:00
2018-11-21 10:10:54 -08:00
2018-04-02 20:16:02 +02:00
2018-08-27 14:48:48 +02:00
2018-08-17 16:20:28 -07:00
2018-10-03 16:47:43 +02:00
2018-10-24 00:41:07 +01:00
2018-08-29 15:42:20 +02:00
2018-07-12 14:49:48 +01:00
2018-09-03 15:14:01 +02:00
2018-04-04 12:44:02 -07:00
2018-08-27 14:48:48 +02:00
2018-11-30 14:56:14 -08:00
2018-08-29 15:42:23 +02:00
2018-09-18 07:30:48 -04:00