diff options
author | Shehjar Tikoo <shehjart@zresearch.com> | 2009-05-05 15:59:40 +0530 |
---|---|---|
committer | Anand V. Avati <avati@amp.gluster.com> | 2009-05-05 17:43:03 +0530 |
commit | f0bef18b788c8beadc4131c5a6534761857c7f46 (patch) | |
tree | fa9aa6116d2990a4b0ee7bd5744a3d955cc80367 /booster | |
parent | d470dd599c8dbf609411e52e587ea5c171214b21 (diff) |
booster: Support VMP-based creat
Signed-off-by: Anand V. Avati <avati@amp.gluster.com>
Diffstat (limited to 'booster')
-rw-r--r-- | booster/src/booster.c | 48 |
1 files changed, 47 insertions, 1 deletions
diff --git a/booster/src/booster.c b/booster/src/booster.c index 026e03ce..dd157f78 100644 --- a/booster/src/booster.c +++ b/booster/src/booster.c @@ -631,9 +631,54 @@ open64 (const char *pathname, int flags, ...) #endif int +vmp_creat (const char *pathname, mode_t mode) +{ + int fd = -1; + glusterfs_file_t fh = NULL; + + fh = glusterfs_creat (pathname, mode); + if (!fh) + goto out; + + fd = booster_get_process_fd (); + if (fd == -1) + goto close_out; + + if ((booster_get_unused_fd (booster_glfs_fdtable, fh, fd)) == -1) + goto real_close_out; + + return fd; + +real_close_out: + real_close (fd); + fd = -1; + +close_out: + glusterfs_close (fh); + +out: + return -1; +} + +int creat (const char *pathname, mode_t mode) { - int ret; + int ret = -1; + if (!pathname) { + errno = EINVAL; + goto out; + } + + ret = vmp_creat (pathname, mode); + + if (((ret == -1) && (errno != ENODEV)) || (ret > 0)) + goto out; + + if (real_creat == NULL) { + errno = ENOSYS; + ret = -1; + goto out; + } ret = real_creat (pathname, mode); @@ -641,6 +686,7 @@ creat (const char *pathname, mode_t mode) do_open (ret, GF_O_WRONLY | GF_O_TRUNC, mode); } +out: return ret; } |