Excerpts from Paul Komkoff's message of 2011-01-19 14:58:28 -0500:
Hello.
[root@botva incoming]# btrfs fi defrag file-350mb
[root@botva incoming]# filefrag file-350mb
file-350mb: 132 extents found
The defrag code doesn't actually defrag. It opens up the file and
recows all the extents and then the delayed allocation code jumps in and
makes the biggest possible extent that it can.
The reason why you're still seeing extents after running the defrag
command is because the file hasn't been written yet, so the delayed
allocation code hasn't kicked in.
If you use btrfs fi defrag -f it'll trigger writeback on the file and
you should see the results of the defrag sooner.
-chris