diff options
Diffstat (limited to 'xlators/features/bit-rot/src/stub/bit-rot-stub.c')
-rw-r--r-- | xlators/features/bit-rot/src/stub/bit-rot-stub.c | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/xlators/features/bit-rot/src/stub/bit-rot-stub.c b/xlators/features/bit-rot/src/stub/bit-rot-stub.c index b9a527681ab..d48a3f751f3 100644 --- a/xlators/features/bit-rot/src/stub/bit-rot-stub.c +++ b/xlators/features/bit-rot/src/stub/bit-rot-stub.c @@ -1642,6 +1642,10 @@ br_stub_create_cbk (call_frame_t *frame, void *cookie, xlator_t *this, if (ret < 0) { ret = br_stub_init_inode_versions (this, fd, inode, version, _gf_true); + if (ret) { + op_ret = -1; + op_errno = EINVAL; + } } else { ctx = (br_stub_inode_ctx_t *)(long)ctx_addr; ret = br_stub_add_fd_to_inode (this, fd, ctx); @@ -1674,6 +1678,52 @@ unwind: return 0; } +int +br_stub_mknod_cbk (call_frame_t *frame, void *cookie, xlator_t *this, + int op_ret, int op_errno, inode_t *inode, + struct iatt *stbuf, struct iatt *preparent, + struct iatt *postparent, dict_t *xdata) +{ + int32_t ret = -1; + unsigned long version = BITROT_DEFAULT_CURRENT_VERSION; + + if (op_ret < 0) + goto unwind; + + ret = br_stub_init_inode_versions (this, NULL, inode, version, + _gf_true); + /** + * Like lookup, if init_inode_versions fail, return EINVAL + */ + if (ret) { + op_ret = -1; + op_errno = EINVAL; + } + +unwind: + STACK_UNWIND_STRICT (mknod, frame, op_ret, op_errno, + inode, stbuf, preparent, postparent, xdata); + return 0; +} + +int +br_stub_mknod (call_frame_t *frame, xlator_t *this, + loc_t *loc, mode_t mode, dev_t dev, mode_t umask, dict_t *xdata) +{ + GF_VALIDATE_OR_GOTO ("bit-rot-stub", this, unwind); + GF_VALIDATE_OR_GOTO (this->name, loc, unwind); + GF_VALIDATE_OR_GOTO (this->name, loc->inode, unwind); + + STACK_WIND (frame, br_stub_mknod_cbk, FIRST_CHILD (this), + FIRST_CHILD (this)->fops->mknod, + loc, mode, dev, umask, xdata); + return 0; +unwind: + STACK_UNWIND_STRICT (mknod, frame, -1, EINVAL, NULL, NULL, NULL, + NULL, NULL); + return 0; +} + /** }}} */ static inline int32_t @@ -2139,6 +2189,7 @@ struct xlator_fops fops = { .writev = br_stub_writev, .truncate = br_stub_truncate, .ftruncate = br_stub_ftruncate, + .mknod = br_stub_mknod, }; struct xlator_cbks cbks = { |