Hi cuilifei, [auto build test WARNING on fuse/for-next] [also build test WARNING on v4.9-rc7 next-20161202] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/cuilifei/fuse-freezing-abort-when-use-wait_event_killable-_exclusive/20161202-221508 base: https://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse.git for-next config: m68k-sun3_defconfig (attached as .config) compiler: m68k-linux-gcc (GCC) 4.9.0 reproduce: wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=m68k All warnings (new ones prefixed by >>): fs/fuse/dev.c: In function '__fuse_get_req': fs/fuse/dev.c:31:4: error: 'ret' undeclared (first use in this function) ret = wait_event_interruptible_exclusive(wq, \ ^ >> fs/fuse/dev.c:175:10: note: in expansion of macro 'wait_fatal_freezable' intr = wait_fatal_freezable(fc->blocked_waitq, ^ fs/fuse/dev.c:31:4: note: each undeclared identifier is reported only once for each function it appears in ret = wait_event_interruptible_exclusive(wq, \ ^ >> fs/fuse/dev.c:175:10: note: in expansion of macro 'wait_fatal_freezable' intr = wait_fatal_freezable(fc->blocked_waitq, ^ fs/fuse/dev.c:175:3: error: implicit declaration of function 'freezing' [-Werror=implicit-function-declaration] intr = wait_fatal_freezable(fc->blocked_waitq, ^ fs/fuse/dev.c:175:3: error: implicit declaration of function 'try_to_freeze' [-Werror=implicit-function-declaration] fs/fuse/dev.c: In function 'request_wait_answer': fs/fuse/dev.c:31:4: error: 'ret' undeclared (first use in this function) ret = wait_event_interruptible_exclusive(wq, \ ^ fs/fuse/dev.c:468:9: note: in expansion of macro 'wait_fatal_freezable' err = wait_fatal_freezable(req->waitq, ^ cc1: some warnings being treated as errors vim +/wait_fatal_freezable +175 fs/fuse/dev.c 25 26 #define wait_fatal_freezable(wq, condition, exclusive) \ 27 ({ \ 28 int __ret = 0; \ 29 do { \ 30 if (exclusive) \ > 31 ret = wait_event_interruptible_exclusive(wq, \ 32 condition); \ 33 else \ 34 ret = wait_event_interruptible(wq, condition); \ 35 if (!__ret || fatal_signal_pending(current)) \ 36 break; \ 37 if (!freezing(current)) \ 38 continue; \ 39 } while (try_to_freeze()); \ 40 __ret; \ 41 }) 42 43 static struct kmem_cache *fuse_req_cachep; 44 45 static struct fuse_dev *fuse_get_dev(struct file *file) 46 { 47 /* 48 * Lockless access is OK, because file->private data is set 49 * once during mount and is valid until the file is released. 50 */ 51 return ACCESS_ONCE(file->private_data); 52 } 53 54 static void fuse_request_init(struct fuse_req *req, struct page **pages, 55 struct fuse_page_desc *page_descs, 56 unsigned npages) 57 { 58 memset(req, 0, sizeof(*req)); 59 memset(pages, 0, sizeof(*pages) * npages); 60 memset(page_descs, 0, sizeof(*page_descs) * npages); 61 INIT_LIST_HEAD(&req->list); 62 INIT_LIST_HEAD(&req->intr_entry); 63 init_waitqueue_head(&req->waitq); 64 atomic_set(&req->count, 1); 65 req->pages = pages; 66 req->page_descs = page_descs; 67 req->max_pages = npages; 68 __set_bit(FR_PENDING, &req->flags); 69 } 70 71 static struct fuse_req *__fuse_request_alloc(unsigned npages, gfp_t flags) 72 { 73 struct fuse_req *req = kmem_cache_alloc(fuse_req_cachep, flags); 74 if (req) { 75 struct page **pages; 76 struct fuse_page_desc *page_descs; 77 78 if (npages <= FUSE_REQ_INLINE_PAGES) { 79 pages = req->inline_pages; 80 page_descs = req->inline_page_descs; 81 } else { 82 pages = kmalloc(sizeof(struct page *) * npages, flags); 83 page_descs = kmalloc(sizeof(struct fuse_page_desc) * 84 npages, flags); 85 } 86 87 if (!pages || !page_descs) { 88 kfree(pages); 89 kfree(page_descs); 90 kmem_cache_free(fuse_req_cachep, req); 91 return NULL; 92 } 93 94 fuse_request_init(req, pages, page_descs, npages); 95 } 96 return req; 97 } 98 99 struct fuse_req *fuse_request_alloc(unsigned npages) 100 { 101 return __fuse_request_alloc(npages, GFP_KERNEL); 102 } 103 EXPORT_SYMBOL_GPL(fuse_request_alloc); 104 105 struct fuse_req *fuse_request_alloc_nofs(unsigned npages) 106 { 107 return __fuse_request_alloc(npages, GFP_NOFS); 108 } 109 110 void fuse_request_free(struct fuse_req *req) 111 { 112 if (req->pages != req->inline_pages) { 113 kfree(req->pages); 114 kfree(req->page_descs); 115 } 116 kmem_cache_free(fuse_req_cachep, req); 117 } 118 119 static void block_sigs(sigset_t *oldset) 120 { 121 sigset_t mask; 122 123 siginitsetinv(&mask, sigmask(SIGKILL)); 124 sigprocmask(SIG_BLOCK, &mask, oldset); 125 } 126 127 static void restore_sigs(sigset_t *oldset) 128 { 129 sigprocmask(SIG_SETMASK, oldset, NULL); 130 } 131 132 void __fuse_get_request(struct fuse_req *req) 133 { 134 atomic_inc(&req->count); 135 } 136 137 /* Must be called with > 1 refcount */ 138 static void __fuse_put_request(struct fuse_req *req) 139 { 140 BUG_ON(atomic_read(&req->count) < 2); 141 atomic_dec(&req->count); 142 } 143 144 static void fuse_req_init_context(struct fuse_req *req) 145 { 146 req->in.h.uid = from_kuid_munged(&init_user_ns, current_fsuid()); 147 req->in.h.gid = from_kgid_munged(&init_user_ns, current_fsgid()); 148 req->in.h.pid = current->pid; 149 } 150 151 void fuse_set_initialized(struct fuse_conn *fc) 152 { 153 /* Make sure stores before this are seen on another CPU */ 154 smp_wmb(); 155 fc->initialized = 1; 156 } 157 158 static bool fuse_block_alloc(struct fuse_conn *fc, bool for_background) 159 { 160 return !fc->initialized || (for_background && fc->blocked); 161 } 162 163 static struct fuse_req *__fuse_get_req(struct fuse_conn *fc, unsigned npages, 164 bool for_background) 165 { 166 struct fuse_req *req; 167 sigset_t oldset; 168 int intr; 169 int err; 170 atomic_inc(&fc->num_waiting); 171 172 if (fuse_block_alloc(fc, for_background)) { 173 err = -EINTR; 174 block_sigs(&oldset); > 175 intr = wait_fatal_freezable(fc->blocked_waitq, 176 !fuse_block_alloc(fc, for_background), true); 177 restore_sigs(&oldset); 178 if (intr) --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
.config.gz
Description: application/gzip