#include <linux/falloc.h>
 #include <linux/sched/mm.h>
 #include <trace/events/fscache.h>
+#include <trace/events/netfs.h>
 #include "internal.h"
 
 struct cachefiles_kiocb {
        if (!fscache_wait_for_operation(cres, FSCACHE_WANT_WRITE)) {
                if (term_func)
                        term_func(term_func_priv, -ENOBUFS, false);
+               trace_netfs_sreq(term_func_priv, netfs_sreq_trace_cache_nowrite);
                return -ENOBUFS;
        }
 
                iov_iter_truncate(&subreq->io_iter, len);
        }
 
+       trace_netfs_sreq(subreq, netfs_sreq_trace_cache_prepare);
        cachefiles_begin_secure(cache, &saved_cred);
        ret = __cachefiles_prepare_write(object, cachefiles_cres_file(cres),
                                         &start, &len, len, true);
                return;
        }
 
+       trace_netfs_sreq(subreq, netfs_sreq_trace_cache_write);
        cachefiles_write(&subreq->rreq->cache_resources,
                         subreq->start, &subreq->io_iter,
                         netfs_write_subrequest_terminated, subreq);
 
 #define netfs_sreq_traces                                      \
        EM(netfs_sreq_trace_add_donations,      "+DON ")        \
        EM(netfs_sreq_trace_added,              "ADD  ")        \
+       EM(netfs_sreq_trace_cache_nowrite,      "CA-NW")        \
+       EM(netfs_sreq_trace_cache_prepare,      "CA-PR")        \
+       EM(netfs_sreq_trace_cache_write,        "CA-WR")        \
        EM(netfs_sreq_trace_clear,              "CLEAR")        \
        EM(netfs_sreq_trace_discard,            "DSCRD")        \
        EM(netfs_sreq_trace_donate_to_prev,     "DON-P")        \