diff options
Diffstat (limited to 'net/9p/client.c')
| -rw-r--r-- | net/9p/client.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/net/9p/client.c b/net/9p/client.c index 4ff068e98f76..5e97118da3bf 100644 --- a/net/9p/client.c +++ b/net/9p/client.c | |||
| @@ -1303,6 +1303,65 @@ error: | |||
| 1303 | } | 1303 | } |
| 1304 | EXPORT_SYMBOL(p9_client_stat); | 1304 | EXPORT_SYMBOL(p9_client_stat); |
| 1305 | 1305 | ||
| 1306 | struct p9_stat_dotl *p9_client_getattr_dotl(struct p9_fid *fid, | ||
| 1307 | u64 request_mask) | ||
| 1308 | { | ||
| 1309 | int err; | ||
| 1310 | struct p9_client *clnt; | ||
| 1311 | struct p9_stat_dotl *ret = kmalloc(sizeof(struct p9_stat_dotl), | ||
| 1312 | GFP_KERNEL); | ||
| 1313 | struct p9_req_t *req; | ||
| 1314 | |||
| 1315 | P9_DPRINTK(P9_DEBUG_9P, ">>> TGETATTR fid %d, request_mask %lld\n", | ||
| 1316 | fid->fid, request_mask); | ||
| 1317 | |||
| 1318 | if (!ret) | ||
| 1319 | return ERR_PTR(-ENOMEM); | ||
| 1320 | |||
| 1321 | err = 0; | ||
| 1322 | clnt = fid->clnt; | ||
| 1323 | |||
| 1324 | req = p9_client_rpc(clnt, P9_TGETATTR, "dq", fid->fid, request_mask); | ||
| 1325 | if (IS_ERR(req)) { | ||
| 1326 | err = PTR_ERR(req); | ||
| 1327 | goto error; | ||
| 1328 | } | ||
| 1329 | |||
| 1330 | err = p9pdu_readf(req->rc, clnt->proto_version, "A", ret); | ||
| 1331 | if (err) { | ||
| 1332 | p9pdu_dump(1, req->rc); | ||
| 1333 | p9_free_req(clnt, req); | ||
| 1334 | goto error; | ||
| 1335 | } | ||
| 1336 | |||
| 1337 | P9_DPRINTK(P9_DEBUG_9P, | ||
| 1338 | "<<< RGETATTR st_result_mask=%lld\n" | ||
| 1339 | "<<< qid=%x.%llx.%x\n" | ||
| 1340 | "<<< st_mode=%8.8x st_nlink=%llu\n" | ||
| 1341 | "<<< st_uid=%d st_gid=%d\n" | ||
| 1342 | "<<< st_rdev=%llx st_size=%llx st_blksize=%llu st_blocks=%llu\n" | ||
| 1343 | "<<< st_atime_sec=%lld st_atime_nsec=%lld\n" | ||
| 1344 | "<<< st_mtime_sec=%lld st_mtime_nsec=%lld\n" | ||
| 1345 | "<<< st_ctime_sec=%lld st_ctime_nsec=%lld\n" | ||
| 1346 | "<<< st_btime_sec=%lld st_btime_nsec=%lld\n" | ||
| 1347 | "<<< st_gen=%lld st_data_version=%lld", | ||
| 1348 | ret->st_result_mask, ret->qid.type, ret->qid.path, | ||
| 1349 | ret->qid.version, ret->st_mode, ret->st_nlink, ret->st_uid, | ||
| 1350 | ret->st_gid, ret->st_rdev, ret->st_size, ret->st_blksize, | ||
| 1351 | ret->st_blocks, ret->st_atime_sec, ret->st_atime_nsec, | ||
| 1352 | ret->st_mtime_sec, ret->st_mtime_nsec, ret->st_ctime_sec, | ||
| 1353 | ret->st_ctime_nsec, ret->st_btime_sec, ret->st_btime_nsec, | ||
| 1354 | ret->st_gen, ret->st_data_version); | ||
| 1355 | |||
| 1356 | p9_free_req(clnt, req); | ||
| 1357 | return ret; | ||
| 1358 | |||
| 1359 | error: | ||
| 1360 | kfree(ret); | ||
| 1361 | return ERR_PTR(err); | ||
| 1362 | } | ||
| 1363 | EXPORT_SYMBOL(p9_client_getattr_dotl); | ||
| 1364 | |||
| 1306 | static int p9_client_statsize(struct p9_wstat *wst, int proto_version) | 1365 | static int p9_client_statsize(struct p9_wstat *wst, int proto_version) |
| 1307 | { | 1366 | { |
| 1308 | int ret; | 1367 | int ret; |
