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; |