file: make close() more robust against concurrent calls
file: make close() more robust against concurrent calls

Calling close() concurrently, or calling close() and not waiting for it
complete before calling the destructor, is a serious bug.  However
the implementation makes it even more serious by allowing double ::close()
to be called on the same fd.  This can result in data corruption (again, in
illegal code only).

Make close() more robust by clearing _fd, so a subsequent close() or
destruction will ignore it.

avikivity/seastar,avikivity/seastar,cloudius-systems/seastar,syuu1228/seastar,cloudius-systems/seastar,scylladb/seastar,syuu1228/seastar,dreamsxin/seastar,avikivity/seastar,dreamsxin/seastar,scylladb/seastar,syuu1228/seastar,scylladb/seastar,cloudius-systems/seastar,dreamsxin/seastar