ceph: switch some GFP_NOFS memory allocation to GFP_KERNEL
authorYan, Zheng <zyan@redhat.com>
Sat, 13 Jun 2015 09:27:05 +0000 (17:27 +0800)
committerIlya Dryomov <idryomov@gmail.com>
Thu, 25 Jun 2015 08:49:31 +0000 (11:49 +0300)
GFP_NOFS memory allocation is required for page writeback path.
But there is no need to use GFP_NOFS in syscall path and readpage
path

Signed-off-by: Yan, Zheng <zyan@redhat.com>
fs/ceph/acl.c
fs/ceph/addr.c
fs/ceph/dir.c
fs/ceph/file.c
fs/ceph/mds_client.c

index 64fa248343f65461db232ee4ae0939beff0fc05c..8f84646f10e9560ade100c1dafa180768f1d76de 100644 (file)
@@ -187,10 +187,10 @@ int ceph_pre_init_acls(struct inode *dir, umode_t *mode,
                val_size2 = posix_acl_xattr_size(default_acl->a_count);
 
        err = -ENOMEM;
-       tmp_buf = kmalloc(max(val_size1, val_size2), GFP_NOFS);
+       tmp_buf = kmalloc(max(val_size1, val_size2), GFP_KERNEL);
        if (!tmp_buf)
                goto out_err;
-       pagelist = kmalloc(sizeof(struct ceph_pagelist), GFP_NOFS);
+       pagelist = kmalloc(sizeof(struct ceph_pagelist), GFP_KERNEL);
        if (!pagelist)
                goto out_err;
        ceph_pagelist_init(pagelist);
index 7edf3c49e661a0148755cb8b065620e16a09165a..97102038fe037a3ab1a0d33c5f60cc085bf771f5 100644 (file)
@@ -350,7 +350,7 @@ static int start_read(struct inode *inode, struct list_head *page_list, int max)
 
        /* build page vector */
        nr_pages = calc_pages_for(0, len);
-       pages = kmalloc(sizeof(*pages) * nr_pages, GFP_NOFS);
+       pages = kmalloc(sizeof(*pages) * nr_pages, GFP_KERNEL);
        ret = -ENOMEM;
        if (!pages)
                goto out;
@@ -362,7 +362,7 @@ static int start_read(struct inode *inode, struct list_head *page_list, int max)
                dout("start_read %p adding %p idx %lu\n", inode, page,
                     page->index);
                if (add_to_page_cache_lru(page, &inode->i_data, page->index,
-                                         GFP_NOFS)) {
+                                         GFP_KERNEL)) {
                        ceph_fscache_uncache_page(inode, page);
                        page_cache_release(page);
                        dout("start_read %p add_to_page_cache failed %p\n",
index 424e23138c59c4a5d6c4366bae64464ae894a35f..b99f2ff8189db8255f90c6efbf17b3b8e5c32669 100644 (file)
@@ -38,7 +38,7 @@ int ceph_init_dentry(struct dentry *dentry)
        if (dentry->d_fsdata)
                return 0;
 
-       di = kmem_cache_alloc(ceph_dentry_cachep, GFP_NOFS | __GFP_ZERO);
+       di = kmem_cache_alloc(ceph_dentry_cachep, GFP_KERNEL | __GFP_ZERO);
        if (!di)
                return -ENOMEM;          /* oh well */
 
@@ -231,7 +231,7 @@ static int note_last_dentry(struct ceph_file_info *fi, const char *name,
                            int len)
 {
        kfree(fi->last_name);
-       fi->last_name = kmalloc(len+1, GFP_NOFS);
+       fi->last_name = kmalloc(len+1, GFP_KERNEL);
        if (!fi->last_name)
                return -ENOMEM;
        memcpy(fi->last_name, name, len);
@@ -342,7 +342,7 @@ more:
                req->r_direct_hash = ceph_frag_value(frag);
                req->r_direct_is_hash = true;
                if (fi->last_name) {
-                       req->r_path2 = kstrdup(fi->last_name, GFP_NOFS);
+                       req->r_path2 = kstrdup(fi->last_name, GFP_KERNEL);
                        if (!req->r_path2) {
                                ceph_mdsc_put_request(req);
                                return -ENOMEM;
@@ -764,7 +764,7 @@ static int ceph_symlink(struct inode *dir, struct dentry *dentry,
                err = PTR_ERR(req);
                goto out;
        }
-       req->r_path2 = kstrdup(dest, GFP_NOFS);
+       req->r_path2 = kstrdup(dest, GFP_KERNEL);
        if (!req->r_path2) {
                err = -ENOMEM;
                ceph_mdsc_put_request(req);
@@ -1189,7 +1189,7 @@ static ssize_t ceph_read_dir(struct file *file, char __user *buf, size_t size,
                return -EISDIR;
 
        if (!cf->dir_info) {
-               cf->dir_info = kmalloc(bufsize, GFP_NOFS);
+               cf->dir_info = kmalloc(bufsize, GFP_KERNEL);
                if (!cf->dir_info)
                        return -ENOMEM;
                cf->dir_info_len =
index 8a4eb4d21d3c587e606cf2fe251648c10d3c6804..424b5b540207f74822c60214d2150f307752eebe 100644 (file)
@@ -89,7 +89,7 @@ static int ceph_init_file(struct inode *inode, struct file *file, int fmode)
        case S_IFDIR:
                dout("init_file %p %p 0%o (regular)\n", inode, file,
                     inode->i_mode);
-               cf = kmem_cache_alloc(ceph_file_cachep, GFP_NOFS | __GFP_ZERO);
+               cf = kmem_cache_alloc(ceph_file_cachep, GFP_KERNEL | __GFP_ZERO);
                if (cf == NULL) {
                        ceph_put_fmode(ceph_inode(inode), fmode); /* clean up */
                        return -ENOMEM;
@@ -483,7 +483,7 @@ static ssize_t ceph_sync_read(struct kiocb *iocb, struct iov_iter *i,
                }
        } else {
                num_pages = calc_pages_for(off, len);
-               pages = ceph_alloc_page_vector(num_pages, GFP_NOFS);
+               pages = ceph_alloc_page_vector(num_pages, GFP_KERNEL);
                if (IS_ERR(pages))
                        return PTR_ERR(pages);
                ret = striped_read(inode, off, len, pages,
@@ -734,7 +734,7 @@ ceph_sync_write(struct kiocb *iocb, struct iov_iter *from, loff_t pos,
                 */
                num_pages = (len + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
 
-               pages = ceph_alloc_page_vector(num_pages, GFP_NOFS);
+               pages = ceph_alloc_page_vector(num_pages, GFP_KERNEL);
                if (IS_ERR(pages)) {
                        ret = PTR_ERR(pages);
                        goto out;
@@ -858,7 +858,7 @@ again:
                struct page *page = NULL;
                loff_t i_size;
                if (retry_op == READ_INLINE) {
-                       page = __page_cache_alloc(GFP_NOFS);
+                       page = __page_cache_alloc(GFP_KERNEL);
                        if (!page)
                                return -ENOMEM;
                }
index 8d73fe9d488b1768ecb9901771a832696b84046a..6aa07af67603ada211f49268d3845ea62b625720 100644 (file)
@@ -1668,7 +1668,8 @@ int ceph_alloc_readdir_reply_buffer(struct ceph_mds_request *req,
 
        order = get_order(size * num_entries);
        while (order >= 0) {
-               rinfo->dir_in = (void*)__get_free_pages(GFP_NOFS | __GFP_NOWARN,
+               rinfo->dir_in = (void*)__get_free_pages(GFP_KERNEL |
+                                                       __GFP_NOWARN,
                                                        order);
                if (rinfo->dir_in)
                        break;