[ Ancient code. But NeilB changed get_cred() recently so Smatch thinks it understands it now. - dan ] Hello Jeff Layton, The patch d3d4152a5d59: "nfs: make sillyrename an async operation" from Sep 17, 2010, leads to the following static checker warning: fs/nfs/unlink.c:351 nfs_async_rename() warn: 'data->cred' isn't an ERR_PTR fs/nfs/unlink.c 330 struct rpc_task * 331 nfs_async_rename(struct inode *old_dir, struct inode *new_dir, 332 struct dentry *old_dentry, struct dentry *new_dentry, 333 void (*complete)(struct rpc_task *, struct nfs_renamedata *)) 334 { 335 struct nfs_renamedata *data; 336 struct rpc_message msg = { }; 337 struct rpc_task_setup task_setup_data = { 338 .rpc_message = &msg, 339 .callback_ops = &nfs_rename_ops, 340 .workqueue = nfsiod_workqueue, 341 .rpc_client = NFS_CLIENT(old_dir), 342 .flags = RPC_TASK_ASYNC, 343 }; 344 345 data = kzalloc(sizeof(*data), GFP_KERNEL); 346 if (data == NULL) 347 return ERR_PTR(-ENOMEM); 348 task_setup_data.callback_data = data; 349 350 data->cred = get_current_cred(); 351 if (IS_ERR(data->cred)) { get_current_cred() always returns a valid pointer, I think? Can we just remove this condition? 352 struct rpc_task *task = ERR_CAST(data->cred); 353 kfree(data); 354 return task; 355 } regards, dan carpenter