use fcntl to set FD_CLOSEXEC instead of type "e" in popen()

In glibc < 2.9 environment (rhel5), it dose not support type "e" in popen(), so
we should replace it by calling fcntl(xxx, FD_CLOSEXEC).

If pass NULL into pclose(), it would make program coredump, therefore add check
for argument.

Signed-off-by: Robin Dong <sanbai@taobao.com>
Signed-off-by: Liu Yuan <namei.unix@gmail.com>
fix error-io in sheepfs when using ext4 filesystem

When using ext4 filesystem on sheepfs volumes, it will print kern message:

	[171972.794292] io-error-guard: catch 1 continuous bio error.
	[171977.699795] io-error-guard: catch 2 continuous bio errors.
	[171977.707797] Aborting journal on device loop0-8.
	[171978.162038] EXT4-fs error (device loop0): ext4_journal_start_sb: Detected aborted journal
	[171978.170034] EXT4-fs (loop0): Remounting filesystem read-only

The reason is sheepfs process FLUSH opcode incorrectly. If the sheep daemon dose not
support FLUSH, sheepfs should explicitly set sheepfs_object_cache to 'false' and return
success, not return error.

Signed-off-by: Robin Dong <sanbai@taobao.com>
Signed-off-by: Liu Yuan <namei.unix@gmail.com>