base: genlock: Add error messages for failure cases
Signed-off-by: Naomi Luis <nluis@codeaurora.org>
Change-Id: I833e480abfc11ce4aa00a5ae46144895429a0339
diff --git a/drivers/base/genlock.c b/drivers/base/genlock.c
index dcc1d28..7e25684 100644
--- a/drivers/base/genlock.c
+++ b/drivers/base/genlock.c
@@ -31,6 +31,9 @@
#define _RDLOCK GENLOCK_RDLOCK
#define _WRLOCK GENLOCK_WRLOCK
+#define GENLOCK_LOG_ERR(fmt, args...) \
+pr_err("genlock: %s: " fmt, __func__, ##args)
+
struct genlock {
struct list_head active; /* List of handles holding lock */
spinlock_t lock; /* Spinlock to protect the lock internals */
@@ -107,12 +110,16 @@
{
struct genlock *lock;
- if (handle->lock != NULL)
+ if (handle->lock != NULL) {
+ GENLOCK_LOG_ERR("Handle already has a lock attached\n");
return ERR_PTR(-EINVAL);
+ }
lock = kzalloc(sizeof(*lock), GFP_KERNEL);
- if (lock == NULL)
+ if (lock == NULL) {
+ GENLOCK_LOG_ERR("Unable to allocate memory for a lock\n");
return ERR_PTR(-ENOMEM);
+ }
INIT_LIST_HEAD(&lock->active);
init_waitqueue_head(&lock->queue);
@@ -145,8 +152,10 @@
{
int ret;
- if (lock->file == NULL)
+ if (!lock->file) {
+ GENLOCK_LOG_ERR("No file attached to the lock\n");
return -EINVAL;
+ }
ret = get_unused_fd_flags(0);
if (ret < 0)
@@ -168,12 +177,16 @@
struct file *file;
struct genlock *lock;
- if (handle->lock != NULL)
+ if (handle->lock != NULL) {
+ GENLOCK_LOG_ERR("Handle already has a lock attached\n");
return ERR_PTR(-EINVAL);
+ }
file = fget(fd);
- if (file == NULL)
+ if (file == NULL) {
+ GENLOCK_LOG_ERR("Bad file descriptor\n");
return ERR_PTR(-EBADF);
+ }
/*
* take a spinlock to avoid a race condition if the lock is
@@ -186,8 +199,10 @@
fput(file);
- if (lock == NULL)
+ if (lock == NULL) {
+ GENLOCK_LOG_ERR("File descriptor is invalid\n");
return ERR_PTR(-EINVAL);
+ }
handle->lock = lock;
kref_get(&lock->refcount);
@@ -231,13 +246,16 @@
spin_lock_irqsave(&lock->lock, irqflags);
- if (lock->state == _UNLOCKED)
+ if (lock->state == _UNLOCKED) {
+ GENLOCK_LOG_ERR("Trying to unlock an unlocked handle\n");
goto done;
+ }
/* Make sure this handle is an owner of the lock */
- if (!handle_has_lock(lock, handle))
+ if (!handle_has_lock(lock, handle)) {
+ GENLOCK_LOG_ERR("handle does not have lock attached to it\n");
goto done;
-
+ }
/* If the handle holds no more references to the lock then
release it (maybe) */
@@ -306,7 +324,8 @@
* Otherwise the user tried to turn a read into a write, and we
* don't allow that.
*/
-
+ GENLOCK_LOG_ERR("Trying to upgrade a read lock to a write"
+ "lock\n");
ret = -EINVAL;
goto done;
}
@@ -376,8 +395,10 @@
struct genlock *lock = handle->lock;
int ret = 0;
- if (lock == NULL)
+ if (lock == NULL) {
+ GENLOCK_LOG_ERR("Handle does not have a lock attached\n");
return -EINVAL;
+ }
switch (op) {
case GENLOCK_UNLOCK:
@@ -388,6 +409,7 @@
ret = _genlock_lock(lock, handle, op, flags, timeout);
break;
default:
+ GENLOCK_LOG_ERR("Invalid lock operation\n");
ret = -EINVAL;
break;
}
@@ -409,8 +431,10 @@
int ret = 0;
unsigned int ticks = msecs_to_jiffies(timeout);
- if (lock == NULL)
+ if (lock == NULL) {
+ GENLOCK_LOG_ERR("Handle does not have a lock attached\n");
return -EINVAL;
+ }
spin_lock_irqsave(&lock->lock, irqflags);
@@ -500,8 +524,10 @@
static struct genlock_handle *_genlock_get_handle(void)
{
struct genlock_handle *handle = kzalloc(sizeof(*handle), GFP_KERNEL);
- if (handle == NULL)
+ if (handle == NULL) {
+ GENLOCK_LOG_ERR("Unable to allocate memory for the handle\n");
return ERR_PTR(-ENOMEM);
+ }
return handle;
}
@@ -572,8 +598,11 @@
return 0;
}
case GENLOCK_IOC_EXPORT: {
- if (handle->lock == NULL)
+ if (handle->lock == NULL) {
+ GENLOCK_LOG_ERR("Handle does not have a lock"
+ "attached\n");
return -EINVAL;
+ }
ret = genlock_get_fd(handle->lock);
if (ret < 0)
@@ -618,6 +647,7 @@
return 0;
}
default:
+ GENLOCK_LOG_ERR("Invalid ioctl\n");
return -EINVAL;
}
}