storage/posix: Check for path before logging it in case of an error in xattrop FOP.

Signed-off-by: Pavan Vilas Sondur <pavan@gluster.com>
Signed-off-by: Anand V. Avati <avati@dev.gluster.com>

BUG: 614 (GlusterFS crashes while printing error if fsetxattr call fails in posix)
URL: http://bugs.gluster.com/cgi-bin/bugzilla3/show_bug.cgi?id=614
This commit is contained in:
Pavan Sondur 2010-02-22 05:17:28 +00:00 committed by Anand V. Avati
parent a748fd6bfe
commit 96ed73c155

View File

@ -3677,7 +3677,6 @@ do_xattrop (call_frame_t *frame, xlator_t *this,
path = strdup (loc->path);
inode = loc->inode;
} else {
inode_path (fd->inode, NULL, &path);
inode = fd->inode;
}
@ -3704,10 +3703,16 @@ do_xattrop (call_frame_t *frame, xlator_t *this,
"Extended attributes not "
"supported by filesystem");
} else {
gf_log (this->name, GF_LOG_ERROR,
"getxattr failed on %s while doing "
"xattrop: %s", path,
strerror (op_errno));
if (loc)
gf_log (this->name, GF_LOG_ERROR,
"getxattr failed on %s while doing "
"xattrop: %s", path,
strerror (op_errno));
else
gf_log (this->name, GF_LOG_ERROR,
"fgetxattr failed on fd=%d while doing "
"xattrop: %s", _fd,
strerror (op_errno));
}
op_ret = -1;
@ -3747,10 +3752,17 @@ do_xattrop (call_frame_t *frame, xlator_t *this,
op_errno = errno;
if (size == -1) {
gf_log (this->name, GF_LOG_ERROR,
"setxattr failed on %s while doing xattrop: "
"key=%s (%s)", path,
trav->key, strerror (op_errno));
if (loc)
gf_log (this->name, GF_LOG_ERROR,
"setxattr failed on %s while doing xattrop: "
"key=%s (%s)", path,
trav->key, strerror (op_errno));
else
gf_log (this->name, GF_LOG_ERROR,
"fsetxattr failed on fd=%d while doing xattrop: "
"key=%s (%s)", _fd,
trav->key, strerror (op_errno));
op_ret = -1;
goto out;
} else {
@ -3758,10 +3770,17 @@ do_xattrop (call_frame_t *frame, xlator_t *this,
trav->value->len);
if (size != 0) {
gf_log (this->name, GF_LOG_DEBUG,
"dict_set_bin failed (path=%s): "
"key=%s (%s)", path,
trav->key, strerror (-size));
if (loc)
gf_log (this->name, GF_LOG_DEBUG,
"dict_set_bin failed (path=%s): "
"key=%s (%s)", path,
trav->key, strerror (-size));
else
gf_log (this->name, GF_LOG_DEBUG,
"dict_set_bin failed (fd=%d): "
"key=%s (%s)", _fd,
trav->key, strerror (-size));
op_ret = -1;
op_errno = EINVAL;
goto out;