But if a negative dentry does not yet exist, and a filename is requested for the first time, does it read from the fs?
The DDoS scenario would be doing GET requests of random nonexistent filenames. You could change the name at every step so that the check for a negative dentry is never a cache hit.