diff options
| author | Raghavendra G <raghavendra@gluster.com> | 2009-11-18 01:16:12 +0000 | 
|---|---|---|
| committer | Anand V. Avati <avati@dev.gluster.com> | 2009-11-18 21:14:16 -0800 | 
| commit | a0c05848d2ed0b0600d73214594a161cbb42302c (patch) | |
| tree | 68c8502f64ee8bbd435d344c7630e3012add686d /booster | |
| parent | a33380068a9ab9eea80a6d0b6207d9e3cc9bdff4 (diff) | |
booster: implement ftruncate64.
Signed-off-by: Raghavendra G <raghavendra@gluster.com>
Signed-off-by: Anand V. Avati <avati@dev.gluster.com>
BUG: 369 (Samba does not work with booster.)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=369
Diffstat (limited to 'booster')
| -rw-r--r-- | booster/src/booster.c | 34 | 
1 files changed, 33 insertions, 1 deletions
diff --git a/booster/src/booster.c b/booster/src/booster.c index c8414eca9..98f910413 100644 --- a/booster/src/booster.c +++ b/booster/src/booster.c @@ -141,6 +141,7 @@ static int (*real_fchmod) (int fd, mode_t mode);  static int (*real_fchown) (int fd, uid_t, gid_t gid);  static int (*real_fsync) (int fd);  static int (*real_ftruncate) (int fd, off_t length); +static int (*real_ftruncate64) (int fd, loff_t length);  static int (*real_link) (const char *oldpath, const char *newname);  static int (*real_rename) (const char *oldpath, const char *newpath);  static int (*real_utimes) (const char *path, const struct timeval times[2]); @@ -1266,8 +1267,13 @@ fsync (int fd)          return ret;  } +int __REDIRECT (booster_false_ftruncate, (int fd, off_t length), +                ftruncate); +int __REDIRECT (booster_false_ftruncate64, (int fd, loff_t length), +                ftruncate64); +  int -ftruncate (int fd, off_t length) +booster_false_ftruncate (int fd, off_t length)  {          int                     ret = -1;          glusterfs_file_t        fh = NULL; @@ -1292,6 +1298,31 @@ ftruncate (int fd, off_t length)  }  int +booster_false_ftruncate64 (int fd, loff_t length) +{ +        int                     ret = -1; +        glusterfs_file_t        fh = NULL; + +        gf_log ("booster", GF_LOG_TRACE, "ftruncate: fd %d, length: %"PRIu64,fd +                , length); +        fh = booster_fdptr_get (booster_fdtable, fd); +        if (!fh) { +                gf_log ("booster", GF_LOG_TRACE, "Not a booster fd"); +                if (real_ftruncate == NULL) { +                        errno = ENOSYS; +                        ret = -1; +                } else +                        ret = real_ftruncate64 (fd, length); +        } else { +                gf_log ("booster", GF_LOG_TRACE, "Is a booster fd"); +                ret = glusterfs_ftruncate (fh, length); +                booster_fdptr_put (fh); +        } + +        return ret; +} + +int  link (const char *old, const char *new)  {          int             ret = -1; @@ -2830,6 +2861,7 @@ booster_lib_init (void)          RESOLVE (fchown);          RESOLVE (fsync);          RESOLVE (ftruncate); +        RESOLVE (ftruncate64);          RESOLVE (link);          RESOLVE (rename);          RESOLVE (utimes);  | 
