diff options
Diffstat (limited to 'ipc/shm.c')
| -rw-r--r-- | ipc/shm.c | 11 | 
1 files changed, 6 insertions, 5 deletions
diff --git a/ipc/shm.c b/ipc/shm.c index be3ec9ae454..cb858df061d 100644 --- a/ipc/shm.c +++ b/ipc/shm.c @@ -193,7 +193,7 @@ static void shm_destroy(struct ipc_namespace *ns, struct shmid_kernel *shp)  	if (!is_file_hugepages(shp->shm_file))  		shmem_lock(shp->shm_file, 0, shp->mlock_user);  	else if (shp->mlock_user) -		user_shm_unlock(shp->shm_file->f_path.dentry->d_inode->i_size, +		user_shm_unlock(file_inode(shp->shm_file)->i_size,  						shp->mlock_user);  	fput (shp->shm_file);  	security_shm_free(shp); @@ -529,7 +529,7 @@ static int newseg(struct ipc_namespace *ns, struct ipc_params *params)  	 * shmid gets reported as "inode#" in /proc/pid/maps.  	 * proc-ps tools use this. Changing this will break them.  	 */ -	file->f_dentry->d_inode->i_ino = shp->shm_perm.id; +	file_inode(file)->i_ino = shp->shm_perm.id;  	ns->shm_tot += numpages;  	error = shp->shm_perm.id; @@ -678,7 +678,7 @@ static void shm_add_rss_swap(struct shmid_kernel *shp,  {  	struct inode *inode; -	inode = shp->shm_file->f_path.dentry->d_inode; +	inode = file_inode(shp->shm_file);  	if (is_file_hugepages(shp->shm_file)) {  		struct address_space *mapping = inode->i_mapping; @@ -1042,7 +1042,8 @@ long do_shmat(int shmid, char __user *shmaddr, int shmflg, ulong *raddr,  			  is_file_hugepages(shp->shm_file) ?  				&shm_file_operations_huge :  				&shm_file_operations); -	if (!file) +	err = PTR_ERR(file); +	if (IS_ERR(file))  		goto out_free;  	file->private_data = sfd; @@ -1175,7 +1176,7 @@ SYSCALL_DEFINE1(shmdt, char __user *, shmaddr)  			(vma->vm_start - addr)/PAGE_SIZE == vma->vm_pgoff) { -			size = vma->vm_file->f_path.dentry->d_inode->i_size; +			size = file_inode(vma->vm_file)->i_size;  			do_munmap(mm, vma->vm_start, vma->vm_end - vma->vm_start);  			/*  			 * We discovered the size of the shm segment, so  |