- ret = -ENOMEM;
- newowner = key_user_lookup(uid);
- if (!newowner)
- goto error_put;
-
- /* transfer the quota burden to the new user */
- if (test_bit(KEY_FLAG_IN_QUOTA, &key->flags)) {
- spin_lock(&newowner->lock);
- if (newowner->qnkeys + 1 >= KEYQUOTA_MAX_KEYS ||
- newowner->qnbytes + key->quotalen >=
- KEYQUOTA_MAX_BYTES)
- goto quota_overrun;
-
- newowner->qnkeys++;
- newowner->qnbytes += key->quotalen;
- spin_unlock(&newowner->lock);
-
- spin_lock(&key->user->lock);
- key->user->qnkeys--;
- key->user->qnbytes -= key->quotalen;
- spin_unlock(&key->user->lock);
- }
-
- atomic_dec(&key->user->nkeys);
- atomic_inc(&newowner->nkeys);
-
- if (test_bit(KEY_FLAG_INSTANTIATED, &key->flags)) {
- atomic_dec(&key->user->nikeys);
- atomic_inc(&newowner->nikeys);
- }
-
- zapowner = key->user;
- key->user = newowner;
- key->uid = uid;