mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-26 08:31:13 +00:00
shm: fix the filename of hugetlb sysv shared memory
Some user space tools need to identify SYSV shared memory when examining /proc/<pid>/maps. To do so they look for a block device with major zero, a dentry named SYSV<sysv key>, and having the minor of the internal sysv shared memory kernel mount. To help these tools and to make it easier for people just browsing /proc/<pid>/maps this patch modifies hugetlb sysv shared memory to use the SYSV<key> dentry naming convention. User space tools will still have to be aware that hugetlb sysv shared memory lives on a different internal kernel mount and so has a different block device minor number from the rest of sysv shared memory. Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Cc: "Serge E. Hallyn" <serge@hallyn.com> Cc: Albert Cahalan <acahalan@gmail.com> Cc: Badari Pulavarty <pbadari@us.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
22741925d2
commit
9d66586f77
3 changed files with 7 additions and 10 deletions
|
@ -736,15 +736,13 @@ static int can_do_hugetlb_shm(void)
|
||||||
can_do_mlock());
|
can_do_mlock());
|
||||||
}
|
}
|
||||||
|
|
||||||
struct file *hugetlb_zero_setup(size_t size)
|
struct file *hugetlb_file_setup(const char *name, size_t size)
|
||||||
{
|
{
|
||||||
int error = -ENOMEM;
|
int error = -ENOMEM;
|
||||||
struct file *file;
|
struct file *file;
|
||||||
struct inode *inode;
|
struct inode *inode;
|
||||||
struct dentry *dentry, *root;
|
struct dentry *dentry, *root;
|
||||||
struct qstr quick_string;
|
struct qstr quick_string;
|
||||||
char buf[16];
|
|
||||||
static atomic_t counter;
|
|
||||||
|
|
||||||
if (!hugetlbfs_vfsmount)
|
if (!hugetlbfs_vfsmount)
|
||||||
return ERR_PTR(-ENOENT);
|
return ERR_PTR(-ENOENT);
|
||||||
|
@ -756,8 +754,7 @@ struct file *hugetlb_zero_setup(size_t size)
|
||||||
return ERR_PTR(-ENOMEM);
|
return ERR_PTR(-ENOMEM);
|
||||||
|
|
||||||
root = hugetlbfs_vfsmount->mnt_root;
|
root = hugetlbfs_vfsmount->mnt_root;
|
||||||
snprintf(buf, 16, "%u", atomic_inc_return(&counter));
|
quick_string.name = name;
|
||||||
quick_string.name = buf;
|
|
||||||
quick_string.len = strlen(quick_string.name);
|
quick_string.len = strlen(quick_string.name);
|
||||||
quick_string.hash = 0;
|
quick_string.hash = 0;
|
||||||
dentry = d_alloc(root, &quick_string);
|
dentry = d_alloc(root, &quick_string);
|
||||||
|
|
|
@ -163,7 +163,7 @@ static inline struct hugetlbfs_sb_info *HUGETLBFS_SB(struct super_block *sb)
|
||||||
|
|
||||||
extern const struct file_operations hugetlbfs_file_operations;
|
extern const struct file_operations hugetlbfs_file_operations;
|
||||||
extern struct vm_operations_struct hugetlb_vm_ops;
|
extern struct vm_operations_struct hugetlb_vm_ops;
|
||||||
struct file *hugetlb_zero_setup(size_t);
|
struct file *hugetlb_file_setup(const char *name, size_t);
|
||||||
int hugetlb_get_quota(struct address_space *mapping);
|
int hugetlb_get_quota(struct address_space *mapping);
|
||||||
void hugetlb_put_quota(struct address_space *mapping);
|
void hugetlb_put_quota(struct address_space *mapping);
|
||||||
|
|
||||||
|
@ -185,7 +185,7 @@ static inline void set_file_hugepages(struct file *file)
|
||||||
|
|
||||||
#define is_file_hugepages(file) 0
|
#define is_file_hugepages(file) 0
|
||||||
#define set_file_hugepages(file) BUG()
|
#define set_file_hugepages(file) BUG()
|
||||||
#define hugetlb_zero_setup(size) ERR_PTR(-ENOSYS)
|
#define hugetlb_file_setup(name,size) ERR_PTR(-ENOSYS)
|
||||||
|
|
||||||
#endif /* !CONFIG_HUGETLBFS */
|
#endif /* !CONFIG_HUGETLBFS */
|
||||||
|
|
||||||
|
|
|
@ -366,9 +366,10 @@ static int newseg (struct ipc_namespace *ns, key_t key, int shmflg, size_t size)
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sprintf (name, "SYSV%08x", key);
|
||||||
if (shmflg & SHM_HUGETLB) {
|
if (shmflg & SHM_HUGETLB) {
|
||||||
/* hugetlb_zero_setup takes care of mlock user accounting */
|
/* hugetlb_file_setup takes care of mlock user accounting */
|
||||||
file = hugetlb_zero_setup(size);
|
file = hugetlb_file_setup(name, size);
|
||||||
shp->mlock_user = current->user;
|
shp->mlock_user = current->user;
|
||||||
} else {
|
} else {
|
||||||
int acctflag = VM_ACCOUNT;
|
int acctflag = VM_ACCOUNT;
|
||||||
|
@ -379,7 +380,6 @@ static int newseg (struct ipc_namespace *ns, key_t key, int shmflg, size_t size)
|
||||||
if ((shmflg & SHM_NORESERVE) &&
|
if ((shmflg & SHM_NORESERVE) &&
|
||||||
sysctl_overcommit_memory != OVERCOMMIT_NEVER)
|
sysctl_overcommit_memory != OVERCOMMIT_NEVER)
|
||||||
acctflag = 0;
|
acctflag = 0;
|
||||||
sprintf (name, "SYSV%08x", key);
|
|
||||||
file = shmem_file_setup(name, size, acctflag);
|
file = shmem_file_setup(name, size, acctflag);
|
||||||
}
|
}
|
||||||
error = PTR_ERR(file);
|
error = PTR_ERR(file);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue