@@ -20,27 +20,34 @@ struct netfs_io_request *netfs_alloc_request(struct address_space *mapping,
2020{
2121 static atomic_t debug_ids ;
2222 struct netfs_io_request * rreq ;
23+ int ret ;
2324
2425 rreq = kzalloc (sizeof (struct netfs_io_request ), GFP_KERNEL );
25- if (rreq ) {
26- rreq -> start = start ;
27- rreq -> len = len ;
28- rreq -> origin = origin ;
29- rreq -> netfs_ops = ops ;
30- rreq -> netfs_priv = netfs_priv ;
31- rreq -> mapping = mapping ;
32- rreq -> inode = file_inode (file );
33- rreq -> i_size = i_size_read (rreq -> inode );
34- rreq -> debug_id = atomic_inc_return (& debug_ids );
35- INIT_LIST_HEAD (& rreq -> subrequests );
36- INIT_WORK (& rreq -> work , netfs_rreq_work );
37- refcount_set (& rreq -> ref , 1 );
38- __set_bit (NETFS_RREQ_IN_PROGRESS , & rreq -> flags );
39- if (ops -> init_request )
40- ops -> init_request (rreq , file );
41- netfs_stat (& netfs_n_rh_rreq );
26+ if (!rreq )
27+ return ERR_PTR (- ENOMEM );
28+
29+ rreq -> start = start ;
30+ rreq -> len = len ;
31+ rreq -> origin = origin ;
32+ rreq -> netfs_ops = ops ;
33+ rreq -> netfs_priv = netfs_priv ;
34+ rreq -> mapping = mapping ;
35+ rreq -> inode = file_inode (file );
36+ rreq -> i_size = i_size_read (rreq -> inode );
37+ rreq -> debug_id = atomic_inc_return (& debug_ids );
38+ INIT_LIST_HEAD (& rreq -> subrequests );
39+ INIT_WORK (& rreq -> work , netfs_rreq_work );
40+ refcount_set (& rreq -> ref , 1 );
41+ __set_bit (NETFS_RREQ_IN_PROGRESS , & rreq -> flags );
42+ if (rreq -> netfs_ops -> init_request ) {
43+ ret = rreq -> netfs_ops -> init_request (rreq , file );
44+ if (ret < 0 ) {
45+ kfree (rreq );
46+ return ERR_PTR (ret );
47+ }
4248 }
4349
50+ netfs_stat (& netfs_n_rh_rreq );
4451 return rreq ;
4552}
4653
0 commit comments