]> Pileus Git - ~andy/linux/blobdiff - ipc/util.c
Merge tag 'drm-intel-fixes-2014-02-14' of ssh://git.freedesktop.org/git/drm-intel...
[~andy/linux] / ipc / util.c
index 7afe7def52cfff757989ec6fe8a47fb795d50607..e1b4c6db8aa042d2a896426391b10af913ac7b4f 100644 (file)
@@ -139,19 +139,10 @@ __initcall(ipc_init);
  */
 void ipc_init_ids(struct ipc_ids *ids)
 {
-       init_rwsem(&ids->rwsem);
-
        ids->in_use = 0;
        ids->seq = 0;
        ids->next_id = -1;
-       {
-               int seq_limit = INT_MAX/SEQ_MULTIPLIER;
-               if (seq_limit > USHRT_MAX)
-                       ids->seq_max = USHRT_MAX;
-                else
-                       ids->seq_max = seq_limit;
-       }
-
+       init_rwsem(&ids->rwsem);
        idr_init(&ids->ipcs_idr);
 }
 
@@ -304,7 +295,7 @@ int ipc_addid(struct ipc_ids *ids, struct kern_ipc_perm *new, int size)
 
        if (next_id < 0) {
                new->seq = ids->seq++;
-               if (ids->seq > ids->seq_max)
+               if (ids->seq > IPCID_SEQ_MAX)
                        ids->seq = 0;
        } else {
                new->seq = ipcid_to_seqx(next_id);
@@ -911,8 +902,10 @@ static int sysvipc_proc_open(struct inode *inode, struct file *file)
                goto out;
 
        ret = seq_open(file, &sysvipc_proc_seqops);
-       if (ret)
-               goto out_kfree;
+       if (ret) {
+               kfree(iter);
+               goto out;
+       }
 
        seq = file->private_data;
        seq->private = iter;
@@ -921,9 +914,6 @@ static int sysvipc_proc_open(struct inode *inode, struct file *file)
        iter->ns    = get_ipc_ns(current->nsproxy->ipc_ns);
 out:
        return ret;
-out_kfree:
-       kfree(iter);
-       goto out;
 }
 
 static int sysvipc_proc_release(struct inode *inode, struct file *file)